今度は自動起動するようなコンテナを作ってみます。
ちょっと調べてみましたが、
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]