본문으로 건너뛰기
  1. Posts/

Jenkins Dood 설정하기

·269 단어수·2 분· loading · loading · ·
CI/CD Jenkins Docker
목차

Docker inside Docker(DinD)는 Jenkins 내에서 Docker를 실행할 때 흔히 사용되는 방법이지만, 보안 문제와 성능 저하 등의 이유로 Docker outside of Docker(DooD) 방식이 대안으로 제시되고 있습니다. 이 글에서는 Jenkins에서 DooD 방식을 설정하는 방법을 안내합니다.

DooD(Docker outside of Docker)란?
#

DooD 방식은 Jenkins가 실행 중인 호스트의 Docker 엔진을 직접 사용하여 컨테이너를 실행합니다. 이 방식은 Jenkins 서버 외부에서 Docker 컨테이너를 관리함으로써 DinD의 복잡성과 오버헤드를 피할 수 있습니다.

설정 단계
#

1. Jenkins 서버에 Docker 설치
#

Jenkins 서버에서 Docker 명령어를 사용할 수 있도록 Docker를 설치합니다. Linux 기반 시스템의 경우, 다음 명령어로 Docker를 설치할 수 있습니다:

curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

2. Jenkins 사용자에게 Docker 그룹 추가
#

Jenkins 사용자가 Docker 명령어를 실행할 수 있도록 Docker 그룹에 추가합니다. 다음 명령어를 사용하여 Jenkins 사용자를 Docker 그룹에 추가하세요:

sudo usermod -aG docker jenkins

변경 사항을 적용하기 위해 Jenkins 서비스를 재시작합니다:

sudo systemctl restart jenkins

3. Jenkins에 Docker 플러그인 설치
#

Jenkins 관리 페이지에서 ‘플러그인 관리’ 섹션으로 이동하여 ‘Docker 플러그인’을 검색하고 설치합니다.

4. Docker 호스트와 통신할 Jenkins 크레덴셜 설정
#

Jenkins에서 Docker 호스트와 안전하게 통신하기 위해 크레덴셜을 설정합니다. 이는 Jenkins에서 Docker 이미지를 빌드하고 컨테이너를 실행하는 데 사용됩니다.

5. Jenkins 파이프라인에서 Docker 사용
#

이제 Jenkins 파이프라인 스크립트에서 Docker 명령어를 사용할 수 있습니다. 예를 들어, Docker 이미지를 빌드하고 실행하는 Jenkinsfile은 다음과 같습니다:

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                script {
                    docker.build("my-image:${env.BUILD_ID}")
                }
            }
        }
        stage('Deploy') {
            steps {
                script {
                    docker.run("my-image:${env.BUILD_ID}")
                }
            }
        }
    }
}

마무리
#

Jenkins에서 Docker outside of Docker(DooD) 설정을 통해 더 안전하고 효율적으로 Docker 기반의 빌드와 배포를 할 수 있습니다. 이 설정은 Docker 컨테이너를 이용한 지속적 통합(CI) 및 지속적 배포(CD) 파이프라인 구축에 있어 중요한 발판을 제공합니다.