LoginSignup
2
4

More than 5 years have passed since last update.

ubuntu上でdocker-composeをsystemdで管理する

Posted at

目標

Dockerをsystemdで簡単に管理する

前提

すでにdocker-compose -f <yml> upは使えるようになっていること(dockerのインストールは、公式ドキュメント参照)

手順

1. docker-compose用の汎用化されたサービスを作成

/etc/systemd/system/docker-compose@.service<- このファイルの名前が重要なので基本変えないこと。変える場合は、@.の役割をしっかり理解してから。

/etc/systemd/system/docker-compose@.service
[Unit]
Description=%i service with docker compose
Requires=docker.service
After=docker.service

[Service]
Restart=always

WorkingDirectory=/etc/docker/compose/%i

# Remove old containers, images and volumes
ExecStartPre=/usr/bin/docker-compose down -v
ExecStartPre=/usr/bin/docker-compose rm -fv
ExecStartPre=-/bin/bash -c 'docker volume ls -qf "name=%i_" | xargs docker volume rm'
ExecStartPre=-/bin/bash -c 'docker network ls -qf "name=%i_" | xargs docker network rm'
ExecStartPre=-/bin/bash -c 'docker ps -aqf "name=%i_*" | xargs docker rm'

# Compose up
ExecStart=/usr/bin/docker-compose up

# Compose down, remove containers and volumes
ExecStop=/usr/bin/docker-compose down -v

[Install]
WantedBy=multi-user.target

これだけではなにも起きない。これは、Docker-compose用のサービステンプレートと言う感じ

2. 実際のdocker-composeを置くフォルダ作成 & docker-compose.ymlを置く。

ファイルを置くときは、必ずdocker-compose.ymlで置く!

上のServiceからわかるように、複数のdocker-compose.ymlを別のDirctoryに配置&Working Directoryを変更することで汎用化しているので、docker-compose.ymlの名前は変更できない。

sudo mkdir -p /etc/docker/compose/<自分のservice名>/
sudo cp <自分のdocker-compose.yml> /etc/docker/compose/<自分のservice名>/docker-compose.yml

3. serviceスタート

sudo systemctl start docker-compose@<自分のservice名>

最後に

エラーが出たら、sudo journalctl -xeなどでみるが、わかりずらいので、実際にコマンドを確かめてみるのが早い。

  1. まずは、docker-compose -f <自分のyml> upでちゃんと動くことを確認
  2. docker-composeの場所はあっているか(which docker-composeで出てくるものとサービス内のPathが等しいか)
  3. docker-compose.ymlのおいた位置は正しいか などn
2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4