自前サーバーで 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
展望
手作業が多くてダサいけれども、とりあえずこれでやってみる。
システム起動時にスタートスクリプトを実行させれば自動になるきもするのですが、コンテナが時たま起動に失敗するみたいなので手作業で見張っていないとまだ不安なところがあるのですよね。
これ以上になったらオーケストレーションツールの出番でしょうか。