
docker-compose
여러 컨테이너를 한번에 실행하기 위해 사용해야하는 오케스트레이션 툴
docker-compose.yml 키워드 정리
services
실행할 컨테이너들을 정의하는 블록
services:
app: .. (로드되는 컨테이너 이름)
db: ..
redis: ..
volumes
컨테이너가 지워져도 데이터 유지를 위해 사용
데이터의 영속성 유지
volumes:
db-data: # named volume 선언
# 개발에선 보통 bind mount로 선언
services:
mysql:
container_name: mysql-demo
image: mysql:8.0
...
volumes:
- ./db-data:/var/lib/mysql # bind mount
networks
컨테이너 간 통신
networks:
spring-demo-net:
# 개발에선 보통 bind mount로 선언
services:
mysql:
container_name: mysql-demo
image: mysql:8.0
...
volumes:
- ./db-data:/var/lib/mysql # bind mount
networks:
spring-demo-net: # 따로 선언되는 컨테이너에 붙여줘서 묶음
image, build
이미지를 가져오거나 직접 빌드 할 때 상황으로 둘 중 하나 사용
ports
호스트 포트 : 컨테이너 포트
environment
환경 변수를 설정
depends_on
실행 순서를 제어
추가로 condition 키워드로 조건 명시 가능
services_started → 도커에서 컨테이너가 시작만 되면 통과
services_healthy → 도커에서 컨테이너 상태가 healty 일 경우면 통과
service_completed_successfully → 컨테이너가 정상 종료되어야 통과
healthcheck
services:
app:
image: nginx # Docker Hub에서 이미지를 가져올 때
build: . # Dockerfile로 직접 빌드할 때 (둘 중 하나만 씀)
ports:
- "8080:8080" # "호스트포트:컨테이너포트"
environment: # 환경변수 설정
- DB_HOST=db
- DB_PORT=3306
depends_on: # 실행 순서 제어
db:
condition: service_healthy
healthcheck: # 컨테이너 상태 체크
test: ["CMD", "curl", "-f", "<http://localhost:8080>"]
interval: 10s
timeout: 5s
retries: 3
networks: # 연결할 네트워크
- my-network
volumes: # 마운트할 볼륨
- ./logs:/app/logs
db:
image: mysql:8.4.8
environment:
- MYSQL_ROOT_PASSWORD=test1234tested
- MYSQL_DATABASE=kyjtheyj_world_db
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 10s
timeout: 5s
retries: 7
volumes:
- ./db-data:/var/lib/mysql
networks:
kyjtheyj_world_network:
Share article