본문 바로가기
CICD

docker-compose

by 장중앙 2023. 4. 8.

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

댓글