ubuntu上でdocker-composeをsystemdで管理する
2692 ワード
目標
Dockerをsystemdで簡単に管理する
前提
すでにdocker-compose -f <yml> up
は使えるようになっていること(dockerのインストールは、公式ドキュメント参照)
手順
1. docker-compose用の汎用化されたサービスを作成
/etc/systemd/system/[email protected]
<- このファイルの名前が重要なので基本変えないこと。変える場合は、@
や.
の役割をしっかり理解してから。
/etc/systemd/system/[email protected]
[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
などでみるが、わかりずらいので、実際にコマンドを確かめてみるのが早い。
- まずは、
docker-compose -f <自分のyml> up
でちゃんと動くことを確認 - docker-composeの場所はあっているか(
which docker-compose
で出てくるものとサービス内のPathが等しいか) - docker-compose.ymlのおいた位置は正しいか などn
Author And Source
この問題について(ubuntu上でdocker-composeをsystemdで管理する), 我々は、より多くの情報をここで見つけました https://qiita.com/nakamasato/items/df9082f846558f30c406著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .