Jenkins - Linux에 Docker로 설치 > Jenkins 자료실

본문 바로가기

사이트 내 전체검색

뒤로가기 Jenkins 자료실

Jenkins - Linux에 Docker로 설치

페이지 정보

작성자 snow 작성일 25-02-14 09:30 조회 852 댓글 0

본문

0. 개요

이 게시글에서는 Linux에 Docker를 활용한 Jenkins 설치 방법에 대한 문서를 살펴보고, 예시만 안내드리는 글입니다.

1. Docker 브리지 네트워크 생성하기

도커 환경에서 Jenkins를 활용하려면 우선 새로운 네트워크를 생성해야 합니다. 이를 통해 Jenkins와 컨테이너 간 통신이 수월해지며, 별도의 가상 네트워크를 구성함으로써 컨테이너 간 충돌을 최소화할 수 있습니다. 예를 들어 bridge 네트워크를 구성하고, 이 네트워크를 Jenkins에 연결하여 컨테이너끼리 원활히 소통하도록 설정합니다. 도커 공식 문서에서도 bridge 네트워크 사용이 대표적으로 소개되며, 특히 Jenkins처럼 여러 컨테이너가 상호 연결되는 상황에서 네트워크 설정은 매우 중요합니다.

아래 명령어를 사용하면 jenkins라는 이름을 가진 새로운 도커 네트워크를 생성할 수 있습니다.

```bash

docker network create jenkins

```

해당 명령을 실행할 시 도커 내부에서 jenkins라는 이름의 bridge 네트워크가 생성됩니다. 이후 이 네트워크에 연결된 컨테이너들은 서로 호스트명과 포트를 통해 통신할 수 있게 됩니다.


2. Docker in Docker(docker:dind) 컨테이너 실행하기

Jenkins 노드 안에서 도커 명령어를 실행하려면, 도커 컨테이너 내부에 또 다른 도커 환경(docker:dind)을 두어야 합니다. 이를 통해 Jenkins 컨테이너에서 별도의 도커 엔진을 활용하여 이미지를 빌드하거나 컨테이너를 관리할 수 있습니다. 여기서는 docker:dind 이미지를 사용해 컨테이너를 기동하고, Jenkins와 동일한 네트워크에 연결함으로써 도커 명령어가 정상 동작하도록 구성합니다.

아래 예시는 docker run 명령을 통해 docker:dind 컨테이너를 jenkins라는 네트워크에 붙이고, TLS 인증서 경로를 설정해 외부에서 안전하게 컨테이너 내부 도커 데몬을 제어할 수 있도록 합니다.

```bash

docker run \

 --name jenkins-docker \# <1>

 --rm \# <2>

 --detach \# <3>

 --privileged \# <4>

 --network jenkins \# <5>

 --network-alias docker \# <6>

 --env DOCKER_TLS_CERTDIR=/certs \# <7>

 --volume jenkins-docker-certs:/certs/client \# <8>

 --volume jenkins-data:/var/jenkins_home \# <9>

 --publish 2376:2376 \# <10>

docker:dind \# <11>

 --storage-driver overlay2 \# <12>

```

위 명령을 실행할 시 별도의 도커 데몬이 포함된 docker:dind 컨테이너가 실행되며, Jenkins에서 도커 명령어를 수행할 수 있는 환경이 마련됩니다. 특히 privileged 옵션은 컨테이너 내부에서 도커 기능을 제대로 동작시키기 위해 필수적으로 요구되며, TLS 인증서 설정을 통해 외부 접근 시 보안을 향상할 수 있습니다. 또한 --volume 옵션으로 jenkins-data, jenkins-docker-certs 등의 볼륨이 연결되어 데이터 보존과 인증서 관리를 용이하게 해줍니다.

아래는 주석(annotation) 없이 실행할 수 있는 동일 명령어 예시입니다.

```bash

docker run --name jenkins-docker --rm --detach \

 --privileged --network jenkins --network-alias docker \

 --env DOCKER_TLS_CERTDIR=/certs \

 --volume jenkins-docker-certs:/certs/client \

 --volume jenkins-data:/var/jenkins_home \

 --publish 2376:2376 \

docker:dind --storage-driver overlay2

```

해당 명령을 실행할 시 주석이 제거된 형태로 동일한 컨테이너 환경이 실행되므로, 복사·붙여넣기에 문제가 있을 경우 이 명령을 대신 사용하면 됩니다.


3. Jenkins 도커 이미지를 커스터마이징하기

Jenkins를 보다 편리하게 사용하기 위해서는 공식 Jenkins 도커 이미지를 필요에 맞게 커스터마이징해야 할 때가 많습니다. 예를 들어 플러그인을 추가하거나, 특정 패키지를 사전에 설치해둘 수 있습니다. 아래 단계에서는 Dockerfile을 이용해 jenkins/jenkins 이미지를 기반으로 추가 패키지를 설치하고, jenkins-plugin-cli를 통해 필요한 플러그인을 미리 세팅합니다.


3.1. Dockerfile 생성

먼저 새로운 Dockerfile을 작성합니다. lsb-release나 docker-ce-cli 같은 패키지를 설치하여 컨테이너 내부에서 보다 자유롭게 환경을 구성할 수 있습니다.

```DockerFile

FROM jenkins/jenkins:jenkins-stable-jdk17

USER root

RUN apt-get update && apt-get install -y lsb-release

RUN curl -fsSLo /usr/share/keyrings/docker-archive-keyring.asc \

 https://download.docker.com/linux/debian/gpg

RUN echo "deb [arch=$(dpkg --print-architecture) \

 signed-by=/usr/share/keyrings/docker-archive-keyring.asc] \

 https://download.docker.com/linux/debian \

 $(lsb_release -cs) stable" > /etc/apt/sources.list.d/docker.list

RUN apt-get update && apt-get install -y docker-ce-cli

USER jenkins

RUN jenkins-plugin-cli --plugins "blueocean docker-workflow"

```

해당 Dockerfile을 통해 Jenkins가 동작하는 컨테이너 내부에 추가 패키지와 플러그인이 설치되므로, Jenkins 실행 시 편리한 환경을 구비할 수 있습니다.


3.2. 도커 이미지 빌드하기

위 Dockerfile이 준비되었다면, 다음 명령으로 이미지를 빌드합니다. jenkins-stable-1과 같은 태그를 붙여 이미지 버전을 명시적으로 관리할 수 있습니다.

```bash

docker build -t myjenkins-blueocean:jenkins-stable-1 .

```

해당 명령을 실행할 시 현재 디렉터리에 있는 Dockerfile을 바탕으로 커스터마이징된 Jenkins 이미지를 생성합니다. 만약 공식 Jenkins 도커 이미지를 사전에 내려받지 않았다면, 이 과정을 통해 자동으로 이미지를 받아오게 됩니다.


4. 커스터마이징된 Jenkins 컨테이너 실행하기

이제 앞서 빌드한 myjenkins-blueocean:jenkins-stable-1 이미지를 활용해 Jenkins 컨테이너를 실행해봅시다. 이 컨테이너는 우리가 만든 도커 네트워크인 jenkins에 연결하여 docker:dind 컨테이너와 통신하고, 설치된 플러그인을 활용해 다양한 빌드를 수행할 수 있습니다.

```bash

docker run \

 --name jenkins-blueocean  # <1>

 --restart=on-failure  # <2>

 --detach  # <3>

 --network jenkins  # <4>

 --env DOCKER_HOST=tcp://docker:2376  # <5>

 --env DOCKER_CERT_PATH=/certs/client

 --env DOCKER_TLS_VERIFY=1

 --publish 8080:8080  # <6>

 --publish 50000:50000  # <7>

 --volume jenkins-data:/var/jenkins_home  # <8>

 --volume jenkins-docker-certs:/certs/client:ro  # <9>

myjenkins-blueocean:jenkins-stable-1  # <10>

```

해당 명령을 실행할 시 Docker 호스트 설정, 인증서 경로, TLS 인증 등을 통해 docker:dind 컨테이너와 안전하게 통신할 수 있습니다. 또한 --publish 옵션으로 8080과 50000 포트가 외부로 노출되므로, Jenkins 웹 UI와 에이전트 연결 등이 용이해집니다.

아래는 주석이 없는 동일 명령어입니다. 복사·붙여넣기 시 주석으로 인한 문제가 있다면 해당 버전을 사용하시면 됩니다.

```bash

docker run --name jenkins-blueocean --restart=on-failure --detach \

 --network jenkins --env DOCKER_HOST=tcp://docker:2376 \

 --env DOCKER_CERT_PATH=/certs/client --env DOCKER_TLS_VERIFY=1 \

 --publish 8080:8080 --publish 50000:50000 \

 --volume jenkins-data:/var/jenkins_home \

 --volume jenkins-docker-certs:/certs/client:ro \

myjenkins-blueocean:jenkins-stable-1

```

해당 명령을 실행할 시 커스터마이징된 Jenkins 환경이 도커 컨테이너로 기동됩니다. Jenkins의 웹 UI는 호스트 머신의 8080 포트로 접속할 수 있고, 에이전트 연결을 위해 50000 포트도 열려 있습니다.


5. Jenkins 초기 설정 마무리

컨테이너가 정상 실행되면, 브라우저에서 호스트IP:8080으로 접속해 Jenkins 초기 설정을 진행할 수 있습니다. 관리자 암호를 입력하고, 필요한 플러그인을 설치한 뒤 본격적으로 파이프라인 작업을 설정하면 됩니다. docker:dind 컨테이너로 인해 컨테이너 내부에서 바로 도커 빌드를 실행할 수 있으므로, CI/CD 파이프라인 구성 시 매우 유용합니다.

만약 커스텀 이미지를 새로 빌드하거나 Jenkins 설정을 추가로 바꾸고 싶다면, 해당 Dockerfile을 수정하고 다시 이미지 빌드를 거쳐 컨테이너를 재기동하시면 됩니다.

출처: [Jenkins] https://www.jenkins.io/doc/book/installing/docker/#on-macos-and-linux (CC BY-SA 4.0)

댓글목록 0

등록된 댓글이 없습니다.

Copyright © 소유하신 도메인. All rights reserved.

사이트 정보

회사명 : (주)리눅스데이타시스템 / 대표 : 정정모
서울본사 : 서울특별시 강남구 봉은사로 114길 40 홍선빌딩 2층 / tel : 02-6207-1160
대전지사 : 대전광역시 유성구 노은로174 도원프라자 5층 / tel : 042-331-1161

PC 버전으로 보기