Docker/환경 구성

[Docker] Docker Compose를 이용한 Jenkins 환경 구성 및 실행방법

adjh54 2025. 1. 17. 18:14
728x170
해당 글에서는 Docker Compose를 이용하여서 Jenkins 실행환경을 구축하는 방법에 대해 알아봅니다




💡 [참고] 이전에 작성한 Docker 관련 글들을 읽으시면 도움이 됩니다.
분류 설명 링크
이해하기 Docker 환경 설치 및 실행 방법 https://adjh54.tistory.com/350
이해하기 Docker 기초 이론(아키텍처, 흐름, 주요 용어) https://adjh54.tistory.com/352
이해하기 Docker 컨테이너 라이프 사이클 & CLI https://adjh54.tistory.com/359
이해하기 DockerFile 이론 + Nginx 환경 구성 및 배포 방법 https://adjh54.tistory.com/414
이해하기 Docker Compose 이해하고 구성 https://adjh54.tistory.com/503
이해하기 Apache Kafka 이해하기 -1 : 주요 모델 및 구성요소 https://adjh54.tistory.com/636
     
환경구성 DockerFile + Vault 환경 구성 및 배포 방법 https://adjh54.tistory.com/415
환경구성 DockerFile + React 환경 구성 및 배포 방법 https://adjh54.tistory.com/417
환경구성 DockerFile + Spring Boot 환경 구성 및 배포 방법 https://adjh54.tistory.com/420
환경구성 DockerFile + Redis 환경 구성 및 배포 방법 https://adjh54.tistory.com/449
환경구성 DockerFile + RabbitMQ 환경 구성 및 실행 방법 https://adjh54.tistory.com/496
환경구성 Docker Compose + RabbitMQ 노드 클러스터링 방법 https://adjh54.tistory.com/517
환경구성 Docker Compose + Apache Kafka, Kafka-UI 환경 구성 방법 https://adjh54.tistory.com/637
환경구성 Docker Compose + Jenkins 환경 구성 및 실행방법 https://adjh54.tistory.com/643
     
환경파일 Dokcer Compose + Jenkins Dockerfile Repository https://github.com/adjh54ir/multiflex-docker/tree/main/simple-docker-compose-jenkins

 
 

1) Jenkins


💡 Jenkins

- 소프트웨어 개발 과정에서 지속적 통합(Continuous Integration, CI)과 지속적 배포(Continuous Delivery, CD)를 지원하는 오픈소스 자동화 서버입니다.
- Jenkins는 Java 프로그래밍 언어로 개발이 되었으며, Java Virtual Machine(JVM) 위에서 실행됩니다. 이를 기반으로 플랫폼 독립성을 활용하여 Windows, Linux, macOS 등 다양한 운영체제에서 동일하게 실행될 수 있다는 장점이 있습니다.
구분 설명
지속적 통합(CI) 개발자들이 코드 변경사항을 주기적으로 머지하고, 자동으로 빌드 및 테스트를 실행하여 소프트웨어의 품질을 유지합니다.
지속적 배포(CD) 빌드된 애플리케이션을 자동으로 다양한 환경(개발, 테스트, 프로덕션)에 배포하여 신속한 피드백과 안정적인 릴리스를 가능하게 합니다.

 

 

Jenkins

Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software

www.jenkins.io

 
 
 

2) Dockerfile


💡 도커 파일(Dockerfile)

- 도커 이미지를 만들고 빌드하기 위한 ‘텍스트 파일’을 의미합니다. 이는 컨테이너 이미지를 구성하는데 필요한 모든 단계와 명령을 정의합니다.

 

1. Dockerfile 수행과정


💡 Dockerfile 수행과정

1. Dockerfile

- 도커파일에서 일련의 명령을 작성하여 이미지를 빌드하는 방법을 지정합니다. 또한 이미지를 지정하고 필요한 패키지를 설치하고 파일을 복사하여 명령을 실행하는 등의 작업을 수행합니다.

2. Dockerfile → (Build) → Docker Image

- 도커 엔진이 도커 파일을 한 줄씩 읽어서 이미지를 빌드합니다 : Dockerfile Layer

3. Docker Image → (Run) → Docker Container

- 빌드된 이미지를 실행하여 도커 컨테이너를 구성합니다.

 

3) Docker Compose


💡Docker Compose

- 여러 컨테이너가 함께 실행되는 환경에서, 하나의 파일 내에 정의하여 여러 컨테이너를 관리하기 위한 도구를 의미합니다. 즉, 여러 컨테이너를 관리할 때, 단일 명령어를 통해 생성-관리-배포하는 기능을 수행하는 역할을 합니다.

- 기존의 Dockerfile을 통해 단일 컨테이너를 ‘생성-관리-배포’하는 과정에서의 처리과정은 간단하였으나 여러 컨테이너를 일괄 띄우는데 시간 소요가 많이 되기에 이를 사용합니다.
- 이러한 컨테이너 관리는 YAML 파일 형식을 사용하여 서비스, 네트워크 및 볼륨 같은 애플리케이션 서비스를 구성할 수 있습니다. 또한 개발, 테스트, 스테이징, 운영 및 CI 워크플로우 환경에서 애플리케이션을 이동하여 배포가 가능하기에 관리가 매우 편리합니다.
 

Docker Compose

Learn how to use Docker Compose to define and run multi-container applications with this detailed introduction to the tool.

docs.docker.com

 

1. Docker Compose 처리 과정


💡 Docker Compose 처리 과정

1. Dockerfile에 필요한 모든 서비스를 정의합니다.(Define all your required services in a Dockerfile)

- Dockerfile 내에 각 다운로드 할 이미지와 실행할 컨테이너에 대해 정의합니다.

2. Compose 파일(YAML/YML) 내에 각 서비스 간의 관계를 정의합니다.(Define the releationship between each service in a Compose file)

- 이 파일에는 실행할 서비스(컨테이너)들과 그 설정들을 포함하고 있습니다. 사용할 파일 내용은 Docker 이미지, 포트 매핑, 볼륨 마운트, 네트워크 설정, 환경 변수 등이 정의됩니다.


3. Docker Compose를 사용하여 애플리케이션을 시작합니다.(Use Docker Compose to start the application)

- Docker Compose의 실행 명령어 ‘docker-compose up’ 명령어를 수행하여 일괄 서비스를 실행합니다.
- 이 명령어를 통해서 Docker Compose 파일에 정의된 모든 서비스를 시작합니다.
- 필요한 Docker 이미지가 로컬에 없으면 자동으로 다운로드하고, 컨테이너를 생성하고 시작합니다.


4. Docker Compose의 서비스 상태를 확인합니다.

- Docker Compose의 상태 확인 명령어 ‘docker-compose ps’ 명령어를 수행하여 서비스의 상태를 확인합니다.
- 현재 실행 중인 서비스의 상태를 확인할 수 있습니다.

+ 필요에 따라 Docker Compose의 서비스를 중지합니다.
- Docker Compose의 중지 명령어 ‘docker-compose stop’ 명령어를 수행하거나 ‘docker-compose down’ 명령어를 수행하여 모든 서비스를 중지하고 컨테이너, 네트워크, 볼륨을 삭제합니다.

 
 

4) Docker 환경 구성


1. Dockerfile 구성


💡 Dockerfile 구성

- 해당 환경 파일의 주요 목적은 jenkins/jenkins 이미지를 생성할때 필요한 모든 패키지와 의존성을 이미지 내부에 설치하여 최종적으로 Docker 이미지를 구성하는데 목적이 있습니다.
# Jenkin 이미지를 생성할때 기반이 되는 베이스 이미지 지정
FROM jenkins/jenkins:lts

# 루트 계정으로 전환
USER root

# Jenkin 이미지 내 모든 패키지와 의존성 설치 
RUN apt-get update && \\
    apt-get install -y \\
    ca-certificates \\
    curl \\
    gnupg \\
    lsb-release && \\
    mkdir -m 0755 -p /etc/apt/keyrings && \\
    curl -fsSL <https://download.docker.com/linux/debian/gpg> | gpg --dearmor -o /etc/apt/keyrings/docker.gpg && \\
    echo \\
    "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] <https://download.docker.com/linux/debian> \\
    $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null && \\
    apt-get update && \\
    apt-get install -y docker-ce docker-ce-cli containerd.io

# 일반 사용자 계정으로 전환
USER jenkins

 

명령어 설명
FROM jenkins/jenkins:lts Jenkins의 LTS(Long Term Support) 버전을 기본 이미지로 사용
USER root 다음 명령어들을 root 권한으로 실행하기 위해 사용자를 root로 전환
RUN apt-get update 패키지 목록을 최신 상태로 업데이트
apt-get install -y 패키지 설치 시 자동으로 'Yes' 응답
ca-certificates SSL/TLS 인증서 관련 패키지
curl URL을 통해 데이터를 전송하는 도구
gnupg GNU 개인 정보 보호 도구(암호화/서명)
lsb-release 리눅스 배포판 정보 확인 도구
mkdir -m 0755 -p /etc/apt/keyrings 키링 디렉토리 생성 (권한 755)
curl -fsSL ... gpg --dearmor
echo "deb [arch=...]" Docker 리포지토리 정보 추가
docker-ce docker-ce-cli containerd.io Docker 엔진, CLI, 컨테이너 런타임 설치
USER jenkins 보안을 위해 일반 jenkins 사용자로 전환

 
 

[ 더 알아보기 ]

💡 apt-get

- Debian 계열 Linux 배포판(Ubuntu 포함)에서 사용되는 패키지 관리 도구입니다.
- 소프트웨어 패키지의 설치, 업데이트, 제거를 관리시스템에 설치된 패키지의 의존성을 자동으로 해결패키지 저장소(repository)에서 최신 패키지 목록을 가져오고 업데이트합니다.

 
 

2. Docker Compose 파일 구성


 💡 Docker Compose 파일 구성

- 해당 Docker Compose 파일 내에서는 Dockerfile을 참조하여서 컨테이너를 이미지를 구성하고, 컨테이너를 실행하기 위한 목적으로 구성이 되었습니다.
services:
  jenkins:
    build:
      context: .
      dockerfile: Dockerfile
    container_name: jenkins
    ports:
      - "9000:8080"
      - "50000:50000"
    volumes:
      - jenkins_home:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

volumes:
  jenkins_home:
구성요소 설명
services Docker Compose에서 실행할 서비스(컨테이너) 정의 섹션
service.build - context: 현재 디렉토리(.)를 빌드 컨텍스트로 사용
- dockerfile: 사용할 Dockerfile 지정
service.container_name 생성될 컨테이너의 이름을 'jenkins'로 지정
service.ports - 9000:8080: Jenkins 웹 인터페이스용 포트 매핑
- 50000:50000: Jenkins 에이전트 통신용 포트
service.volumes - jenkins_home:/var/jenkins_home: Jenkins 데이터 영구 저장
- /var/run/docker.sock:/var/run/docker.sock: Docker 데몬 접근용 소켓
service.restart unless-stopped: 명시적으로 중지되지 않는 한 항상 재시작
volumes(최상위) jenkins_home: 볼륨 정의

 

 💡[참고] 프로젝트의 디렉터리 구조는 아래와 같이 구성되어 있습니다.

 

💡 [참고] 해당 소스코드는 아래의 Repository내에서 확인이 가능합니다.
 

multiflex-docker/simple-docker-compose-jenkins at main · adjh54ir/multiflex-docker

Docker의 Dockerfile, Docker-Compose 구성 Repository입니다. - adjh54ir/multiflex-docker

github.com

 
 

3. Docker Compose 실행 : Docker 이미지 생성 및 컨테이너 실행


💡 Docker Compose 실행 : Docker 이미지 생성 및 컨테이너 실행

- 프로젝트 루트 경로에서 docker-compose.yml 파일을 실행시켜서, Dockerfile 내에 이미지를 다운로드하고 구성하며, 이를 기반으로 컨테이너를 실행시킵니다.
# docker 컨테이너 이미지 생성 및 컨테이너 실행
$ docker compose up

 
 

💡 Dockerfile 기반의 Docker Image가 생성됨을 확인하였습니다.

 

💡 [참고] Docker Container가 생성됨을 확인하였습니다.

 
 

5) Jenkins 관리자 페이지 접속 및 구성


 

1. Jenkin 관리자 페이지 접속


💡 Jenkin 관리자 페이지 접속

- 지정한 Jenkin 로컬과 포트를 입력하여 관리자 페이지에 접속합니다.
- 위에 설정 구성에서와 같이 -p 9000:8080로 지정을 하였다면 http://localhost:9000 로 접속하시면 됩니다.

 

1.1. 관리자 페이지 접속


💡 관리자 페이지 접속
- http://localhost:9000 포트로 접속을 하였을 경우 아래와 같은 페이지가 출력이 됩니다.

- 관리자가 Jenkins를 안전하게 설정했는지 확인하기 위해 비밀번호가 로그에 기록되었습니다.
- 그리고 서버의 이 파일에 기록되었습니다/var/jenkins_home/secrets/initialAdminPassword 해당 경로에 접근하여서 비밀번호를 획득합니다.

 
 

2.2. 초기 관리자 비밀번호 확인


💡 초기 관리자 비밀번호 확인

- Jenkins 컨테이너의 초기 관리자 비밀번호를 확인하는 명령어입니다.
# 초기 비밀번호를 조회합니다.
$ docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

명령어 설명
docker exec 실행 중인 컨테이너 내에서 명령어를 실행하는 Docker 명령어입니다
jenkins 명령어를 실행할 대상 컨테이너의 이름입니다
cat /var/jenkins_home/secrets/initialAdminPassword Jenkins의 초기 관리자 비밀번호가 저장된 파일의 내용을 출력하는 명령어입니다
 

Docker

Jenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their software

www.jenkins.io

 

2. 관리자 페이지 초기 구성


 

2.1. 플러그인 선택


💡 플러그인 선택
- 최초 Jenkin 관리를 위해 두 가지 플러그인 설치 옵션을 제공합니다.

1. Install suggested plugins
- Jenkins에서 추천하는 일반적으로 많이 사용되는 플러그인들을 자동으로 설치
- 기본적인 빌드, 배포, 형상관리 등에 필요한 플러그인들이 포함초보자에게 권장되는 옵션

2. Select plugins to install
- 필요한 플러그인을 직접 선택하여 설치
- 커스터마이징이 필요한 경우 선택시스템 리소스를 효율적으로 사용하고 싶을 때 권장

 
 

2.2. 관리자 계정 등록


 
 

2.3. 인스턴스 구성


💡 인스턴스 구성

- Jenkins URL은 다양한 Jenkins 리소스에 대한 절대 링크의 루트 URL을 제공하는 데 사용됩니다. 즉, 이 값은 이메일 알림, PR 상태 업데이트, BUILD_URL빌드 단계에 제공된 환경 변수를 포함한 많은 Jenkins 기능의 적절한 작동에 필요합니다.

- 표시된 제안된 기본값은 아직 저장되지 않았으며 가능한 경우 현재 요청에서 생성됩니다. 가장 좋은 방법은 이 값을 사용자가 사용할 것으로 예상되는 URL로 설정하는 것입니다. 이렇게 하면 링크를 공유하거나 볼 때 혼란을 피할 수 있습니다.

 
 

2.3. 초기 구성 완료


 
 
 

3. 최종 구성 확인


💡 최종 구성 확인

- Docker 기반의 Jenkins 구성이 완료됨을 확인하였습니다.

 

오늘도 감사합니다. 😀
 
 

그리드형