担当している案件で1コンテナで2サービスを動かす可能性があるので検証してみます。 本当は1コンテナ1サービスが理想ですが、無理に分解した結果わかりづらくなって人間が苦しむようじゃ本末転倒ですので、Supervisordを使って2サービス起動します。
※CentOS6.6で試してます。
コンテナを起動してsshdとhttpdを入れる
普通にコンテナを起動します。
ベースイメージはcentos:6
を使いました。
また、sshdとhttpdの動作確認をしたいので、あらかじめポートを開放しておきます。
docker run -it -p 10022:22 -p 8080:80 --name svd-base centos:6
コンテナにsshdとhttpdを入れます。
yum install -y openssh openssh-server httpd
rootのパスワードを設定してsshdの設定、サービスの起動をします。
passwd root
sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
sed -ri 's/#UsePAM no/UsePAM no/g' /etc/ssh/sshd_config
service sshd start
service httpd start
これで、<HOST>:10022
にsshでログインできるはずです。
ブラウザでも<HOST>:8080
アクセスしてみるとテストページが出ます。
supervisordを入れる
supervisordはeasy_install
から入れられますが、epelリポジトリからも入れられます。
今回はepelから入れます。
yum install epel-release
yum install supervisor
設定ファイルである/etc/supervisord.conf
を編集します。
nodaemonをtrueにすることで、supervisordがフォアグラウンドで起動します。
[supervisord]
nodaemon=true
[program:sshd]
command=/usr/sbin/sshd -D
[program:httpd]
command=/usr/sbin/httpd -DFOREGROUND
コミットして再度コンテナを立ち上げる
一旦コミットしてイメージにしてから、起動時のコマンドでsupervisordを指定します。 また、動作確認時のポート開放を一旦閉じたいので、コミットしたらコンテナを停止しておきます。
docker commit svd-base tanksuzuki/svd-base
docker stop svd-base
それでは、superisordを指定してコンテナを立ち上げます。
docker run -it -p 10022:22 -p 8080:80 --name svd-run tanksuzuki/svd-base /usr/bin/supervisord
2015-07-08 01:09:28,853 CRIT Supervisor running as root (no user in config file)
2015-07-08 01:09:28,874 INFO /var/tmp/supervisor.sock:Medusa (V1.1.1.1) started at Tue Jul 8 01:09:28 2015
Hostname: <unix domain socket>
Port:/var/tmp/supervisor.sock
2015-07-08 01:09:28,938 CRIT Running without any HTTP authentication checking
2015-07-08 01:09:28,939 INFO supervisord started with pid 1
2015-07-08 01:09:28,944 INFO spawned: 'httpd' with pid 6
2015-07-08 01:09:28,957 INFO spawned: 'sshd' with pid 7
2015-07-08 01:09:30,040 INFO success: httpd entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2015-07-08 01:09:30,040 INFO success: sshd entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
なんかsshdとhttpdが起動した感がある出力がされていますね。 先ほどの動作確認時と同様、コンテナにSSHとHTTPでアクセスしてみてください。
おわりに
今回お試しでsshdとhttpdを単一コンテナで動かしてみました。
ですが、冒頭にも書いた通り基本は1コンテナ1サービスが理想なので使いすぎ注意です。 特にsshdをコンテナ内で動かすのはイマイチ感満載なのでおすすめはできません。