Seongwon Lim

[Docker] Docker in Docker(DinD) - 도커 컨테이너 안에 도커 사용 본문

Docker

[Docker] Docker in Docker(DinD) - 도커 컨테이너 안에 도커 사용

limsw 2024. 2. 22. 11:00
반응형

서론

Docker In Docker(DinD)는 실행중인 특정 도커 컨테이너에서 도커를 사용하는 기술이다.

이번 글에서는 DinD를 사용하기 위해 필수적으로 해야하는 설정을 알아보고자 한다.

본론

예를 들어, 도커 컨테이너 안에서 로컬 서버의 도커 컨테이너 목록을 조회하는 기능을 구현한다고 해보자.

우리는 도커 컨테이너 목록을 조회하기 위해 docker ps -a 명령어를 사용한다.

 

해당 명령어를 기반으로 docker 이미지를 가진 컨테이너에서 docker ps -a 명령어를 수행하려면 다음과 같이 도커 명령어를 작성할 수 있다.

// --rm 명령어는 프로세스 종료 시 컨테이너 자동 제거 옵션
$ docker run --rm docker docker ps -a

이미지를 받고난 후 명령어가 수행되면 다음과 같은 에러가 발생할 것이다.

error during connect: Get "http://docker:2375/v1.24/containers/json?all=1": dial tcp: lookup docker on 8.8.8.8:53: no such host

 

해당 에러가 발생하는 이유는 로컬의 Docker Daemon에 명령어를 전달하기 위한 소켓(docker.sock)이 존재하지 않아서 발생하는 문제이다.

 

이를 해결하기 위해서는 도커 컨테이너 시작 시 볼륨 마운트를 통해 문제를 해결할 수 있다.

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock docker docker ps -a

볼륨 마운트 설정을 통한 DinD 기능 구현

 

위 그림과 같이 도커 컨테이너 안에서 로컬 서버의 도커 컨테이너 목록을 조회할 수 있다.

 

docker-compose.yml 파일에 볼륨 마운트를 하려면 다음과 같이 작성하면 된다.

services:
  myservice:
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

 

Comments