Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

目標

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
gymnstcs
東大広域システム→吉林大学修士&3idea Web開発データ解析→bytedanceレコメンドエンジニア→beBitエンジニア。趣味: データ解析, 言語:Python, Ruby, C++, Java, 技術: k8s, terraform, Kafka, Athena, (Hadoop, Spark, Storm, Flink, Hive)
bebit
ユーザ視点からの価値創出を追求するエクスペリエンス・デザイン・パートナー
https://www.bebit.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away