본문 바로가기

Java/Deploy

[Docker] 도커 컴포즈로 여러 컨테이너 실행 및 젠킨스 연동

반응형

 

도커 컨테이너는 = 단일 애플리케이션 

도커는 애플리케이션 배포에 특화된 컨테이너이다.

가상 서버와는 대상 단위의 크기 자체가 다르다. 즉 애플리케이션 간의 연동 없이는 실용적 수준의 시스템을 구축할 수 없다.

다시 말해, 도커 컨테이너로 시스템을 구축하면 하나 이상의 컨테이너가 서로 통신하며, 그 사이에 의존관계가 생긴다.

 

그러면 컨테이너의 동작을 제어하기 윈한 설정 파일이나 환경 변수를 어떻게 전달할지, 컨테이너 가느이 의존관계를 고려할 때 포트 포워딩을 어떻게 설정해야하는 지 등의 요소를 적절히 관리해야한다.

 

이때 필요 한 것이 ★ 도커 컴포즈(Docker Compose) 이다.

compose는 yaml 포맷으로 기술된 설정파일로, 여러 컨테이너의 실행을 한번에 관리할 수 있게 해준다.

 

docker-compose 가 설치되어 있는지 확인해보자 !

 

% docker-compose version

docker-compose version 1.25.5, build 8a1c60f6
docker-py version: 4.1.0
CPython version: 3.7.5
OpenSSL version: OpenSSL 1.1.1f  31 Mar 2020

 

compose의 버전이 정상적으로 조회가 되었다면, 임의의 디렉터리에 docker-compose.yml 이라는 파일명으로 다음과 같이 작성한다.

docker-compose.yml 을 작성하면 기존 docker 명령을 사용해 컨테이너를 실행할 때 매번 부여하던 옵션을 설정 파일로 관리할 수 있다.

 

version: "3"
services:
  echo:
    image: example/echo:latest
    ports:
      - 9000:8080

 

설정 파일 정의에 따라 여러 도커 컨테이너에 한꺼번에 실행하려면 docker-compose.yml 이 위치한 디렉터리에서 docker-compose up 명령어를 실행한다.

 

[option]

  • --build : 도커 이미지를 강제로 다시 빌드 ⇢ 개발 과정에서 이미지가 자주 수정되는 경우 사용

[SUCCESS]

% docker-compose up -d   

Starting docker_echo_1 ... done

% docker-compose up -d --build

docker_echo_1 is up-to-date

 

[FAIL]

% docker-compose up -d

ERROR: 
Can't find a suitable configuration file in this directory or any
parent. Are you in the right directory?

Supported filenames: docker-compose.yml, docker-compose.yaml
% docker-compose up -d

Creating network "docker_default" with the default driver
Creating docker_echo_1 ... 
Creating docker_echo_1 ... error

ERROR: for docker_echo_1  Cannot start service echo: driver failed programming external connectivity on endpoint docker_echo_1 (2fd7f63f01dbb29f62a55be79d6600e4800a42bbc77210bbc771280eea677d0d): Bind for 0.0.0.0:9000 failed: port is already allocated

ERROR: for echo  Cannot start service echo: driver failed programming external connectivity on endpoint docker_echo_1 (2fd7f63f01dbb29f62a55be79d6600e4800a42bbc77210bbc771280eea677d0d): Bind for 0.0.0.0:9000 failed: port is already allocated
ERROR: Encountered errors while bringing up the project.

 


젠킨스 컨테이너 실행하기


docker-compose.yml 

version: "3"
services:
  master:
    container_name: master
    image: jenkinsci/jenkins:2.154-slim
    ports:
      - 8080:8080
    volumes:
      - ./jenkins_home:/var/jenkins_home

 

[참고] Docker jenkins image version : hub.docker.com/r/jenkinsci/jenkins/

 

Docker Hub

 

hub.docker.com

 

젠킨스 이미지는 도커 허브에 올라와 있는 것을 이용해 위의 docker-compose 설정 파일로 젠킨스 컨테이너를 실행해보자 !

 

% docker-compose up   

WARNING: Found orphan containers (docker_echo_1) for this project. If you removed or renamed this service in your compose file, you can run this command with the --remove-orphans flag to clean it up.
master is up-to-date
Attaching to master
master    | Running from: /usr/share/jenkins/jenkins.war
...
master    | *************************************************************
master    | 
master    | Jenkins initial setup is required. An admin user has been created and a password generated.
master    | Please use the following password to proceed to installation:
master    | 
master    | XXXXXXXXXXXX
master    | 
master    | This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
master    | 
master    | *************************************************************
...

 

포어그라운드로 컨테이너를 실행하면, jenkins 메시지가 표준 출력으로 출력된 다음, 초기 설정에서 패스워드가 생성되는데
이때, 패스워드를 잘 복사해 놓는다. (위 내용의 XXXXXXXXXXXX 로 작성된 부분)

 

이제 설정 파일(docker-compose.yml)에 작성했듯이, 브라우저에서 http://localhost:8080 에 접근해

앞서 복사해둔 패스워드를 입력한다.

 

 

초기 패스워드를 입력한 다음 페이지의 설명에 따라 설정을 진행한다.

필자는 Install suggested plugins'를 선택했다.ㅎㅎ

 

 

그 다음은 User 계정을 설정하거나, 최하단의 Admin계정으로 진행할 수 있다.

 

 

필자는 'Contiune as Admin'을 클릭해 Admin 계정으로 우선 진행해 젠킨스 홈 화면으로 접속했다.

★ Admin 계정으로 접속했다면, 계정 설정페이지에서 패스워드를 반드시 변경한다. 그래야 다음에 Admin 계정으로 접속할 수 있다.

 

 

젠킨스 공식 이미지에서는 /var/jenkins_home 아래에 데이터가 저장된다.

그러므로 컴포즈로 실행한 젠킨스 컨테이너를 종료했다가 재시작해도 초기 설정이 유지된다.

 


[참고] chati.tistory.com/126

 

[Docker] 도커 컨테이너 사용을 위한 명령어

도커 컨테이너는 도커 이미지를 바탕으로 만든다. 따라서 도커 이미지를 다루는 방법에 익숙해져야 하므로 해당 게시글 최하단에 관련 링크를 걸어뒀으니 참고하면 된다 😋 도커 컨테이너는 ��

chati.tistory.com

 

반응형

❥ CHATI Github