docker構築時の手順メモ。
■2015/02/17修正
docker run時の実行コマンドに/sbin/initを指定していたが、
sshdのゾンビプロセスが大量に残り、実行可能プロセス数を超えてコマンド実行が出来なくなる事象が発生。
そのため、monitを用いてsshdを起動するように修正。
やりたいこと
・CentOSにdockerをインストール
・外部からSSH接続できるようなコンテナを作成する
手順
dockerのインストール
インストール先のサーバはCentOS6.3、dockerはCentOS6.5以上がサポートだったので、アップデートしてインストール。
# yum update
# yum install docker-io
# service docker status
# service docker start
docker imageの取得
1.docker pull {イメージ名}:{タグ名} でイメージを取得。
デフォルトだと、Docker Hub Registryから取得される。
2.取得したイメージの一覧を確認
# docker pull centos:centos6
# docker images
コンテナの起動
# docker run -t -i -d --name hoge centos:centos6 /bin/bash
docker runコマンド引数説明
-t ・・・ttyを確保。/bin/bashなどでコンテナを操作する際に指定。
-i ・・・コンテナの標準入力を開く。/bin/bashなどでコンテナーを操作する際に指定
-d ・・・バックグラウンドで実行。WebやAPサーバなど常時実行するコンテナーで指定
--name・・・{コンテナ名}
{イメージ名}:{タグ名}
コンテナで実行するコマンド
コンテナへの接続
1.コンテナ一覧からコンテナIDを確認
2.コンテナに接続
# docker ps
# docker attach [コンテナID]
sshdのインストール
1.コンテナ内にsshをインストール
2.sshd_configをバックアップし、PAMの設定
3.sshdのサービス起動
# yum install openssh
# yum install openssh-server
#
# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.orig
#
# sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
# sed -ri 's/#UsePAM no/UsePAM no/g' /etc/ssh/sshd_config
#
# /etc/init.d/sshd start
monitのインストール
1.monitをインストールする。
2.インストール確認
3.sshdの監視設定を追加
4.monitサービス再起動
# yum install monit
#
# service monit --version
service ver. 0.91
#
# vi /etc/monit.d/sshd
check process sshd
with pidfile "/var/run/sshd.pid"
start program "/etc/init.d/sshd start"
stop program "/etc/init.d/sshd stop"
if failed port 22 protocol ssh then restart
if 5 restart within 5 cycles then alert
#
# /etc/init.d/monit restart
Shutting down monit:
Starting monit:
#
# exit
コンテナイメージのコミット
1.コンテナ一覧からコンテナIDを取得
2.コミット(今回はcentos6_sshという名前)
3.docker imageの作成確認
4.作成したコンテナを停止
5.作成したコンテナを削除
# docker ps -a
# docker commit コンテナID centos6_ssh
# docker images
# docker stop コンテナID
# docker rm コンテナID
コンテナの起動
サーバの50022ポートをコンテナの22ポートに対応させてコンテナ立ち上げる。
# docker run -t -i -d -p 50022:22 --name centos6_ssh centos6_ssh /bin/bash
# ssh root@localhost -p 50022
※monitを入れる前
以下のように実行コマンドに/sbin/initをしていた。
sshdのゾンビプロセスが大量に残る事象が出ていたので、monit経由してsshdを起動するように修正した。
原因はこれかも?
http://blog.phusion.nl/2015/01/20/docker-and-the-pid-1-zombie-reaping-problem/
# docker run -t -i -d -p 50022:22 --name centos6_ssh centos6_ssh /sbin/init
# ssh root@localhost -p 50022