こちらの記事でSupervisordで自動起動する方法を書いてましたが、CentOS7のServiceだとこう書くのかなっというのがあったので再考してみます。
参考はこちら
構成と構想
- DB用コンテナ+NginxProxyコンテナ+サービス用コンテナ(複数)の構成
- 指定した順番通りに起動したい
- サービス用コンテナは日々増減するので、その都度修正が必要ないようにしておきたい
- サービス用コンテナは
Deployed-
で始まるname
を持っている - それら以外のコンテナはビルド用だったりするので、自動起動に含めたくない
設定する
$ sudo sh -c 'cat << EOF > /usr/lib/systemd/system/docker_autostart.service
[Unit]
Description=auto start of docker containers
After=docker.service
Requires=docker.service
[Service]
ExecStart=/bin/bash -c "/usr/bin/docker start mysql nginx-proxy \$(docker ps -aq --filter='"'"'name=deployed-'"'"')"
[Install]
WantedBy=multi-user.target
EOF'
$ sudo systemctl enable docker_autostart.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker_autostart.service to /usr/lib/systemd/system/docker_autostart.service.
これで、serviceにdocker_autostart
というサービス(unitっていうのかも?)が登録されるみたいです。
こうしておくと、再起動後にも(Dockerの起動完了を待って)コンテナが順番通りに起動します。
確認
$ sudo systemctl start docker_autostart
$ sudo systemctl status docker_autostart.service
● docker_autostart.service - auto start of docker containers
Loaded: loaded (/usr/lib/systemd/system/docker_autostart.service; enabled; vendor preset: disabled)
Active: deactivating (stop) since Tue 2016-01-12 15:42:47 JST; 9s ago
Process: 4606 ExecStart=/bin/bash -c /usr/bin/docker start mysql nginx-proxy $(docker ps -aq --filter='name=deployed-') (code=exited, status=0/SUCCESS)
Main PID: 4606 (code=exited, status=0/SUCCESS); : 4764 (docker)
Memory: 1.6M
CGroup: /system.slice/docker_autostart.service
└─control
└─4764 /usr/bin/docker stop mysql nginx-proxy 79999cd8360a
Jan 12 15:42:46 localhost.localdomain systemd[1]: Started auto start of docker containers.
Jan 12 15:42:46 localhost.localdomain systemd[1]: Starting auto start of docker containers...
Jan 12 15:42:47 localhost.localdomain bash[4606]: mysql
Jan 12 15:42:47 localhost.localdomain bash[4606]: nginx-proxy
Jan 12 15:42:47 localhost.localdomain bash[4606]: 79999cd8360a
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
79999cd8360a my/stg_php "/home/projects/servi" 4 days ago Up 3 minutes 22/tcp, 80/tcp deployed-www
67eda42c8aab docker.io/mysql:5.6 "/entrypoint.sh mysql" 4 days ago Up 3 minutes 0.0.0.0:33061->3306/tcp mysql
fe44df169237 jwilder/nginx-proxy "/app/docker-entrypoi" 2 weeks ago Up 3 minutes 0.0.0.0:80->80/tcp, 443/tcp nginx-proxy
おわり
ファイル1つ作ってコマンド1つ送るだけで出来たのでお手軽でした。
めでたしめでたし。