Hi yoahn 개발블로그

Jenkins 이미지 안에서 도커 실행 본문

sswu

Jenkins 이미지 안에서 도커 실행

hi._.0seon 2023. 6. 8. 00:04
반응형

Jenkins 를 이용하여 CI/CD를 할 때, Docker를 사용하는 상황이라면 Jenkins 가 설치된 인스턴스에 이미 Docker 가 깔려있지만 Jenkins 이미지 안에는 Docker 가 없기 때문에 docker 실행시 오류가 발생한다.

 

이를 해결하기 위해 Jenkins 이미지 안에 도커를 또 깔아야 할까?

아니다.

 

호스트 컴퓨터에 깔려있는 도커 데몬과, 젠킨스 컨테이너 내에 존재하는 도커 클라이언트가 통신할 수 있도록 해주면 된다.

1. docker 설치

sudo wget -qO- https://get.docker.com/ | sh
sudo usermod -aG docker ${USER} # docker 실행을 sudo 권한 없이 할 수 있게 해줌
sudo systemctl start docker
sudo systemctl enable docker
logout

2. Jenkins 설치

  • Jenkins Docker 이미지 빌드

docker build -t myjenkins 로 이미지 빌드

  • Jenkins 컨테이너 실행
docker run -d --name myjenkins -p 8080:8080 --restart=always 
	-v jenkins-home:/var/jenkins_home 
    -v /var/run/docker.sock:/var/run/docker.sock 
    --group-add $(stat -c '%g' /var/run/docker.sock) myjenkins
  • -v /var/run/docker.sock:/var/run/docker.sock
    • 소켓 연결
    • 호스트 소켓과 컨테이너 안의 소켓을 연결 (도커 안에서 도커를 실행)
    • 젠킨스 컨테이너에서 호스트의 Docker engine 을 활용하기 위해서
    • docker volume: bind-mount 방식
  • -v jenkins-home:/var/jenkins_home
    • docker volume 방식

3. Docker 이미지로 배포하기

  • Jenkinsfile 작성
    • stage('여기는 원하는 이름으로 작성') {
          여기는 Jenkinsfile 명령 사용
      }
node {
	def app
	stage('Clone repository') {
		git 'https://github.com/AYoungSn/jenkins-test.git'
	}
	stage('Build image') {
		app = docker.build("dudtjs0920/sswu-opensource") // docker ID, docker repo
	}
	stage('Test image') {
		app.inside {
			sh 'make test'
		}
	}
	stage('Push image') {
		docker.withRegistry('https://registry.hub.docker.com', 'dudtjs0920') {
			app.push("${env.BUILD_NUMBER}")
			app.push("latest")
		}
	}
}
  • Dockerfile 작성
FROM ubuntu:20.04
RUN apt-get update && apt-get -y install build-essential && mkdir -p /app
COPY . /app/
WORKDIR /app/
CMD make

 

 

반응형

'sswu' 카테고리의 다른 글

컴파일러 기말  (0) 2022.11.22
컴파일러 중간  (0) 2022.10.04
Dockerfile 레이어 수  (0) 2022.06.13
디자인 패턴 기말 정리  (0) 2022.05.30
오픈소스 소프트웨어 기말 정리  (0) 2022.05.20
Comments