Skip to content

Docker Health Checks đŸĨ ​

āĻĄāĻ•āĻžāϰ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āϚāϞāϛ⧇ (Running) āĻŽāĻžāύ⧇āχ āĻāχ āύ⧟ āϝ⧇ āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ āϏāĻ āĻŋāĻ•āĻ­āĻžāĻŦ⧇ āĻ•āĻžāϜ āĻ•āϰāϛ⧇āĨ¤ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ āĻšā§āϝāĻžāĻ‚ āĻšā§Ÿā§‡ āĻĨāĻžāĻ•āϤ⧇ āĻĒāĻžāϰ⧇ āĻŦāĻž āχāĻ¨ā§āϟāĻžāϰāύāĻžāϞ āĻāϰāϰ⧇āϰ āĻ•āĻžāϰāϪ⧇ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āύāĻžāĻ“ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤ āĻāχ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻļāύāĻžāĻ•ā§āϤ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝāχ Health Checks āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻšā§ŸāĨ¤


ā§§. Health Check āĻ•āĻŋ? ​

Health Check āĻšāϞ⧋ āĻāĻ•āϟāĻŋ āĻŽā§‡āĻ•āĻžāύāĻŋāϜāĻŽ āϝāĻžāϰ āĻŽāĻžāĻ§ā§āϝāĻŽā§‡ āĻĄāĻ•āĻžāϰ āχāĻžā§āϜāĻŋāύ āύāĻŋ⧟āĻŽāĻŋāϤ āĻŦāĻŋāϰāϤāĻŋāϤ⧇ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ⧇āϰ āϭ⧇āϤāϰ⧇ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϰāĻžāύ āĻ•āϰ⧇ āĻĒāϰ⧀āĻ•ā§āώāĻž āĻ•āϰ⧇ āĻĻ⧇āϖ⧇ āϝ⧇ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ āϏ⧁āĻ¸ā§āĻĨ (Healthy) āφāϛ⧇ āĻ•āĻŋāύāĻžāĨ¤

āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ⧇āϰ āϤāĻŋāύāϟāĻŋ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻšāϤ⧇ āĻĒāĻžāϰ⧇:

  • Starting: āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āĻļ⧁āϰ⧁ āĻšāĻšā§āϛ⧇ āĻ•āĻŋāĻ¨ā§āϤ⧁ āĻāĻ–āύ⧋ āĻšā§‡āϞāĻĨ āĻšā§‡āĻ• āĻļ⧇āώ āĻšā§ŸāύāĻŋāĨ¤
  • Healthy: āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ āĻ āĻŋāĻ•āĻŽāϤ⧋ āĻ•āĻžāϜ āĻ•āϰāϛ⧇āĨ¤
  • Unhealthy: āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύāϟāĻŋ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āĻ•āϰāϛ⧇ āύāĻž āĻŦāĻž āĻāϰāϰ āĻĻāĻŋāĻšā§āϛ⧇āĨ¤

⧍. Dockerfile-āĻ HEALTHCHECK āχāĻ¨ā§āϏāĻŸā§āϰāĻžāĻ•āĻļāύ ​

āφāĻĒāύāĻŋ Dockerfile-āĻ HEALTHCHECK āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āĻšā§‡āϞāĻĨ āĻšā§‡āĻ• āĻĄāĻŋāĻĢāĻžāχāύ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύāĨ¤

dockerfile
# āĻĒā§āϰāϤāĻŋ ā§Šā§Ļ āϏ⧇āϕ⧇āĻ¨ā§āĻĄ āĻĒāϰ āĻĒāϰ āĻšā§‡āĻ• āĻ•āϰāĻŦ⧇
# ā§Š āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡āϰ āĻŽāĻ§ā§āϝ⧇ āϰ⧇āϏāĻĒāĻ¨ā§āϏ āύāĻž āĻĒ⧇āϞ⧇ āĻĢ⧇āχāϞ āϧāϰāĻŦ⧇
# āϟāĻžāύāĻž ā§Š āĻŦāĻžāϰ āĻĢ⧇āχāϞ āĻ•āϰāϞ⧇ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰāϕ⧇ Unhealthy āĻ˜ā§‹āώāĻŖāĻž āĻ•āϰāĻŦ⧇
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
  CMD curl -f http://localhost/ || exit 1
  • --interval: āĻ•āϤ āϏāĻŽā§Ÿ āĻĒāϰāĻĒāϰ āĻšā§‡āĻ• āĻ•āϰāĻŦ⧇ (Default: 30s)āĨ¤
  • --timeout: āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āĻļ⧇āώ āĻšāϤ⧇ āϏāĻ°ā§āĻŦā§‹āĻšā§āϚ āĻ•āϤ āϏāĻŽā§Ÿ āύ⧇āĻŦ⧇ (Default: 30s)āĨ¤
  • --retries: āĻ•āϤāĻŦāĻžāϰ āĻĢ⧇āχāϞ āĻ•āϰāϞ⧇ Unhealthy āϧāϰāĻž āĻšāĻŦ⧇ (Default: 3).
  • --start-period: āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āĻļ⧁āϰ⧁ āĻšāĻ“ā§ŸāĻžāϰ āĻĒāϰ āĻ•āϤāĻ•ā§āώāĻŖ āĻšā§‡āϞāĻĨ āĻšā§‡āĻ• āĻŦāĻ¨ā§āϧ āĻĨāĻžāĻ•āĻŦ⧇ (āϝāĻžāϤ⧇ āĻ…ā§āϝāĻžāĻĒ āĻŦ⧁āϟ āĻšāĻ“ā§ŸāĻžāϰ āϏāĻŽā§Ÿ āĻĒāĻžā§Ÿ)āĨ¤

ā§Š. Docker Compose-āĻ Health Check ​

āĻĄāĻ•āĻžāϰ āĻ•āĻŽā§āĻĒā§‹āϜ āĻĢāĻžāχāϞ⧇ āφāĻĒāύāĻŋ āφāϰāĻ“ āϏāĻšāĻœā§‡ āĻšā§‡āϞāĻĨ āĻšā§‡āĻ• āĻ•āύāĻĢāĻŋāĻ—āĻžāϰ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āύ:

yaml
services:
  web:
    image: my-web-app
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    restart: always

ā§Ē. āϕ⧇āύ Health Check āĻĒā§āĻ°ā§Ÿā§‹āϜāύ? ​

  • Self-Healing: āϝāĻĻāĻŋ āϕ⧋āύ⧋ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ Unhealthy āĻšā§Ÿā§‡ āϝāĻžā§Ÿ, āϤāĻŦ⧇ āĻĄāĻ•āĻžāϰ (āĻŦāĻž āĻ…āĻ°ā§āϕ⧇āĻ¸ā§āĻŸā§āϰ⧇āϟāϰ āϝ⧇āĻŽāύ Swarm/K8s) āϏ⧇āϟāĻŋāϕ⧇ āĻ…āĻŸā§‹āĻŽā§‡āϟāĻŋāĻ• āϰāĻŋāĻ¸ā§āϟāĻžāĻ°ā§āϟ āĻ•āϰāϤ⧇ āĻĒāĻžāϰ⧇āĨ¤
  • Load Balancer Integration: āϞ⧋āĻĄ āĻŦā§āϝāĻžāϞ⧇āĻ¨ā§āϏāĻžāϰ āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ Healthy āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰāϗ⧁āϞ⧋āϤ⧇ āĻŸā§āϰāĻžāĻĢāĻŋāĻ• āĻĒāĻžāĻ āĻžāĻŦ⧇āĨ¤ āϝāĻĻāĻŋ āϕ⧋āύ⧋ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āĻĄāĻžāωāύ āĻĨāĻžāϕ⧇, āϤāĻŦ⧇ āχāωāϜāĻžāϰ āϏ⧇āϟāĻŋ āĻŸā§‡āϰ āĻĒāĻžāĻŦ⧇ āύāĻžāĨ¤
  • Zero-Downtime Deployment: āφāĻĒāĻĄā§‡āϟ āĻĻ⧇āĻ“ā§ŸāĻžāϰ āϏāĻŽā§Ÿ āύāϤ⧁āύ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āĻĒ⧁āϰ⧋āĻĒ⧁āϰāĻŋ Healthy āύāĻž āĻšāĻ“ā§ŸāĻž āĻĒāĻ°ā§āϝāĻ¨ā§āϤ āĻĒ⧁āϰāύ⧋ āĻ•āĻ¨ā§āĻŸā§‡āχāύāĻžāϰ āĻŦāĻ¨ā§āϧ āĻ•āϰāĻž āĻšā§Ÿ āύāĻžāĨ¤

ā§Ģ. āĻŦ⧇āĻ¸ā§āϟ āĻĒā§āĻ°ā§āϝāĻžāĻ•āϟāĻŋāϏ (Best Practices) ​

  • āϏāĻ āĻŋāĻ• āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āύāĻŋāĻ°ā§āĻŦāĻžāϚāύ: āĻļ⧁āϧ⧁āĻŽāĻžāĻ¤ā§āϰ curl āύ⧟, āĻĒā§āĻ°ā§Ÿā§‹āϜāύ āĻšāϞ⧇ āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻ•āĻžāύ⧇āĻ•āĻļāύ āĻŦāĻž āĻ¸ā§āĻĒ⧇āϏāĻŋāĻĢāĻŋāĻ• āĻšā§‡āϞāĻĨ āĻāĻ¨ā§āĻĄāĻĒā§Ÿā§‡āĻ¨ā§āϟ (/health) āĻšā§‡āĻ• āĻ•āϰ⧁āύāĨ¤
  • āϰāĻŋāϏ⧋āĻ°ā§āϏ āϏāĻšā§‡āϤāύāϤāĻž: āĻšā§‡āϞāĻĨ āĻšā§‡āĻ• āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āϝ⧇āύ āϖ⧁āĻŦ āĻŦ⧇āĻļāĻŋ āĻšā§‡āĻ­āĻŋ (Heavy) āύāĻž āĻšā§Ÿ, āĻ•āĻžāϰāĻŖ āĻāϟāĻŋ āϘāύāϘāύ āϰāĻžāύ āĻšā§ŸāĨ¤
  • exit āϕ⧋āĻĄ: āĻ•āĻŽāĻžāĻ¨ā§āĻĄāϟāĻŋ āϏāĻĢāϞ āĻšāϞ⧇ exit 0 āĻāĻŦāĻ‚ āĻŦā§āϝāĻ°ā§āĻĨ āĻšāϞ⧇ exit 1 āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāϤ⧇ āĻšāĻŦ⧇āĨ¤

āϏāĻžāϰāϏāĻ‚āĻ•ā§āώ⧇āĻĒ (Summary) ​

āĻĒā§āϰ⧋āĻĄāĻžāĻ•āĻļāύ āĻāύāĻ­āĻžāϝāĻŧāϰāύāĻŽā§‡āĻ¨ā§āĻŸā§‡ āĻšāĻžāχ-āĻ…ā§āϝāĻžāϭ⧇āχāϞ⧇āĻŦāĻŋāϞāĻŋāϟāĻŋ (High Availability) āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰāϤ⧇ Health Check āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰāĻž āĻ…āĻĒāϰāĻŋāĻšāĻžāĻ°ā§āϝāĨ¤ āĻāϟāĻŋ āφāĻĒāύāĻžāϰ āϏāĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡āϰ āĻ¸ā§āĻŸā§āϝāĻžāĻŦāĻŋāϞāĻŋāϟāĻŋ āĻŦāĻžā§œāĻžāϤ⧇ āĻāĻŦāĻ‚ āĻŽā§āϝāĻžāύ⧁⧟āĻžāϞ āχāĻ¨ā§āϟāĻžāϰāϭ⧇āύāĻļāύ āĻ•āĻŽāĻžāϤ⧇ āϏāĻžāĻšāĻžāĻ¯ā§āϝ āĻ•āϰ⧇āĨ¤


TIP

āφāĻĒāύāĻžāϰ āĻ…ā§āϝāĻžāĻĒā§āϞāĻŋāϕ⧇āĻļāύ⧇ āĻāĻ•āϟāĻŋ āĻĄā§‡āĻĄāĻŋāϕ⧇āĻŸā§‡āĻĄ /health āĻŦāĻž /status āĻāĻ¨ā§āĻĄāĻĒā§Ÿā§‡āĻ¨ā§āϟ āϤ⧈āϰāĻŋ āĻ•āϰ⧁āύ āϝāĻž āĻĄāĻžāϟāĻžāĻŦ⧇āϏ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āϝāĻžāĻ¨ā§āϝ āϏāĻžāĻ°ā§āĻ­āĻŋāϏ⧇āϰ āĻ…āĻŦāĻ¸ā§āĻĨāĻž āĻšā§‡āĻ• āĻ•āϰ⧇ āϰāĻŋāϟāĻžāĻ°ā§āύ āĻ•āϰāĻŦ⧇āĨ¤

Released under the MIT License.