Systemd と Docker で簡単にサービスを定義するととても捗る件

Docker便利ですよね。使ってますか?

Dockerで常時起動のサービスを作りたいと思った時、選択肢はたくさんあります。
K8s, Docker Swarm…このあたり使えば、いい感じにサービスを管理できます。

でも今は、クラスタなんていらない、もっとカジュアルにホームサーバでサービス起動したい!
docker で起動時に restart=always を付けてもいいけど、いまいち管理がしにくい…!
そんな時は systemd でサクッとサービス定義しちゃいましょう。

ここでは、/home/services/ 以下に(サービス名)のディレクトリを作成して、docker-compose.yml を作成することを想定しています。
ごみ処理とか、環境変数読み込む処理とか入れてもいいのですが、今回は最低限で行きます。

[Unit]
Description=Launch service with compose: %i
Requires=docker.service
After=docker.service

[Service]
Type=simple
ExecStart=/usr/bin/docker-compose up
Restart = always
WorkingDirectory=/home/services/%i

[Install]
WantedBy=multi-user.target

これを、/etc/systemd/system/compose-service@.service というファイル名で作成し…
/home/services/(サービス名)/docker-compose.yml に、サービスを記述…
すると、

sudo systemctl start compose-service@(サービス名)

で起動できちゃいます。すごく便利。
もちろん、systemd なので、

sudo systemctl enable compose-service@(サービス名)

で自動起動にできます。いい感じ。
また、もちろん、systemd なので…

sudo journalctl -u compose-service@(サービス名)

でログも見れます。いい感じ。

あと、ほかのサービスと同様に、systemd のUnitファイルで依存関係をかけば、ちゃんと起動順序も制御できます! とっても、いい感じ!

コメント

タイトルとURLをコピーしました