今回も、前回の Docker触ってみた~ その2 に続き、しつこく続編です。
前回、Dockerのコンテナの中にApache HTTPDなどのサービスを入れて
# chkconfig httpd on
のようにしても、コンテナを立ち上げてもサービスを開始してくれない、というところで止まっていました。
今回は、Supervisorを使って簡単に起動する方法を調べたので、まとめてみます。
Supervisorっていうのは、pythonで作られたプロセス管理システムなので、pythonを入れる必要があるので、それも含めて手順をまとめていきます。
おおまかな設定としては、
[コンテナ側]
・python-setuptools、supervisorをインストール
・supervisorのサービス起動のスクリプトを作成
・supervisorの設定ファイルを作成
[ホスト側]
・コンテナをもとにイメージを作成
・コンテナを一旦削除
・先ほど作ったイメージでコンテナを再度作成
こんな流れで進めていきます。
コンテナを作りなおすのは、起動時に走らせる処理を変えるためです。
まずコンテナ側から。
コンテナを起動してrootで操作します。
■python-setuptools、supervisorをインストール
# yum install python-setuptools
# easy_install supervisor
■supervisorのサービス起動のスクリプトを作成
まずvi等のエディタでファイルを新規作成します。
# vi /etc/init.d/supervisord
以下の内容で保存します。
# Source init functions
. /etc/init.d/functions
RETVAL=0
prog=”supervisord”
pidfile=”/tmp/supervisord.pid”
lockfile=”/var/lock/subsys/supervisord”
start()
{
echo -n $”Starting $prog: ”
daemon –pidfile $pidfile supervisord
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch ${lockfile}
}
stop()
{
echo -n $”Shutting down $prog: ”
killproc -p ${pidfile} /usr/bin/supervisord
RETVAL=$?
echo
if [ $RETVAL -eq 0 ] ; then
rm -f ${lockfile} ${pidfile}
fi
}
case “$1” in
start)
start
;;
stop)
stop
;;
status)
status $prog
;;
restart)
stop
start
;;
*)
echo “Usage: $0 {start|stop|restart|status}”
;;
esac
作ったsupervisordのファイルに実行権限を与えます。
# chmod 755 /etc/init.d/supervisord
■supervisorの設定ファイルを作成
まず、設定ファイルのひな形を作成します。
# echo_supervisord_conf > /etc/supervisord.conf
次に、作ったひな形をエディタで開きます。
# vi /etc/supervisord.conf
ファイルの末尾に以下の2行を加えます。
次に、具体的にサービスを起動する設定のファイルをvi等のエディタで新規作成します。
※先に設定ファイルを入れるディレクトリを作成します。
# mkdir -p /etc/supervisord/conf/
# vim /etc/supervisord/conf/service.conf
以下の内容で保存します。
[program:sshd]
command=/usr/sbin/sshd -D
autostart=true
autorestart=true
[program:httpd]
command=/usr/sbin/httpd -c “ErrorLog /dev/stdout” -DFOREGROUND
redirect_stderr=true
[program:mysqld]
command=/usr/bin/mysqld_safe
autostart=true
autorestart=true
ここまで行ったら、コンテナを終了しておきます。
続いてホスト側。
■コンテナをもとにイメージを作成
まず、コンテナのID を取得します。
# docker ps -a
→一覧に表示されたコンテナから、今回使っているコンテナのIDとイメージ名を取得します。
続いて、先ほど取得したコンテナのIDを使って、イメージを作ります。
# docker commit [コンテナID] [イメージ名]
※イメージ名は任意に決めて問題ありません。
イメージ作成には時間がかかる場合があります。(大きなコンテナで作ると時間がかかります)
作成後、
# docker images
で、イメージが作成されていることを確認し、先へ進みます。
■コンテナを一旦削除
イメージが既に作成されているので、コンテナを一旦削除します。
# docker rm [コンテナ名]
■先ほど作ったイメージでコンテナを再度作成
先ほどイメージを作ったので、コンテナを改めて同じ名前で作成し、起動します。
その際、コンテナ起動時にSupervisorを起動するよう、以下のように実行します。
# docker run -it -p [httpポート]:80 -p [httpsポート]:443 -p [sshポート]:22 –name “[コンテナ名]” [イメージ名] /usr/bin/supervisord
※http、https、sshの転送ポートは、コンテナごとに決定してください。
これで、コンテナを起動した際に、SSH、Apache HTTPD、MySQLが起動するようになるはずです。
今回もDockerネタを引っ張りましたが、そろそろ終わりかな。。。
うーん、、、もしかしたら次回まで引っ張るかもしれません。
(M.clacla)