Docker Compose - health check
service A 와 B 가 있을 때 A가 실행된 후 B가 실행되어야 하는 구성이 docker compose 설정 파일에 정의되어 있다면 B에서 A서비스의 healthcheck
를 확인한 후 정상 응답을 확인한 경우에만 실행되도록 설정을 추가 할 수 있다.
healthcheck 🔎
health check를 제공하는 서비스
health check를 제공할 서비스의 healthcheck
옵션 작성
1
2
3
4
5
6
7
8
services:
my-app:
healthcheck:
test: [ "CMD-SHELL", "curl -f http://localhost:8080/actuator/health || exit 1" ]
start_period: 10s
interval: 30s
timeout: 10s
retries: 5
test
: health check로 실행 될 명령어 입력CMD
와CMD-SHELL
차이CMD
는 파일을 실행하는 경우에 사용- 쉘 기능이 필요 없는 경우
CMD-SHELL
은 쉘에서 파일을 열거나 쉘에 명령어를 입력할 경우 사용- 쉘 기능을 사용하는 경우
start_period
: 컨테이너 실행 후 처음 healthcheck를 시작하기 전까지 대기 시간interval
: healthcheck에 실패할 경우 재실행하는 시간 간격timeout
: healthcheck 명령의 응답을 기다리는 시간retries
: healthcheck 실패시 재시도 횟수
health check를 확인할 서비스
B 서비스는 A 서비스의 healthcheck를 확인한 후 정상 동작시에만 실행된다고 가정!
1
2
3
4
5
6
7
8
9
services:
A:
healthcheck:
# ..
B:
depends_on:
A:
condition: service_healthy
restart: true
condition
: 종속 조건 설정- 조건 종류
service_started
: 상대 서비스가 시작 된 경우에만 실행service_healthy
: 상대 서비스의 health check 후healthy
판정시 실행service_completed_successfully
: 상대 서비스가 성공적으로 실행 완료(종료)된 경우에만 실행
- 조건 종류
restart
: 상대 서비스가 재시작 될 때 이 서비스도 재시작 할지에 대한 설정- 만약 restart: true 라면 A서비스가 재실행 될 때 B 서비스도 재실행된다.
health check 예시
mariaDB healthcheck
https://mariadb.com/kb/en/using-healthcheck-sh/
1
2
3
4
5
6
7
8
9
10
11
12
13
services:
mariadb:
healthcheck:
test: ["CMD-SHELL", "healthcheck.sh --connect --innodb_initialized"]
start_period: 10s
interval: 30s
timeout: 10s
retries: 5
my-web:
depends_on:
mariadb:
condition: service_healthy
restart: false
참고한 사이트
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.