도커 컨테이너는 = 단일 애플리케이션
도커는 애플리케이션 배포에 특화된 컨테이너이다.
가상 서버와는 대상 단위의 크기 자체가 다르다. 즉 애플리케이션 간의 연동 없이는 실용적 수준의 시스템을 구축할 수 없다.
다시 말해, 도커 컨테이너로 시스템을 구축하면 하나 이상의 컨테이너가 서로 통신하며, 그 사이에 의존관계가 생긴다.
그러면 컨테이너의 동작을 제어하기 윈한 설정 파일이나 환경 변수를 어떻게 전달할지, 컨테이너 가느이 의존관계를 고려할 때 포트 포워딩을 어떻게 설정해야하는 지 등의 요소를 적절히 관리해야한다.
이때 필요 한 것이 ★ 도커 컴포즈(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-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 아래에 데이터가 저장된다.
그러므로 컴포즈로 실행한 젠킨스 컨테이너를 종료했다가 재시작해도 초기 설정이 유지된다.
'Java > Deploy' 카테고리의 다른 글
[Docker] Jenkins version upgrade (0) | 2020.07.20 |
---|---|
[Docker] 젠킨스 SSH 키 생성 및 master-slave 컨테이너 설정 (0) | 2020.07.17 |
[Docker] 도커 운영 및 관리를 위한 명령어 (0) | 2020.07.14 |
[Docker] 도커 컨테이너 사용을 위한 명령어 (0) | 2020.07.14 |
[Docker] 도커 이미지 사용을 위한 명령어 (0) | 2020.07.13 |
[Docker] 도커 포트포워딩 (0) | 2020.07.12 |