이재홍의 언제나 최신 Docker - Unit 7. Docker 안에서 Docker 실행하기

저작권 안내
  • 책 또는 웹사이트의 내용을 복제하여 다른 곳에 게시하는 것을 금지합니다.
  • 책 또는 웹사이트의 내용을 발췌, 요약하여 발표 자료, 블로그 포스팅 등으로 만드는 것을 금지합니다.

Docker 좀더 활용하기

이재홍 http://www.pyrasis.com

Docker 안에서 Docker 실행하기

Docker 컨테이너 안에서 Docker를 실행하는 방법입니다. 복잡하게 왜 Docker 컨테이너 안에서 Docker를 실행할까요? 보통 Jenkins 등의 CI/CD 빌드 자동화 시스템을 이용해서 Docker 이미지를 생성할 때 활용할 수 있습니다. CI/CD 환경 자체도 Docker 이미지로 만들었다면 Docker 컨테이너 안에서 Docker를 실행할 수 있어야 합니다.

그림 6-8 Docker in Docker

먼저 docker:dind 이미지로 Docker 서버를 실행합니다.

$ sudo docker network create dind-network
$ sudo docker volume create docker-certs-ca
$ sudo docker volume create docker-certs-client
$ sudo docker run --privileged --name dind-docker -d \
    --network dind-network --network-alias docker \
    -e DOCKER_TLS_CERTDIR=/certs \
    -v docker-certs-ca:/certs/ca \
    -v docker-certs-client:/certs/client \
    docker:dind

여기서 --privileged 옵션이 중요합니다. 이 옵션은 컨테이너 안에서 호스트의 리눅스 커널 기능을 모두 사용할 수 있도록 해줍니다.

다음 명령을 실행하여 docker 컨테이너를 생성합니다.

$ sudo docker run -i -t --rm --network dind-network \
    -e DOCKER_TLS_CERTDIR=/certs \
    -v docker-certs-client:/certs/client:ro \
    docker:latest sh

이제 Docker 컨테이너 안에서 Docker를 실행해보겠습니다. 다음 명령을 입력하여 busybox를 실행해봅니다.

/ # docker run -i -t busybox:latest /bin/sh
Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
f5b7ce95afea: Pull complete
Digest: sha256:9810966b5f712084ea05bf28fc8ba2c8fb110baa2531a10e2da52c1efc504698
Status: Downloaded newer image for busybox:latest
/ #

이렇게 호스트 → docker 컨테이너 → busybox 컨테이너 순서로 실행이 되었습니다.


저작권 안내

이 웹사이트에 게시된 모든 글의 무단 복제 및 도용을 금지합니다.
  • 블로그, 게시판 등에 퍼가는 것을 금지합니다.
  • 비공개 포스트에 퍼가는 것을 금지합니다.
  • 글 내용, 그림을 발췌 및 요약하는 것을 금지합니다.
  • 링크 및 SNS 공유는 허용합니다.

Published

2022-10-03