今度は自動起動するようなコンテナを作ってみます。
ちょっと調べてみましたが、
1つのコンテナで複数サービスを起動させる方法って
まだこれというのがないみたい?
今回は、Apache httpdを使ってみようと思います。
なにはともあれコンテナを作りましょ。
–name=web(コンテナ名)
-p 80(ホスト側ポート):80(コンテナ側ポート)
# docker run -i -t --name=web -p 80:80 centos:6 /bin/bash [root@535492bbb30c /]# [root@535492bbb30c /]# yum install httpd [root@535492bbb30c /]# service httpd start Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.17.0.5 for ServerName
コンテナにhttpdを入れて起動させましょう。
きちんとコンテナ内で動いているか確認
[root@535492bbb30c /]# ps -eaf |grep httpd root 68 1 0 08:08 ? 00:00:00 /usr/sbin/httpd apache 70 68 0 08:08 ? 00:00:00 /usr/sbin/httpd apache 71 68 0 08:08 ? 00:00:00 /usr/sbin/httpd apache 72 68 0 08:08 ? 00:00:00 /usr/sbin/httpd apache 73 68 0 08:08 ? 00:00:00 /usr/sbin/httpd apache 74 68 0 08:08 ? 00:00:00 /usr/sbin/httpd apache 75 68 0 08:08 ? 00:00:00 /usr/sbin/httpd apache 76 68 0 08:08 ? 00:00:00 /usr/sbin/httpd apache 77 68 0 08:08 ? 00:00:00 /usr/sbin/httpd root 79 1 0 08:08 ? 00:00:00 grep httpd [root@535492bbb30c /]# curl 127.0.0.1|head % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 101 4954 101 4954 0 0 3933k 0 --:--:-- --:--:-- --:--:-- 0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <head> <title>Apache HTTP Server Test Page powered by CentOS</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <style type="text/css"> body { background-color: #fff; color: #000; font-size: 0.9em; font-family: sans-serif,helvetica; [root@535492bbb30c /]# [root@535492bbb30c /]# ifconfig eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:04 inet addr:172.17.0.5 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::42:acff:fe11:4/64 Scope:Link UP BROADCAST RUNNING MTU:1500 Metric:1 RX packets:16641 errors:0 dropped:0 overruns:0 frame:0 TX packets:6824 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:25122205 (23.9 MiB) TX bytes:472306 (461.2 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:10 errors:0 dropped:0 overruns:0 frame:0 TX packets:10 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:5862 (5.7 KiB) TX bytes:5862 (5.7 KiB) [root@535492bbb30c /]# [root@535492bbb30c /]# chkconfig httpd on [root@535492bbb30c /]# chkconfig htcacheclean 0:off 1:off 2:off 3:off 4:off 5:off 6:off httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off netfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off network 0:off 1:off 2:on 3:on 4:on 5:on 6:off rdisc 0:off 1:off 2:off 3:off 4:off 5:off 6:off restorecond 0:off 1:off 2:off 3:off 4:off 5:off 6:off udev-post 0:off 1:on 2:on 3:on 4:on 5:on 6:off [root@535492bbb30c /]#
「Ctrl+p」「Ctrl+q」
一旦コンテナから抜けます
今度はホスト側で確認
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1d35fa257719 centos:6 "/bin/bash" About an hour ago Up About an hour 0.0.0.0:80->80/tcp web # curl 172.17.0.5|head % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 101 4954 101 4954 0 0 4338k <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <head> <title>Apache HTTP Server Test Page powered by CentOS</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <style type="text/css"> 0 body { background-color: #fff; - color: #000; - font-size: 0.9em; : font-family: sans-serif,helvetica; --:-- --:--:-- --:--:-- 4837k #
ホスト側からでもアクセスできてます。
さて、出来たのでイメージ化しましょ。
# docker stop web(CONTAINER ID、NAMES) web # # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1d35fa257719 centos:6 "/bin/bash" About an hour ago Exited (130) 45 seconds ago web # # docker commit 1d35fa257719 centos/apache:web 4cd9748b3c7ff3fcdcb65c8a384b751b94c7caf422dfc68bab99a1b90fb7cbfd # # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos/apache web 4cd9748b3c7f 51 seconds ago 280.8 MB centos 6 f6808a3e4d9e 3 weeks ago 215.7 MB
イメージを作りました。
さて、作ったイメージから起動させてみましょ
-d = バックグラウンドで起動
/usr/sbin/httpd -DFOREGROUND = コンテナ内で実行するコマンド
# docker run -d -i -t -p 80:80 centos/apache:web /usr/sbin/httpd -DFOREGROUND a40277e55efb0bac9d8b85545e962a214820b57727bc91ae770867d297cf6f40 # # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d5b0c253fe0c centos/apache:web "/usr/sbin/httpd -DF" 3 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp desperate_feynman
無事、バックグラウンドで起動しているみたいです。
で、バックグラウンドで動いているコンテナにアタッチしたら
# docker attach d5b0c253fe0c #
落ちてしまいます。
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 23c18d474c5a centos/apache:web "/usr/sbin/httpd -DF About a minute ago Exited (0) 20 seconds ago evil_lovelace
こんな感じに落ちてしまいます。。。
なので、
# docker run -d -i -t -p 80:80 centos/apache:web /usr/sbin/httpd -DFOREGROUND # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ad37afaeb6e8 centos/apache:web "/usr/sbin/httpd -DF 8 seconds ago Up 7 seconds 0.0.0.0:80->80/tcp condescending_morse #
バックグラウンドで起動させておいて
「exec」オプションを使って「/bin/bash」を実行してやります
# docker exec -i -t ad37afaeb6e8 /bin/bash [root@ad37afaeb6e8 /]# [root@ad37afaeb6e8 /]# netstat -lanput Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 :::80 :::* LISTEN - #
こうすれば、落ちないみたい。
[tegaki]難しい。。。。[/tegaki]