카테고리 없음

Docker Out Of Docker(Jenkins을 docker 컨테이너로 구축)

se0nghyun2 2024. 6. 19. 12:47

배경

개인 프로젝트에서 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

 

https://velog.io/@inhwa1025/Docker-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88-%EB%82%B4%EB%B6%80%EC%97%90%EC%84%9C-Docker-%EC%82%AC%EC%9A%A9

 

[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/