데이터센터프로그래밍12

12-Docker in Docker

🙂 저번시간에...

  • virtualbox를 설치해서 Docker Machine을 했을 때, 1개는 실행되는데, 2개 이상일 때 버그가 걸린다면? Ram이 부족해서 그런 것이다...
  • 예를들어, 4GB의 Ram을 가지고 있다면-1.5~2GB, Docker Machine 했을 때-1GB를 사용하고, 또 하나를 추가했을 때 Ram을 다 사용하게 된다.
  • 따라서, docker machine create에 --virtualbox-memory "1024"를 512로 다운시키는 것도 방법이다.
  • 참고로, 1024(디폴트값) = 1GB이다.

🔴 Docker in Docker (dind)

  • Docker in Docker는 권장하지 않지만, SW 환경이 풍부하지 않은 환경에서 개발해야 하는 경우에 사용한다.
  • Docker 안에서 또다른 Docker를 띄울 수 있도록 오픈소스의 프로젝트이다.
  • Linux, MacOS & Windows 위에서 열악한 개발환경을 가지고 있는 사람이 종종 사용한다.
  • 예시는 다음과 같다.

🟠 docker-compose.yml (1)

  • manager 서비스에 docker image를 dind로 작성하면, Docker in Docker로 실행할 수 있다.
# docker compose.yml
version: "3.7"
services:
 manager:
    container_name: manager
    image: docker:18.05.0-ce-dind
    privileged: true
    tty: true
    ports:
     -8080:80
     -9000:9000

🟠 docker-compose.yml (2)

# docker-compose up
docker-compose up -d
# docker command inside manager 
docker container exec -it manager \ docker container ls
docker container exec -it manager \ docker system df

▶ \을 통해 manager에게 명령하는 줄과 container가 실행하는 줄을 나눠서 두 명령어를 쉽게 확인할 수 있다.

🟠 Install nginx container inside manager container

docker container exec -it manager \ docker run -d -p 8080:80 nginx
docker container exec -it manager \ docker container ls

▶ manager 안에서 컨테이너를 띄운후, nginx가 실행되겠금 한다.

🟠 Install curl and check nginx in manager container

docker container exec -it manager \ apk add curl
docker container exec -it manager \ curl http://localhost:8080

▶ curl을 통해서 웹사이트에 접속할 수 있다.
🐧 즉, 도커엔진 위에서 docker in docker의 manager를 실행하고, docker in docker의 manager 안에서 nginx를 실행한 것을 확인 할 수 있다.

🟠 이렇게 까지 해야할까??

docker container exec -it manager \ docker container exec -it {DinD container ID} \ /bin/sh

▶ docker container 명령을 사용해서 manager에게 그 안에 docker container로 exec해서 계속해서 컨테이너를 만드는 것... 이것을 해야할까??.. 하지만, 도커를 여러 컴퓨터에서 실행할 때, 사용할 수 있다.
😂 dind는 위의 이유들로 인해 개발자들에게 권장하지 않다는 사실을 알게 되었다.

좋은 웹페이지 즐겨찾기