Docker Out Of Docker(Jenkins을 docker 컨테이너로 구축)
배경
개인 프로젝트에서 aws free tier 서버를 사용중이며, jenkins을 docker로 설치하고 그 내부에서 docker build와 같은 docker명령어를 사용해야 하였다.
docker container 접속하여 docker -version를 쳐보니 아래와 같이 명령어를 찾을 수 없다고 한다....
bash: docker: command not found
해결
1. Docker In Docker
docker 컨테이너에 내부 격리된 공간에 docker daemon를 설치하는 방식이나 권장되지 않는다고 한다.
2. Docker Out Of Docker
docker 소켓을 Mount하는 방법
세팅 1
docker run \
-v /var/run/docker.sock:/var/run/docker.sock \
...
위와 같이 해당 옵션을 주어 docker컨테이너를 띄우면 내부에서 명령어를 사용할 수 있다고 몇몇 블로그에서 확인하였다.
그러나 위와 같은 docker:command not found를 목격하고 만다...
stackoverflow에서 해당 내용에 대한 원인을 찾았다.
요약하면, 위 옵션을 통하여 호스트의 docker 데몬을 컨테이너 내부에서 가지곤 있으나, docker 데몬을 실행하는(데몬에 명령을 보내는) 실행파일은 컨테이너 내부에 없다는 것이다.
따라서, docker 컨테이너 내부에서 데몬에 명령을 보낼 수 있는 docker CLI를 설치한다면 사용할 수 있다는 것이다.
세팅 2(cli 설치)
# jenkins container 접속
docker exec -it jenkins /bin/bash
# linux 버전 확인
cat /etc/issue
# Docker 설치
## - Setup Repo
apt-get update
apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
mkdir -p /etc/apt/keyrings
#linux 버전에 맞게 설치
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
## - Install Docker Engine
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
위 과정을 마치고 나니 정상적으로 docker command 사용 가능하다!!!
참고
https://postlude.github.io/2020/12/26/docker-in-docker/
Jenkins를 docker 컨테이너로 구축하기(Docker in Docker)
0. 계기올해 초에 회사 jenkins 서버를 docker로 재구축한 적이 있었습니다. 그 때의 경험을 블로그에 반드시 남겨야겠다고 생각했었는데, 이제서야 글을 쓰게 되었네요. 일단 제가 겪은 상황은 다음
postlude.github.io
[Docker] 컨테이너 내부에서 Docker 사용하기 - DinD, DooD
Docker는 크게 Docker Daemon, Docker Client, Docker Registry로 분리되어 있습니다. Docker Daemon - Docker Host라고 부르기도 합니다. Docker API 요청을 수신하고 이미지, 컨테이너, 네트워크, 볼륨 등
velog.io
https://blog.dasomoli.org/tag/var-run-docker-sock/