Dockerヘルスチェックは、自己修復型のコンテナインフラを構築する上で不可欠です。アプリケーションの障害を自動検出し、コンテナの再起動をトリガーすることで、サービスの可用性を維持します。このガイドでは、基本的なHEALTHCHECKの実装から本番環境向けの高度なパターンまでをカバーします。
HEALTHCHECK命令
DockerfileのHEALTHCHECK命令は、コンテナが正しく機能しているかをテストする方法をDockerに指示します:
HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \
CMD curl -f http://localhost:3000/health || exit 1
Dockerは3つの状態を追跡します:starting(起動中)、healthy(正常)、unhealthy(異常)。--start-periodは起動の遅いアプリケーションにとって重要で、初期化中の失敗を抑制します。
| オプション | デフォルト | 説明 |
|---|---|---|
--interval | 30s | チェック間隔 |
--timeout | 30s | タイムアウト |
--start-period | 0s | 起動時の猶予期間 |
--retries | 3 | 失敗許容回数 |
Curl vs TCP vs カスタムチェック
チェック方法の選択はアプリケーションの種類に依存します:
# HTTPチェック(最も一般的)
HEALTHCHECK CMD curl -f http://localhost:8080/api/health || exit 1
# TCPソケットチェック(軽量)
HEALTHCHECK CMD nc -z localhost 5432 || exit 1
# カスタムスクリプト(複雑なロジック)
HEALTHCHECK CMD /usr/local/bin/healthcheck.sh
HTTPチェックはステータスコードとレスポンスボディを検証します。TCPチェックはプロトコル非依存で軽量です。カスタムスクリプトはデータベース接続やキャッシュ応答性など、アプリケーション固有のロジックを実装できます。
3プローブモデル
Docker ComposeとSwarmはKubernetes由来の3プローブモデルをサポートしています:
services:
app:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/ready"]
interval: 10s
timeout: 5s
retries: 3
start_period: 60s
スタートアッププローブは起動の遅いアプリを扱い、レディネスプローブはトラフィックルーティングの可否を制御し、ライブネスプローブは障害時に再起動をトリガーします。
Docker Compose設定
docker-compose.ymlでのヘルスチェック設定と依存関係の順序付け:
services:
db:
image: postgres:16
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 3s
retries: 5
app:
image: myapp:latest
depends_on:
db:
condition: service_healthy
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
depends_onとcondition: service_healthyを組み合わせることで、データベースの準備が整うまでアプリコンテナが起動しないように制御できます。
監視とアラート統合
| ツール | 目的 | 統合方法 |
|---|---|---|
| Prometheus | メトリクス収集 | cAdvisor経由 |
| Grafana | 可視化 | ヘルスダッシュボード |
| Docker Events API | リアルタイムアラート | コンテナ状態ストリーム |
| cAdvisor | リソース監視 | 公開メトリクスエンドポイント |
docker events --filter event=health_statusでヘルス状態の変更をストリーム監視できます。本番環境では、ヘルスステータスをアラートシステムにルーティングして、コンテナ異常時にチームへ通知する仕組みを構築しましょう。
まとめ
適切なヘルスチェック設定は、信頼性の高いDockerデプロイの基盤です。HEALTHCHECKに依存関係認識型のオーケストレーションと監視統合を組み合わせることで、障害を自動検出・回復し、ダウンタイムを最小化するシステムを構築できます。
