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) 파이프라인 구축에 있어 중요한 발판을 제공합니다.