8.4.도커 컴포즈에 헬스 체크와 디펜던시 체크 정의하기

  • 도커 컴포즈는 애플리케이션의 상태에 이상이 생겼을 때 어느 정도 복원할 수 있는 기능이 있다.
  • 도커 컴포즈도 이상이 생긴 컨테이너를 새 컨테이너로 대체하지는 않는다.
  • 하지만 종료된 컨테이너를 재시작하거나 이미지에 정의되지 않은 헬스 체크를 추가할 수는 있다.

도커 컴포즈 파일에 적용

  • 도커 컴포즈 파일에서는 헬스 체크의 옵션을 더 세세하게 설정할 수 있다.
  • interval: 헬스 체크 실시 간격을 의미
  • timeout: 실패로 간주하는 제한 시간
  • retries: 컨테이너 상태를 이상으로 간주할 때까지 필요한 연속 실패 횟수
  • start_period: 컨테이너 실행 후 첫 헬스 체크를 실시하는 시간 간격을 의미
001) services:
002)   numbers-api:
003)     image: diamol/ch08-numbers-api:v3
004)     ports:
005)       - "8087:80"
006)     healthcheck:
007)       interval: 5s
008)       timeout: 1s
009)       retries: 2
010)       start_period: 5s
011)     networks:
012)       - app-net
013) 
014)   numbers-web:
015)     image: diamol/ch08-numbers-web:v3
016)     restart: on-failure
017)     environment:
018)       - RngApi__Url=http://numbers-api/rng
019)     ports:
020)       - "8088:80"
021)     healthcheck:
022)       test: ["CMD", "dotnet", "Utilities.HttpCheck.dll", "-t", "150"]
023)       interval: 5s
024)       timeout: 1s
025)       retries: 2
026)       start_period: 10s
027)     networks:
028)       - app-net
  1. 006~010: 이미지에 정의된 헬스 체크에 대한 설정값을 지정
  2. 021~026: 이미지에 정의되지 않은 헬스 체크를 설정

도커 컴포즈 실행

  • 웹 애플리케이션 컨테이너은 API 애플리케이션을 헬스체크로 호출하여 성공 시 실행
  • `http://localhost:8088` 로 접속해 3번 랜덤 번호를 조회하면 API 애플리케이션에 이상 발생
001)  docker-compose up -d     
002) [+] Running 2/2
003)   Container numbers-numbers-web-1  Started                                                                                                     0.5s 
004)   Container numbers-numbers-api-1  Started                                                                                                     0.4s 
005)  
006)  docker container ls --all --format "table {{.ID}}\t{{.Names}}\t{{.Image}}\t{{.Status}}"
007) CONTAINER ID   NAMES                   IMAGE                        STATUS
008) 2e62ea77c223   numbers-numbers-api-1   diamol/ch08-numbers-api:v3   Up 46 seconds (unhealthy)
009) 192a9a91fc16   numbers-numbers-web-1   diamol/ch08-numbers-web:v3   Up 46 seconds (healthy)
  1. 008: API 애플리케이션에 오류가 이상이 발생하여 STATUS가 unhealthy 상태가 되었음

links

social