LoginSignup
5
5

More than 5 years have passed since last update.

Docker でホスト再起動時のコンテナ起動を考える

Posted at

自前サーバーで Docker コンテナを使ってサーバーにするのは便利なのですが、ホストを再起動するとコンテナが停止したままなのが不便なのです。

再起動後に自動とはいかないまでも、手動で一括サーバー起動をさせたいと思いました。

問題点

1) 再起動時に Docker コンテナが停止している、自動で起動しない
2) fig を使ってコンテナ間異存や環境変数の指定を構築している場合、起動順序等必要な情報が fig の中にあって単純な再起動だと問題となる

Docker デーモンに -r スイッチを付けると、以前のコンテナを再起動してくれるという話も聞くのですが、なんかうまくいかなかったのと 2) が問題として解決しないといけないまま残るので不採用。

これまでどうしていたの

これまでは再起動後各プロジェクトごとに fig start をして回っていました。

fig の指定ファイル名がデフォルト fig.yml でどれも同じ名前なこともあって、各プロジェクトごとにディレクトリが散らばっていてそこを巡回しつつ起動していくのが面倒だなと思っていた次第。

対策

方針

  • 散らばっている fig ファイルを一ヶ所にまとめておきたい
    • figがあること前提です
  • /etc/docker-fig というディレクトリを作って、そこに各 fig.yml ファイルをシンボリックリンクはって集めておく
  • /etc/docker-fig に置いてあるシンボリックリンクに対し一つずつ fig start をかけていくスクリプトを用意
  • 再起動後は手作業でその起動スクリプトを実行する
    • 手作業だけれども手間は一回に減るので、まあよし

fig のシンボリックリンクをまとめる

まあこれは手作業でやっていく

$ ln -s /home/mydir/myproject/fig.yml /etc/docker-fig/myproject

こんな感じで。

スタートスクリプト

#!/bin/bash

ETCDIR=/etc/docker-fig

for FILE in ${ETCDIR}/*
do
  if [ -L ${FILE} ] ; then
    fig -f ${FILE} start
  fi
done

展望

手作業が多くてダサいけれども、とりあえずこれでやってみる。

システム起動時にスタートスクリプトを実行させれば自動になるきもするのですが、コンテナが時たま起動に失敗するみたいなので手作業で見張っていないとまだ不安なところがあるのですよね。

これ以上になったらオーケストレーションツールの出番でしょうか。

5
5
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
5
5