Docker Containerサービス
Docker containerをsystemdサービスとして管理します。Dockerサービス依存関係、containerライフサイクル管理、起動前クリーンアップ、信頼性の高い再起動動作について学びます。
Application Services
詳細な説明
systemdでDocker Containerを管理する
Dockerには独自の再起動ポリシーがありますが、systemdを通じてcontainerを管理することで、ホストのサービス管理、起動順序、依存関係処理との統合が可能になります。
[Unit]
Description=My Application Docker Container
After=docker.service
Requires=docker.service
[Service]
Type=simple
ExecStartPre=-/usr/bin/docker stop myapp
ExecStartPre=-/usr/bin/docker rm myapp
ExecStart=/usr/bin/docker run --name myapp --rm -p 8080:8080 myapp:latest
ExecStop=/usr/bin/docker stop -t 10 myapp
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
Dockerサービス依存関係
Requires=docker.serviceとAfter=docker.serviceディレクティブにより:
- container開始前にDockerデーモンが実行されていることを保証
- Dockerデーモンが停止した場合、containerサービスも停止
起動前クリーンアップ
ExecStartPre=行が古いcontainerのクリーンアップを処理します。-プレフィックスはsystemdが失敗を無視することを意味します。containerが存在しない場合、stopとrmコマンドは失敗しますが、サービスは正常に起動します。
journaldログ統合
--log-driver=journaldフラグはcontainerログをsystemd journalにルーティングします:
journalctl -u myapp.service -f
ユースケース
Docker ComposeやKubernetesが利用できないVMやベアメタルサーバーで、起動時の自動起動、他のサービスとの依存関係順序付け、自動再起動が必要なDocker containerをマネージドシステムサービスとして実行する場合に使用します。