Develop

Docker로 Jenkins 설치하고 초기 설정까지 완료하는 방법

운영체제 환경의 꼬임 없이 깔끔하게 Docker 컨테이너 위에 Jenkins를 실행하는 방법과 데이터 휘발을 막기 위한 볼륨 마운트 전략, 초기 어드민 인증을 푸는 DevOps 가이드를 제공합니다.

DockerJenkins설치설정devtools
Docker로 Jenkins를 구동하는 터미널 명령어 스크린샷과 실행 성공 후 unlock 웹 마법사 화면
  • ·Docker 컨테이너 격리: 기저 OS의 JDK 환경 오염 없이 독립 실행 가능
  • ·볼륨 바인딩(-v): 컨테이너 파괴 시에도 빌드 Job 및 사용자 설정 영구 보존
  • ·Initial Admin Password: 컨테이너 내부 /var/jenkins_home/secrets/initialAdminPassword 파일에 저장됨
  • ·LTS 이미지: 안정적인 장기 지원 버전인 jenkins/jenkins:lts 이미지 사용 권장
원격 리눅스 서버에 젠킨스(Jenkins)를 올린답시고 자바 JDK 버전을 맞추고, 환경변수 등록하고, 포트 설정 파일 수정하느라 하루를 꼬박 날려 보낸 뼈아픈 옛 기억이 있습니다. 그 후 컨테이너 가상화에 눈을 뜨고 나서 Docker를 이용해 젠킨스를 올리니, 단 한 줄의 `docker run` 명령으로 JDK 셋업부터 웹 포트 연결까지 단 1분 만에 깔끔하게 인스턴스가 솟구쳐 오르는 걸 보고 큰 문화충격을 느꼈죠. 다만 컨테이너 내부의 `/var/jenkins_home` 디렉토리를 로컬 호스트 볼륨에 마운트해 두는 보안 조치를 누락했다가, 컨테이너를 재시작하자마자 기존에 수립해 둔 모든 배포 파이프라인과 플러그인 설정이 한순간에 증발해 버려 망연자실했던 삽질은 제 DevOps 인생의 가장 큰 교훈 중 하나입니다.

1. 가상화를 활용한 CI/CD 환경 구축

로컬 서버 환경을 더럽히지 않고 Docker로 Jenkins 설치 시 이점

전통적인 온프레미스 방식으로 서버 본체에 직접 Jenkins를 깔기 시작하면 OS 환경이 매우 지저분해집니다. Jenkins가 돌아가는 데 필요한 전용 자바 가상머신(JDK)의 특정 버전을 OS 전역에 깔아야 하고, 이는 혹시라도 서버 내부에서 돌아가던 다른 프로그램의 자바 런타임 환경과 꼬여서 알 수 없는 충돌 에러를 일으키기 십상이죠. Docker 기반의 Jenkins 설치 방식은 이러한 모든 종속성 도구 세트를 격리된 경량 가상 컨테이너 속에 가두어 관리하게 해줍니다. 서버의 기저 OS 환경은 오롯이 냅둔 채로, 단 한 줄의 이미지 실행으로 깨끗하게 통제된 빌드 센터를 확보할 수 있어 유지 보수 비용이 혁신적으로 절감됩니다.

데이터를 영구 보존하는 Docker 볼륨 기반 Jenkins 구동 커맨드

컨테이너 격리 방식은 매우 강력하지만 한 가지 맹점이 존재합니다. 컨테이너 내부 디스크에 적재되는 모든 정보는 컨테이너 프로세스가 종료되거나 소멸되면 형체 없이 증발한다는 점이죠. 열심히 공들여 조립해 둔 빌드 파이프라인 명세와 자격증명이 날아가는 대참사를 막기 위해, Docker 호스트 서버의 디렉토리와 컨테이너 내의 /var/jenkins_home 경로를 연결해 주는 볼륨 마운트(-v) 옵션이 절대 필수적입니다. 포트 포워딩(-p 8080:8080)을 엮고 외부 에이전트 통신 포트(50000)까지 열어준 다음 백그라운드(-d) 모드로 이미지를 올리면 안전하고 영구 보존되는 인프라 기지가 견고하게 완성됩니다.

2. 젠킨스 최초 기동 및 인증 절차

컨테이너 터미널 로그를 열어 Jenkins 초기 비밀번호 획득하기

도커로 이미지를 올린 뒤 웹 브라우저를 띄워 http://내서버:8080 주소로 접속하면, 보안 장벽 화면과 함께 'Unlock Jenkins'라는 마법사의 비밀번호 입력창이 우리를 맞이합니다. 도커 컨테이너 속에 격리된 초기 암호값을 긁어오려면 호스트 터미널에서 docker logs [컨테이너ID] 명령어를 쳐서 표준 콘솔 출력을 까보는 것이 가장 간단합니다. 로그 메시지 중간 영역에 32자리의 영숫자 초기 비밀 암호가 인쇄되어 있는데, 이를 고스란히 복사해 웹 락커 창에 붙여 넣어 줌으로써 비로소 젠킨스 인프라의 마스터 봉인을 무사히 해제할 수 있습니다.

필수 플러그인을 활성화하여 Jenkins 초기 환경 구성하기

마스터 암호를 풀고 첫발을 디디면 플러그인 셋업 분기점이 노출됩니다. 'Install suggested plugins'와 사용자가 직접 골라 넣는 커스텀 모드 두 갈래가 보이죠. 초심자라면 젠킨스 개발진이 공식으로 검증하여 엄선한 권장 플러그인 설치(suggested) 항목을 고르는 것을 강력히 추천합니다. 이 단계에서 깃 리포지토리 연동에 필요한 Git 플러그인, 빌드 단계 구성을 담당하는 Pipeline 모듈, 그리고 미려한 화면 모니터링 레이아웃 팩 등이 자동으로 정렬 다운로드되어, 복잡한 인프라 조립의 스트레스 없이 즉시 정상적인 배포 작업을 설계할 수 있는 풀 패키지 작업대가 준비됩니다.

3. 마스터 계정 등록 및 설정 마감

보안 계정을 확보하는 Jenkins 관리자 계정 생성 절차

플러그인 인스톨 과정이 다 끝나면 최우선으로 해야 할 마지막 단계는 기본 어드민(admin) 계정을 대체할 나만의 마스터 관리자 ID와 패스워드를 정의하는 것입니다. 이 설정을 건너뛰고 초기 임시 암호로 계속 시스템을 기동해 두는 것은 해커들의 손쉬운 포트 침입 표적이 되어 회사 내부 소스코드가 몽땅 털리는 보안 재앙으로 치닫는 무방비 행동입니다. 계정 생성을 마감하고 젠킨스 웹 접속 루트 URL 주소까지 세팅해 준 뒤 마법사 설정을 마치면, 비로소 상용 프로젝트 배포에 투입할 수 있는 튼튼하고 민첩한 나만의 Docker 기반 Jenkins 빌드 서버 환경이 최종 완성되어 가동됩니다.

# 젠킨스 데이터를 저장할 호스트 폴더를 생성하고 권한 부여 (사용자 uid 1000 매핑)
mkdir -p /home/ubuntu/jenkins_data
sudo chown -R 1000:1000 /home/ubuntu/jenkins_data

# 호스트의 8080포트와 볼륨을 연결하여 젠킨스 컨테이너 백그라운드 실행
docker run -d \
  --name my-jenkins-server \
  -p 8080:8080 \
  -p 50000:50000 \
  -v /home/ubuntu/jenkins_data:/var/jenkins_home \
  --restart unless-stopped \
  jenkins/jenkins:lts-jdk17

자주 묻는 질문

도커로 젠킨스를 켜고 웹에 들어갔는데 사이트 연결이 계속 거부되거나 로딩이 멈춰 있어요.+

도커 데몬이 돌고 있는 호스트 서버 자체의 방화벽(AWS EC2 보안그룹, ufw 등)에서 8080 포트 인바운드 개방 설정이 되어 있는지 가장 먼저 체크하세요. 그 후 docker ps 명령어로 컨테이너 프로세스가 비정상 크래시로 계속 꺼지고(Exit) 있는 것은 아닌지 상태를 대조해 보셔야 합니다.

도커 컨테이너를 지우고 새로 켰는데 기존에 만든 Job 설정들이 모두 사라졌습니다.+

도커 run 실행 시 호스트 볼륨 마운트 옵션(-v /로컬패스:/var/jenkins_home)을 누락한 상태로 기동해서 그렇습니다. 볼륨 매핑을 빠뜨린 채 컨테이너를 올리면 소멸 시 내부 데이터가 모두 날아가므로, 반드시 호스트와 연계된 로컬 데이터 볼륨 마운트 플래그를 심어주셔야 합니다.

관련 글