DooD(Docker-outside-of-Docker)는
컨테이너 내부에서 호스트 머신의 Docker 엔진을 직접 사용하는 방식을 말한다.
CI/CD 도구(Jenkins, GitLab Runner 등)가 컨테이너 안에서 실행될 때, Docker 이미지 빌드, 컨테이너 실행 등 Docker 명령어를 사용하려면 컨테이너 내부에서 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이 작동함
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 | 새로운 컨테이너를 생성해서 실행 |
-d | Detached mode → 백그라운드 실행 (터미널 점유 X) |
--name <container_name> | 컨테이너 이름을 지정 |
-u root | 컨테이너를 root 권한으로 실행 (중요! apt 설치 등 가능하게 함) |
-p 8080:8080 | 호스트 포트 8080 → 컨테이너 8080 매핑 (Jenkins 웹 UI) |
-p 50000:50000 | Jenkins 슬레이브/에이전트 연결용 포트 (CI 확장용) |
-v jenkins_home:/var/jenkins_home | 데이터 볼륨. Jenkins 설정/데이터를 호스트에 저장해서 컨테이너가 꺼져도 유지 |
-v /var/run/docker.sock:/var/run/docker.sock | DooD 핵심: 컨테이너에서 호스트 Docker 엔진 사용 가능하게 만듦 |
jenkins/jenkins:lts | 사용할 이미지: Jenkins 공식 LTS 버전 |