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.serviceAfter=docker.serviceディレクティブにより:

  • container開始前にDockerデーモンが実行されていることを保証
  • Dockerデーモンが停止した場合、containerサービスも停止

起動前クリーンアップ

ExecStartPre=行が古いcontainerのクリーンアップを処理します。-プレフィックスはsystemdが失敗を無視することを意味します。containerが存在しない場合、stoprmコマンドは失敗しますが、サービスは正常に起動します。

journaldログ統合

--log-driver=journaldフラグはcontainerログをsystemd journalにルーティングします:

journalctl -u myapp.service -f

ユースケース

Docker ComposeやKubernetesが利用できないVMやベアメタルサーバーで、起動時の自動起動、他のサービスとの依存関係順序付け、自動再起動が必要なDocker containerをマネージドシステムサービスとして実行する場合に使用します。

試してみる — Systemd Unit File Generator

フルツールを開く