[DSM 7.0] Synology DSM Docker에서 Docker-in-Docker (dind) 실행하기

서론

Docker-in-Docker는 이미 존재하는 Docker Daemon에서 새로운 Container를 구동하고, 그 안에서 새로운 Daemon을 구동하는 기법이다.

기존에는 docker:dind 이미지와 --privileged 플래그를 이용하여 새로운 컨테이너를 생성하면 바로 가능한 간단한 문제였으나, Synology DSM 7.0에서는 기본 dockerstorage-driveraufs로 설정되어 있고 overlay2 드라이버를 지원하지 않으므로 이러한 기본적인 접근방식은 불가능하였다.

해결 방법

기존에는 아래와 같이 dind 컨테이너를 생성하였다.

docker run \
   --name jenkins-docker \
   --rm \
   --detach \
   --privileged \
   --network jenkins \
   --network-alias docker \
   --env DOCKER_TLS_CERTDIR=/certs \
   --volume jenkins-docker-certs:/certs/client \
   --volume jenkins-data:/var/jenkins_home \
   --publish 2376:2376 \
   docker:dind \
   --storage-driver overlay2

위 명령어는 jenkins 컨테이너를 위한 dind 컨테이너 생성 명령어(링크)다. 이 마지막 부분에 보면 --storage-driver 인자가 있는데, 이 부분만 aufs로 바꿔주면 바로 문제가 해결된다.

docker run \
   --name jenkins-docker \
   --rm \
   --detach \
   --privileged \
   --network jenkins \
   --network-alias docker \
   --env DOCKER_TLS_CERTDIR=/certs \
   --volume jenkins-docker-certs:/certs/client \
   --volume jenkins-data:/var/jenkins_home \
   --publish 2376:2376 \
   docker:dind \
   --storage-driver aufs

“[DSM 7.0] Synology DSM Docker에서 Docker-in-Docker (dind) 실행하기”에 대한 2개의 댓글

  1. 안녕하세요 작성하신 내용으로 실행 시
    docker: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post “http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create?name=jenkins-docker”: dial unix /var/run/docker.sock: connect: permission denied.

    요런 에러가 나는데요 혹시 다른 설정 같은거 하셨나요?

    1. 권한 문제로 생각됩니다. 보통은 맨앞에 sudo를 주어 실행하여 해결됩니다, 저는 번거로워서 현재 사용자를 docker 그룹에 추가하여 사용합니다(다만 이는 보안상 취약해질 수 있으므로 참고해주세요).

      기존 Ubuntu와 같은 Host OS에서는 useradd 등의 명령어를 이용하여 가능합니다 (참고자료:
      https://seulcode.tistory.com/557 )

      하지만, Synology NAS에서는 조금 다른 명령어를 이용하여 Docker 그룹에 추가를 진행할 수 있습니다. (참고자료: https://davejansen.com/manage-docker-without-needing-sudo-on-your-synology-nas/ )

답글 남기기

이메일 주소는 공개되지 않습니다.