서론
Docker-in-Docker는 이미 존재하는 Docker Daemon에서 새로운 Container를 구동하고, 그 안에서 새로운 Daemon을 구동하는 기법이다.
기존에는 docker:dind
이미지와 --privileged
플래그를 이용하여 새로운 컨테이너를 생성하면 바로 가능한 간단한 문제였으나, Synology DSM 7.0에서는 기본 docker
의 storage-driver
가 aufs
로 설정되어 있고 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
안녕하세요 작성하신 내용으로 실행 시
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.
요런 에러가 나는데요 혹시 다른 설정 같은거 하셨나요?
권한 문제로 생각됩니다. 보통은 맨앞에
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/ )