docker container에서 docker image 빌드 진행 과정 (jenkins) - host docker.sock을 연결 - 2

LeeKyoungChang·2023년 1월 22일
1
post-thumbnail

docker, jenkins 실행 목록

 

📚 1. 현재 문제점, 힌트를 받다

독학으로 문제를 해결하다보니, 원인을 알기 힘들었다.

okky에 질문 글을 올리게 되었는데, 정말 감사하게 한 분께서 댓글로 정말 큰 힌트를 주셨다.😭😭😭

okky에 올린 질문

을 통해 받은 결정적인 힌트! (이걸 보고 해결했다.)

1.보시면 위에서 systemctl 명령으로 docker 서비스가 돌아가는 모습은 EC2 Ubuntu에서 실행이 되고 있는 겁니다.

2.그래서 jenkins를 docker환경으로 실행을 하기 위해서는 jenkins컨테이너를 만들어야 됩니다.

3.jenkins container가 생성이 되었고 접속을 하면 jenkins는 잘 동작을 합니다.

4.근데 빌드된 소스코드를 실행 런타임과 함께 레이어로 묶어서 이미지로 만드려면 jenkins컨테이너 내부에 docker가 실행이 되고 있어야 합니다.

5.그래서 jenkins컨테이너 서버 자체에서 docker를 사용하기 위해서는 dind 방식과 dood방식이 존재합니다.

6.컨테이너는 default로 호스트 시스템과 격리되어 systemctl를 사용할 수 없는 환경입니다.  
  
7.따라서 제가 볼 때는 jenkuns 컨테이너 안에서 해당 명령어(docker ps or dopcker images)를 실행한 것처럼 보이는데요

8.제가 말한 -v /var/run/docker.sock:/var/run/docker.sock 옵션은 jenkins 컨테이너를 실행할 때 붙여주라는 의미입니다.

예를들어 docker run -dit -p 8081:8080 --name okkyjenkins -v /var/run/docker.sock:/var/run/docker.sock jenkins:latest 와 같이 실행을 하고

9.docker exec -it okkyjenkins /bin/bash로 접속해서 docker ps를 하게 되면 로컬 호스트 환경과 동일한 내용이 보일거에요 -v옵션으로 서비스를 로컬과 컨테이너간에 공유를 했기 때문입니다.

 

나의 문제점은 docker container와 연결한 후, 거기서 작업해야할 것을 ubuntu(docker-compose.yml와 docker image가 있는 쪽에서 계속 실행함)

결국, 이전에 settings한 (설정을 추가한 docker-compose.yml으로 실행한 게 아닌, docker run으로 실행한 것) 것에서 계속 실행을 했던 것이다.

docker run로 실행 (docker run -it xxxx xxx xxx 로 실행했지만, 밑와 같이 설정이 몇 가지 추가되지 않았다.)

  • docker.sock 설정을 추가했지만, 이전에 docker run 한 곳에서는 volumes에 docker.sock을 추가하지 않았다. ( /var/run/docker.sock:/var/run/docker.sock)
  • container_name: ubuntu_jenkins_1 도 추가하지 않았다.

=> 이와 같이 여러가지 설정을 추가하지 않은 상태에서 docker run을 실행했기 때문에

스크린샷 2023-01-22 오전 1 17 05 이와 같은 결과를 만나게 된 것 같다.

 

✔️ 그래서?

이전 docker image를 전부 종료하고 다시 시작하자!

docker rmi -f imageID : image 강제 종료

 

 

📚 2. 해결방안

처음부터 다시 setting 해보자!

docker-compose.yml 실행 방법 에서 3번을 참고하면 docker-compose.yml 실행 방법을 알 수 있다.

나 같은 경우 (docker docker-compose.yml background에서 실행되게 구현했다.)

 

✔️ docker-compose.yml

version: "3"
services:
  jenkins:
    image: jenkins/jenkins:lts
    container_name: ubuntu_jenkins_1
    user: root
    volumes:
      - ./jenkins:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - 7777:8080

 

✔️ docker-compose up을 forground에서 실행했을 경우

스크린샷 2023-01-22 오후 6 23 38

명령어 종료시, 서버가 종료된다. (jenkins 서버 종료됨)

 

✔️ docker-compose up -d : background에서 실행했을 경우

스크린샷 2023-01-22 오후 6 23 25
  • docker image jenkins가 실행되었다!

 

✔️ docker container 접속하기

docker exec -it container_name /bin/bash

스크린샷 2023-01-22 오후 6 28 23

하지만 현재 docker가 추가되지 않은 상태다.

 

✔️ docker 설치

docker exec -it ubuntu_jenkins_1 /bin/bash : container 접속
curl -fsSL https://get.docker.com -o get-docker.sh : docker 설치
sh get-docker.sh

 

아니라면

✔️ 공식 docker apt repository 구성 및 docker ce 바이너리 설치하는 명령어를 입력

apt-get update && \
apt-get -y install apt-transport-https \
     ca-certificates \
     curl \
     gnupg2 \
     software-properties-common && \
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey; apt-key add /tmp/dkey && \
add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") \
   $(lsb_release -cs) \
   stable" && \
apt-get update && \
apt-get -y install docker-ce
스크린샷 2023-01-22 오후 6 35 40

이부분은 docker 잘하시는 분께서 알려주신 사이트 를 참고했다.

 

✔️ docker ps로 docker 명령어 잘 실행되는지 확인하기

스크린샷 2023-01-22 오후 6 38 19

 

✔️ pipeline에서 빌드 실행!

스크린샷 2023-01-22 오후 6 09 22

 

이제 dockerfile -> docker image -> docker container가 어떻게 동작하는 지 알게 된 것 같다!

docker 장난 아니구만!!!

 

 

profile
"야, (오류 만났어?) 너두 (해결) 할 수 있어"

0개의 댓글