Docker-compose
각각의 docker 이미지를 사용해 여러 개의 컨테이너를 관리할 수 있는 기능
- 내부 정의한 컨테이너 간 연결 밑 가상 네트워크 관리가 쉬움
1회 실행하는 것으로 내부 정의한 모든 컨테이너 서비스를 실행 가능
- 이미지로 컨테이너를 시작하는 것이 아니라면 dockerfile을 가지고 있어야함
.yml 형식(docker-compose.yml)으로 작성해야하며 들여쓰기와 key : value로 문법이 이뤄짐
docker-compose.yml의 예제
# docker-compose.yml
version : "3"
# 항목 밑에 각각의 컨테이너를 정의
services:
database:
# 로컬 또한 docker hub에서 베이스 이미지를 지정
image: mysql
security_opt:
- seccomp:unconfined
# 컨테이너 이름 지정
container_name: mydb
# 컨테이너의 환경 변수를 지정
environment:
- MYSQL_DATABASE=portfolio
- MYSQL_ROOT_HOST=%
- MYSQL_ROOT_PASSWORD=1234
# DockerFile의 ENTRYPOINT와 동일하게 컨테이너가 시작되었을 때 실행할 스크립트
# DockerFile보다 우선 순위가 높음
command: ['--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci']
#
ports:
- 3306:3306
# DockerFile에서 사용되는 Volume과 동일
# 마지막에 :ro를 추가하는 것으로 읽기전용 설정가능
volumes:
- db_data:/var/lib/mysql
networks:
- web-network
application:
# image가 아닌 정의한 DockerFile을 이용해 build 후 베이스 이미지로 지정
build: .
restart: always
ports:
- 8080:8080
volumes:
- db_data:/var/lib/spring
# 서비스 간 종속성 설정으로 실행할 서비스 순서를 지정가능
# 아래 경우에는 현재 'web' 컨테이너 이전에 database service를 먼저 시작
depends_on:
- database
container_name: web
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://mydb:3306/portfolio?useSSL=false&serverTimezone=UTC&useLegacyDatetimeCode=false&&allowPublicKeyRetrieval=true
SPRING_DATABASE_USERNAME: root
SPRING_DATABASE_PASSWORD: 1234
networks:
- web-network
# network 정의 networks : 'network 이름'으로 정의 가능
# 이미 network를 생성했다면 아래 구문 삭제 가능
# service정의 시, 같은 network에 포함된 서비스들은 통신 가능
networks:
web-network:
# Volume 정의
volumes:
db_data:
위와 같이 작성하여 한번에 여러개의 컨테이너 정의 및 실행 가능
Docker-Compose 명령어
docker-compose pull | .yml 내의 이미지를 모두 다운 |
docker-compose build | .yml내 정의한 dockerfile을 빌드 |
docker-compose up | .yml을 기반으로 컨테이너 실행 |
docker-compose ps | 실행중인 서비스 목록 출력 |
docker-compose logs [service명] | 실행 중인 서비스의 로그를 출력 -f 옵션으로 실시간 출력 가능 |
docker-compose stop [service명] | 실행중인 컨테이너를 멈춤 |
docker-compose exec [service명] {command} | 해당 컨테이너에 명령어를 실행 {command}에 bash 를 입력하면 해당 컨테이너 내부로 연결 |
docker-compose down [service] | 서비스 정지 및 컨테이너 삭제 -v 옵션으로 볼륨까지 삭제 가능 |
'CICD' 카테고리의 다른 글
jenkins container - Spring 프로젝트 SonarQube 연동 (0) | 2024.03.10 |
---|---|
jenkins container - Vue 프로젝트 EC2 배포 (0) | 2024.03.03 |
Docker와 DockerFile (2) | 2023.04.08 |
[Kubernetes] Autoscaler(HPA) (0) | 2022.02.17 |
[Kubernetes] Ingress(Controller) (0) | 2022.02.08 |
댓글