Jenkins - Docker 실행 및 관리
페이지 정보
작성자 snow 작성일 25-02-19 10:36 조회 1,000 댓글 0본문
1. 개요 및 목차
이 게시글에서는 Jenkins Docker 실행 및 관리에 대한 문서를 살펴보고, 예시만 안내드리는 글입니다.
1.1. Jenkins Docker 개요
Jenkins는 CI/CD(지속적 통합 및 배포) 파이프라인 구현을 위해 널리 사용되는 자동화 서버입니다. Docker를 통해 Jenkins를 실행하면, 호스트 환경에 종속되지 않고 일관된 설정 상태를 유지할 수 있어 많은 시니어 운영자분들에게 특히 선호됩니다. Docker 이미지는 Jenkins 프로젝트 공식 이미지를 활용하며, 특정 태그(예: latest)를 사용하여 원하는 버전과 설정을 유연하게 지정할 수 있습니다.
Jenkins를 Docker 위에서 실행하게 되면 컨테이너화된 환경에서 독립적으로 동작하게 되고, 종속성이나 시스템 라이브러리 버전 충돌을 최소화할 수 있습니다. 이러한 방식은 운영 환경, 스테이징 환경, 테스트 환경 등 다양한 환경에서 Jenkins를 동일한 방식으로 배포할 수 있게 해주므로, 운영 편의성과 확장성 측면에서 큰 장점이 있습니다.
2. Docker 컨테이너 접근하기
Jenkins를 Docker로 실행한 후, 실제 컨테이너 내부로 접속하거나 로그를 확인하려면 Docker CLI(Command Line Interface) 명령을 사용하는 것이 가장 직관적입니다. 컨테이너 내부에 들어가서 Jenkins의 설정 파일을 편집하거나 플러그인 디렉터리를 확인하고 싶을 때 유용하며, 문제가 발생했을 때 로그를 확인하여 트러블슈팅하는 데에도 필수적인 방법입니다.
2.1. Jenkins Docker 컨테이너에 접속
기본적으로 Docker에서 실행된 Jenkins 컨테이너 내부에 진입하기 위해서는 docker exec 명령을 사용할 수 있습니다. 컨테이너에 접속하여 bash 셸로 들어가면, Jenkins 설정 파일이나 기타 로그 파일에 직접 접근할 수 있습니다. 아래 예시는 jenkins-blueocean 이라는 이름으로 컨테이너를 실행했을 때, 이 컨테이너 내부로 진입하는 명령어 예시입니다.
```bash
docker exec -it jenkins-blueocean bash
```
위 명령을 실행할 시 jenkins-blueocean 이라는 이름의 Jenkins Docker 컨테이너 안으로 진입하게 됩니다. 만약 컨테이너 이름을 지정하지 않고 실행했다면, 다음 명령을 통해 현재 실행 중인 컨테이너 목록과 그 이름을 확인할 수 있습니다.
```bash
docker ps
```
상기 출력에서 컨테이너 ID, NAMES 등의 정보를 확인하고, 원하는 컨테이너 이름을 사용하여 docker exec 명령을 다시 수행하면 됩니다. 예를 들어, 특정 Jenkins 컨테이너에 jenkins-tutorial 이라는 이름을 직접 부여했다면, 아래와 같이 접속할 수 있습니다.
```bash
docker exec -it jenkins-tutorial bash
```
2.2. Jenkins 콘솔 로그 확인
Jenkins 초기 설정 시 Unlocking Jenkins 단계에서, 혹은 플러그인 설치/업데이트 과정에서 발생하는 로그를 실시간으로 확인하고 싶다면 콘솔 로그가 매우 유용합니다. 일반적으로 Jenkins를 도커로 실행하면, docker run 명령을 실행한 터미널에서 로그가 출력되지만, 별도의 터미널 창에서 접근하고 싶다면 docker logs 명령을 사용할 수 있습니다.
```bash
docker logs <docker-container-name>
```
위 명령을 실행할 시 <docker-container-name>에 해당하는 Jenkins 컨테이너의 콘솔 로그가 출력됩니다. 컨테이너 이름이 확실하지 않을 경우에는 아래와 같이 docker ps 명령으로 확인이 가능합니다.
```bash
docker ps
```
또한 추가로 -f(--follow) 옵션을 사용하면 로그가 실시간으로 업데이트되는 모습을 스트리밍 형태로 볼 수 있습니다. 예를 들어, 아래와 같은 방식으로 로그를 계속해서 모니터링할 수 있습니다.
```bash
docker logs -f jenkins-blueocean
```
위와 같은 명령을 실행할 시, 현재 발생하는 Jenkins 서버의 콘솔 로그가 실시간으로 표출되어, 빌드나 기타 작업의 진행 상황을 추적하기 유용합니다.
3. Jenkins Home 디렉터리 접근
Jenkins Home 디렉터리는 Jenkins 서버의 설정, 플러그인, 작업(빌드) 관련 데이터가 모두 모여 있는 핵심 위치입니다. 기본적으로 Jenkins 컨테이너 내부에서는 /var/jenkins_home 경로를 사용합니다. 특히 빌드가 실행되는 workspace 폴더가 이 내부에 위치하므로, 빌드 산출물을 확인하거나 스크립트를 수정할 때 직접 접근해야 하는 경우가 많습니다.
도커를 통해 Jenkins를 실행할 때 볼륨을 마운트해서 호스트 디렉터리와 /var/jenkins_home 디렉터리를 연결할 수도 있습니다. 예를 들어 아래와 같은 형식으로 Jenkins 컨테이너를 실행한 경우를 생각해봅시다.
```bash
docker run -d --name jenkins-blueocean --volume jenkins-data:/var/jenkins_home jenkins/jenkins:latest
```
이 경우 jenkins-data 라는 Docker 볼륨이 /var/jenkins_home 에 매핑됩니다. 따라서 컨테이너 내부의 데이터를 영속적으로 보관할 수 있고, 컨테이너를 재시작하거나 다시 만들어도 이 볼륨을 재사용할 수 있습니다. 다음 예시는 docker container exec 명령을 통해 Jenkins Home 디렉터리 내용을 확인하는 방법입니다.
```bash
docker container exec -it jenkins-blueocean bash
```
이 명령을 실행하면 bash 셸로 진입하여 /var/jenkins_home/workspace 등의 디렉터리를 확인할 수 있습니다. 예를 들어 빌드 작업 기록이나 설정이 정상적으로 남아 있는지, 혹은 특정 폴더에 누적된 로그가 과도하게 쌓이지 않았는지 등을 점검할 때 매우 유용합니다.
4. Docker 이미지 태그와 구성 옵션
Jenkins를 Docker로 설치할 때는 jenkins/jenkins 라는 이미지를 사용하며, 보통 최신 버전을 사용하고자 할 때 jenkins/jenkins:latest 태그를 붙입니다. 여기서 콜론(:) 문법은 이미지 이름과 태그를 구분하기 위한 것으로, latest 대신 특정 버전(예: lts, 2.375.2 등)을 지정할 수도 있습니다.
예컨대 아래와 같이 명령을 사용하면 특정 태그 버전의 Jenkins 이미지를 통해 컨테이너를 생성할 수 있습니다.
```bash
docker run -d --name my-jenkins -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts
```
위와 같은 명령을 실행할 시 LTS(Long-Term Support) 버전의 Jenkins가 Docker 컨테이너로 구동됩니다. 이처럼 Jenkins 공식 이미지는 여러 구성 옵션과 태그를 제공하며, --env나 --volume, --restart 등의 Docker 옵션을 조합하여 Jenkins를 다양하게 커스터마이징할 수 있습니다. 특히 시니어 운영자라면, 스테이징 환경과 프로덕션 환경에서 다른 태그를 쓰되 공통 설정 옵션을 최대한 유사하게 유지하여, 버전 차이로 인한 호환성 문제를 최소화하는 방법을 자주 활용하곤 합니다.
추가로 docker run -t 옵션을 사용해 Jenkins 콘테이너가 표준 입출력을 유지하게끔 설정하는 방법도 있는데, 구 버전의 Jenkins 설치 문서에서는 이를 설명해놓은 경우가 있습니다. 하지만 현대적인 환경에서는 -d(데몬 모드)와 -p(포트 매핑) 옵션을 통해 백그라운드로 실행하는 방식이 더 일반적이니, 상황에 따라 적절히 조합하시면 됩니다.
출처: [Jenkins] https://www.jenkins.io/doc/book/installing/docker (CC BY-SA 4.0)
관련링크
댓글목록 0
등록된 댓글이 없습니다.
