포스트

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로 실행 될 명령어 입력
    • CMDCMD-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 라이센스를 따릅니다.