- 도커 컴포즈는 애플리케이션의 상태에 이상이 생겼을 때 어느 정도 복원할 수 있는 기능이 있다.
- 도커 컴포즈도 이상이 생긴 컨테이너를 새 컨테이너로 대체하지는 않는다.
- 하지만 종료된 컨테이너를 재시작하거나 이미지에 정의되지 않은 헬스 체크를 추가할 수는 있다.
도커 컴포즈 파일에 적용
- 도커 컴포즈 파일에서는 헬스 체크의 옵션을 더 세세하게 설정할 수 있다.
- 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
- 006~010: 이미지에 정의된 헬스 체크에 대한 설정값을 지정
- 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)
- 008: API 애플리케이션에 오류가 이상이 발생하여 STATUS가 unhealthy 상태가 되었음