barded

[투게덕] DooD vs DinD 본문

프로젝트/투게덕

[투게덕] DooD vs DinD

barded 2024. 3. 18. 04:22

EC2에 젠킨스를 Docker로 띄우면서, Docker 명령어가 적용되지 않는 경우가 있었고, 이를 통해

DooD(Docker Out Of Docker), DinD(Docker in Docker)에 대해 알게 되었다.

DooD(Docker Out Of Docker)란?

DooD는 Docker Out Of Docker의 약어로, 호스트 도커 데몬이 사용하는 소켓을 공유하여 도커 클라이언트 컨테이너에서 컨테이너를 실행시키는 것이다. 새로 실행시킨 컨테이너는 도커 클라이언트 컨테이너와 sibiling 관계를 가지며 테스트 환경이 도커 호스트 환경과 일치하는 것을 알 수 있다. 그리고 호스트와 도커 이미지를 공유한다.

DinD(Docker In Docker)란?

DinD는 Docker in Docker의 약어로, 도커 컨테이너 내부에 호스트 도커 데몬과는 별개의 새로운 도커 데몬을 실행시키는 것이다. 새로 실행된 도커 데몬 컨테이너에, 새로운 도커 클라이언트 컨테이너를 이용하여 명령을 내리는 것이 가능하며, 새로 생성된 도커 환경은 컨테이너 환경이기 때문에, 테스트 후의 정리가 꽤나 간편하다.

그런데 Jenkins 상에서 Docker 관련 작업이 필요하여 단순하게 컨테이너 내부에서 설치를 하려고 했는데, 내부에서 docker 를 띄우는 것과 관련하여 이것저것 이슈가 있다고 한다(https://jpetazzo.github.io/2015/09/03/do-not-use-docker-in-docker-for-ci/)

따라서 내부에서 Docker 를 전부 띄우지 말고 외부(호스트 환경) 의 Docker 와 소켓을 공유하여 사용하는 DinD를 이번 프로젝트에서 사용하였다.

실행 방법은 간단하다. 아래와 같이 호스트의 도커 소켓을 컨테이너에 마운트 시켜 외부와 내부 도커를 연결하면된다.

$ docker run -it -v /var/run/docker.sock:/var/run/docker.sock docker

'프로젝트 > 투게덕' 카테고리의 다른 글

[투게덕] MYSQL의 공간 데이터타입  (1) 2024.03.18
[투게덕] 자바17의 record란?  (0) 2024.03.18