DooD(Docker out of Docker), Jenkins 컨테이너에서 Docker 활용하기(1)

이진송·2025년 5월 2일

DooD(Docker out of Docker)란?

DooD(Docker-outside-of-Docker)는
컨테이너 내부에서 호스트 머신의 Docker 엔진을 직접 사용하는 방식을 말한다.

CI/CD 도구(Jenkins, GitLab Runner 등)가 컨테이너 안에서 실행될 때, Docker 이미지 빌드, 컨테이너 실행 등 Docker 명령어를 사용하려면 컨테이너 내부에서 Docker를 사용할 수 있어야 한다.

이때 Docker를 사용하는 방법은 크게 두 가지가 있다:

방법 설명

  1. DinD (Docker in Docker) 컨테이너 안에 Docker 데몬을 새로 띄움
  2. DooD (Docker outside of Docker) 호스트의 Docker 데몬을 공유해서 사용
+-----------------------------+
|     Jenkins Container       |
|                             |
|   docker build/run/etc...   |
|       ↓                     |
|   /var/run/docker.sock      | ← 공유된 소켓
+-----------------------------+
           ↓
+-----------------------------+
|     Docker Daemon (Host)    |
+-----------------------------+
  • /var/run/docker.sock는 Docker 데몬과의 통신용 소켓 파일

  • 이 파일을 컨테이너에 볼륨 마운트(-v) 해주면, 컨테이너 안에서도 docker build, docker run이 작동함

EC2 Docker-compose 설치

Docker-compose는 여러 컨테이너를 한번에 실행하여 관리자가 컨테이너를 하나하나 실행해야 하는 고생을 덜어주는 장점을 갖고 있다.
1. SpringBoot
2. React
3. DB
4. Bot
4개의 컨테이너를 굴릴 예정이다.

지금 프로젝트에서는 Docker 컨테이너만 생성해서 간편하게 해도 문제 없지만, 한번 써보고싶어서 Docker-compose를 적용했다.

컨테이너 생성

docker run -d \
  --name <container_name> \
  -u root \
  -p 8080:8080 -p 50000:50000 \
  -v jenkins_home:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  jenkins/jenkins:lts
옵션설명
docker run새로운 컨테이너를 생성해서 실행
-dDetached mode → 백그라운드 실행 (터미널 점유 X)
--name <container_name>컨테이너 이름을 지정
-u root컨테이너를 root 권한으로 실행 (중요! apt 설치 등 가능하게 함)
-p 8080:8080호스트 포트 8080 → 컨테이너 8080 매핑 (Jenkins 웹 UI)
-p 50000:50000Jenkins 슬레이브/에이전트 연결용 포트 (CI 확장용)
-v jenkins_home:/var/jenkins_home데이터 볼륨. Jenkins 설정/데이터를 호스트에 저장해서 컨테이너가 꺼져도 유지
-v /var/run/docker.sock:/var/run/docker.sockDooD 핵심: 컨테이너에서 호스트 Docker 엔진 사용 가능하게 만듦
jenkins/jenkins:lts사용할 이미지: Jenkins 공식 LTS 버전

작성중,,

profile
개발자 뉴비, 새로운 것을 배워가고 특정한 주제에 대해 고민하는 것을 즐거워합니다.

0개의 댓글