[Docker] Healthcheck 설정을 통한 컨테이너 상태 점검
healthcheck 설정은 컨테이너가 healthy 상태인지 여부를 확인하기 위해 사용합니다. 컨테이너의 상태를 확인하는 방법을 정의하여 주기적으로 작동 중인지 검사합니다.
기본 설정
nginx 컨테이너 이미지를 사용하여 웹 서비스를 구동시키고 healthcheck 옵션을 추가하여 상태를 확인해봅시다.
httpd 컨테이너 이미지를 사용하고자 하였으나 컨테이너에 curl 등 확인 명령어가 없어 nginx 컨테이너 이미지를 사용하였습니다.
# cat docker-compose.yml
services:
nginx:
image: nginx:latest
container_name: "my-web-server"
ports:
- "80:80"
healthcheck:
test: curl -f http://localhost:80 || exit 1
healthcheck 옵션을 사용하지 않으면 disable: true
옵션이 적용되어 별도로 healthcheck 옵션은 동작하지 않습니다.
nginx 서비스를 구동시킨 후 docker ps
명령어로 컨테이너 상태를 확인해보면 healthcheck 옵션을 추가하지 않은 것과 달리 STATUS 에 (health: {STATUS})
항목이 추가된 것을 확인하실 수 있습니다.
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b91ed9482b75 nginx:latest "/docker-entrypoint.…" 30 seconds ago Up 26 seconds (health: starting) 0.0.0.0:80->80/tcp, :::80->80/tcp my-web-server
healthcheck 를 통해 정상을 확인한 후 health 상태가 starting 에서 healthy로 변경된 것을 확인하실 수 있습니다.
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b91ed9482b75 nginx:latest "/docker-entrypoint.…" 6 minutes ago Up 6 minutes (healthy) 0.0.0.0:80->80/tcp, :::80->80/tcp my-web-server
healthcheck 옵션을 통해 상태 검사를 시작하면 starting
상태이며 이후 상태 검사를 통과할 때마다 healthy
상태가 됩니다. 일정 횟수를 실패한 후에는 unhealthy
상태로 변경되며 총 3가지의 상태가 존재합니다.
옵션 설정
healthcheck 옵션을 통해 검사를 진행하는 주기와 시간 등을 설정할 수 있습니다. 기본 설정은 아래와 같이 적용되며 각각의 설정 값을 설정하여 상황에 따른 설정을 적용할 수 있습니다.
서비스의 특성에 따라 검사 주기(interval
)을 짧게 설정할 수도 있고, 반대로 네트워크가 안정적이지 않은 환경에서는 재시도(retries
) 횟수나 타임아웃(timeout
) 시간을 늘려서 설정할 수도 있습니다.
[ healthcheck 옵션 ]
--interval=DURATION (default: 30s)
--timeout=DURATION (default: 30s)
--start-period=DURATION (default: 0s)
--retries=N (default: 3)
// start_period 옵션은 3.4 버전에 추가되었습니다.
healthcheck 옵션을 아래와 같이 추가하였으며 10초마다 검사하도록 설정하고 10초간 응답이 없으면 타임아웃, 그리고 2회 재시도해도 응답이 없으면 unhealthy
상태가 되도록 설정하였습니다.
# cat docker-compose.yml
services:
nginx:
image: nginx:latest
container_name: "my-web-server"
ports:
- "80:80"
healthcheck:
test: curl -f http://localhost:80 || exit 1
interval: 10s
timeout: 10s
retries: 2
10초마다 검사하도록 설정하였으므로 docker-compose up -d
명령어로 컨테이너 시작 후 starting
상태에서 healthy
까지 기본 설정(30초)가 아닌 10초가 경과한 이후에 상태가 변경되는 것을 확인하실 수 있습니다.
Health 상태 상세 확인
docker inspect
명령어는 도커 컨테이너의 정보 및 상태를 확인할 수 있는 명령어로 healthcheck 옵션을 통한 검사 결과를 확인하실 수 있습니다.
# docker inspect my-web-server
====================== 생략 ======================
"Health": {
"Status": "healthy",
"FailingStreak": 0,
"Log": [
{
"Start": "2022-10-19T22:42:46.673233+09:00",
"End": "2022-10-19T22:42:46.807225+09:00",
"ExitCode": 0,
"Output": " % Total % Received % Xferd Average Speed Time Time Time Current\n
====== 생략 ======
}
상태 정보는 healthy
이고 실패 횟수(FailingStreak
)가 0 값인 것을 확인하실 수 있습니다. 또한 검사 명령어를 요청한 시간과 응답 시간, 응답 값 등을 확인하실 수 있습니다.
healthcheck 설정을 통해 컨테이너의 상태를 검사하여 사용해보시기 바랍니다.
유익하게 보셨다면 공감을 눌러주고, 댓글로 의견을 공유해 남겨주시면 감사하겠습니다!
'Docker' 카테고리의 다른 글
[Docker] Logging 설정 (0) | 2022.11.07 |
---|---|
[Docker] Syslog 서버 구축 (0) | 2022.11.01 |
[Docker] Volumes 설정 (0) | 2022.10.11 |
[Docker] Restart 설정 (0) | 2022.09.20 |
[Docker] Container name 설정 (0) | 2022.09.19 |