docker-composeでdockerコンテナをOS起動時に立ち上げる

docker-composeを使ってサーバ環境を構築した際に、ホストOSを再起動時に自動でクライアント(子機?)も起動してほしい。k8sだのを使うべきとの意見もあるが、とりあえずDocker-compoesのみで戦ってみる。 systemctlコマンドを利用して、自動起動の登録をしました。

環境

  • ホストOS: Ubuntu 16.04 LTS
  • ゲストOS: いろいろ。

実装

※以降の作業は基本的にroot環境(sudo -s 実行後)で作業しています。

dockerの自動起動

dockerのプラットホーム(ゲストOSを動かすためのホストOS上のソフト?)をホストOSの起動時に自動で起動するための設定です。

systemctl enable docker

docker-compose(ゲストOS)の自動起動

systemctlにサービスとして起動したいものを登録していきます。

新規に/etc/systemd/system/web.serviceというファイルを作成 (webの部分は登録したいサービス名に置き換え)

[Unit]
Description=web
Requires=docker.service

[Service]
Environment=COMPOSE_FILE=/Path_to_docker-compose/docker-compose.yml

ExecStart=/usr/local/bin/docker-compose -p takunoko_server -f ${COMPOSE_FILE} up
ExecStop=/opt/bin/docker-compose -f ${COMPOSE_FILE} down

Restart=always
Type=simple

[Install]
WantedBy=multi-user.target

これでsystemctlコマンドから起動や停止ができるようになりました

# 起動
systemctl start web
# 停止
systemctl stop web

さらに、サービスとしてOSが起動したタイミングで自動実行するためには以下のコマンドを実行します。

systemctl enable web

注意点

  • docker-compoes.yml内でrestart:alwaysを指定していると事故った時に少々面倒。systemctlで実行して起動がミスった際に残り続ける。
    • Restart=alwaysはsystemctl側で設定するため、docker-compose内では指定しないほうが吉(だと思う。。)。
    • 完璧に完成したらrestart:alwaysにして良いと思います。
  • /etc/systemd/system/(設定ファイル) を更新したら再読み込み
    • systectl daemon-reload

参考

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください