Dockerコンテナを作成してApache2.2を動かす

はじめに
===

新しく構築したCentOS 6.6サーバ(CentOSをminimalインストールしたサーバ)に対して、Dockerのインストールを行い、Dockerコンテナ作成 及び Dockerコンテナ内でApache 2.2を起動する手順です。

対象環境
===

Dockerをインストールする環境は以下になります。

[Dockerホスト側環境]
・CentOS release 6.6 (2.6.32-504.8.1.el6.x86_64)
・docker-io 1.4.1-3

[Dockerコンテナ側環境]
・CentOS release 6.6 (2.6.32-504.8.1.el6.x86_64)
・Apache 2.2.15

参考サイト
===

Dockerインストールやコンテナ作成にあたり、以下のサイトやページを参考にさせて頂きました。

http://docs.docker.com/installation/centos/#installing-docker---centos-6.5
http://apatheia.info/blog/2013/06/17/docker/
http://qiita.com/tomy103rider/items/bf4042ad2082a23f393b
http://qiita.com/zwirky/items/991f61a231f4e198a320
http://qiita.com/gologo13/items/1bdba6085ec79153bf1a

DockerホストOS側のDockerインストール手順
===

**(1) DockerホストOS化したいCentOS 6.6サーバにrootユーザでログインします。**

**(2) DockerホストOS化したいCentOS 6.6サーバのカーネルやパッケージ類をアップデートします。**

```
[root@example-CentOS-6-6-Docker ~]# hostname
example-CentOS-6-6-Docker
[root@example-CentOS-6-6-Docker ~]# yum -y update
[root@example-CentOS-6-6-Docker ~]#
```

**(3) DockerホストOS化したいCentOS 6.6サーバにDockerをインストールします。**

```
[root@example-CentOS-6-6-Docker ~]# yum -y remove docker
[root@example-CentOS-6-6-Docker ~]# rpm -qa | grep docker
[root@example-CentOS-6-6-Docker ~]#

[root@example-CentOS-6-6-Docker ~]# rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6
[root@example-CentOS-6-6-Docker ~]# yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
[root@example-CentOS-6-6-Docker ~]# yum -y install docker-io
[root@example-CentOS-6-6-Docker ~]#
```

**(4) CentOS 6.6サーバ上でDockerプロセスが自動起動するよう設定します。**

```
[root@example-CentOS-6-6-Docker ~]# service docker start
Starting cgconfig service:                                 [  OK  ]
Starting docker:                                           [  OK  ]
[root@example-CentOS-6-6-Docker ~]#

[root@example-CentOS-6-6-Docker ~]# ps awux | grep -v grep | grep docker
root      1102  0.8  1.3 364136  8448 pts/0    Sl   02:14   0:00 /usr/bin/docker -d
root      1132  1.6  0.2 114200  1720 pts/0    D    02:14   0:00 mkfs.ext4 -E nodiscard,lazy_itable_init=0 /dev/mapper/docker-202:65-400750-base
[root@example-CentOS-6-6-Docker ~]#

[root@example-CentOS-6-6-Docker ~]# chkconfig docker on
[root@example-CentOS-6-6-Docker ~]#
[root@example-CentOS-6-6-Docker ~]# chkconfig --list | grep docker
docker          0:off   1:off   2:on    3:on    4:on    5:on    6:off
[root@example-CentOS-6-6-Docker ~]#
```

DockerホストOS上でDockerコンテナ作成
===

**(5) ホストOS上でCentOSのDockerイメージをダウンロードします。**

```
[root@example-CentOS-6-6-Docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
[root@example-CentOS-6-6-Docker ~]#
```

```
[root@example-CentOS-6-6-Docker ~]# docker pull centos:centos6
centos:centos6: The image you are pulling has been verified
511136ea3c5a: Pull complete
5b12ef8fd570: Pull complete
a30bc9f3097e: Pull complete
Status: Downloaded newer image for centos:centos6
[root@example-CentOS-6-6-Docker ~]#
```

```
[root@example-CentOS-6-6-Docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              centos6             a30bc9f3097e        3 weeks ago         215.8 MB
[root@example-CentOS-6-6-Docker ~]#
```

**(6) Dockerコンテナを作成して起動します。**

```
[root@example-CentOS-6-6-Docker ~]# docker run -i -t centos:centos6 /bin/bash
[root@d846367e8860 /]#
[root@d846367e8860 /]# hostname
d846367e8860
[root@d846367e8860 /]#
```

Dockerコンテナ内にApacheインストール
===

**(7) Dockerコンテナ内にApacheをインストールします。**

```
[root@d846367e8860 /]# uname -a
Linux d846367e8860 2.6.32-504.8.1.el6.x86_64 #1 SMP Wed Jan 28 21:11:36 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
[root@d846367e8860 /]# rpm -qa | grep httpd
[root@d846367e8860 /]#

[root@d846367e8860 /]# yum -y install httpd
[root@d846367e8860 /]#

[root@d846367e8860 /]# rpm -qa | grep httpd
httpd-tools-2.2.15-39.el6.centos.x86_64
httpd-2.2.15-39.el6.centos.x86_64
[root@d846367e8860 /]#
```

**(8) Dockerコンテナ内でApacheを起動します。**

```
[root@d846367e8860 /]# cp -p /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.ORG
[root@d846367e8860 /]# diff /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.ORG
[root@d846367e8860 /]#
[root@d846367e8860 /]# sed -i -e 's/\#ServerName www.example.com:80/ServerName example-web-server.example.com/g' /etc/httpd/conf/httpd.conf
[root@d846367e8860 /]#
[root@d846367e8860 /]# diff /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.ORG
276c276
< ServerName example-web-server.example.com
---
> #ServerName www.example.com:80
[root@d846367e8860 /]#

[root@d846367e8860 /]# ps awux | grep -v grep | grep http
[root@d846367e8860 /]#
```

```
[root@d846367e8860 /]# /etc/init.d/httpd configtest
Syntax OK
[root@d846367e8860 /]# /etc/init.d/httpd start
Starting httpd:
[root@d846367e8860 /]#
```

```
[root@d846367e8860 /]# ps awux | grep -v grep | grep http
root        95  0.0  0.6 175276  3732 ?        Ss   17:34   0:00 /usr/sbin/httpd
apache      97  0.0  0.4 175276  2420 ?        S    17:34   0:00 /usr/sbin/httpd
apache      98  0.0  0.4 175276  2420 ?        S    17:34   0:00 /usr/sbin/httpd
apache      99  0.0  0.4 175276  2420 ?        S    17:34   0:00 /usr/sbin/httpd
apache     100  0.0  0.4 175276  2420 ?        S    17:34   0:00 /usr/sbin/httpd
apache     101  0.0  0.4 175276  2420 ?        S    17:34   0:00 /usr/sbin/httpd
apache     102  0.0  0.4 175276  2420 ?        S    17:34   0:00 /usr/sbin/httpd
apache     103  0.0  0.4 175276  2420 ?        S    17:34   0:00 /usr/sbin/httpd
apache     104  0.0  0.4 175276  2420 ?        S    17:34   0:00 /usr/sbin/httpd
[root@d846367e8860 /]#
```

```
[root@d846367e8860 /]# ls -lrta /var/www/html/
total 8
drwxr-xr-x. 2 root root 4096 Oct 16 14:49 .
drwxr-xr-x. 6 root root 4096 Feb 27 17:34 ..
[root@d846367e8860 /]#

[root@d846367e8860 /]# echo "docker test server" >> /var/www/html/index.html
[root@d846367e8860 /]#

[root@d846367e8860 /]# curl http://127.0.0.1/
docker test server
[root@d846367e8860 /]#

[root@d846367e8860 /]# chkconfig httpd on
[root@d846367e8860 /]#

[root@d846367e8860 /]# exit
exit
[root@example-CentOS-6-6-Docker ~]#
```

DockerホストOSからDockerコンテナ内のApacheへアクセスする手順
===

**(9) ApacheをインストールしたDockerコンテナのイメージを保存します。**

```
[root@example-CentOS-6-6-Docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
d846367e8860        centos:centos6      "/bin/bash"         18 minutes ago      Exited (0) 19 seconds ago                       backstabbing_colden
[root@example-CentOS-6-6-Docker ~]#
```

```
[root@example-CentOS-6-6-Docker ~]# docker commit d846367e8860 centos:centos6/httpd
c9d152242caad4a7bf68f850d153a6150f9c65203ca8ec2d5477b5aee70bf0c8
[root@example-CentOS-6-6-Docker ~]#
```

```
[root@example-CentOS-6-6-Docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                          PORTS               NAMES
d846367e8860        centos:centos6      "/bin/bash"         20 minutes ago      Exited (0) About a minute ago                       backstabbing_colden
[root@example-CentOS-6-6-Docker ~]#

[root@example-CentOS-6-6-Docker ~]# docker images
REPOSITORY             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos:centos6/httpd   latest              c9d152242caa        22 seconds ago      278 MB
centos                 centos6             a30bc9f3097e        3 weeks ago         215.8 MB
[root@example-CentOS-6-6-Docker ~]#
```

```
[root@example-CentOS-6-6-Docker ~]# docker run -i -t centos:centos6/httpd /bin/bash
[root@4922d9e8597e /]#
[root@4922d9e8597e /]# ps awux | grep -v grep | grep http
[root@4922d9e8597e /]#
[root@4922d9e8597e /]# /etc/init.d/httpd start
Starting httpd:                                            [  OK  ]
[root@4922d9e8597e /]#
[root@4922d9e8597e /]# ps awux | grep -v grep | grep http
root        23  0.5  0.6 175276  3644 ?        Ss   17:41   0:00 /usr/sbin/httpd
apache      25  0.0  0.3 175276  2416 ?        S    17:41   0:00 /usr/sbin/httpd
apache      26  0.0  0.3 175276  2416 ?        S    17:41   0:00 /usr/sbin/httpd
apache      27  0.0  0.3 175276  2416 ?        S    17:41   0:00 /usr/sbin/httpd
apache      28  0.0  0.3 175276  2416 ?        S    17:41   0:00 /usr/sbin/httpd
apache      29  0.0  0.3 175276  2416 ?        S    17:41   0:00 /usr/sbin/httpd
apache      30  0.0  0.3 175276  2416 ?        S    17:41   0:00 /usr/sbin/httpd
apache      31  0.0  0.3 175276  2416 ?        S    17:41   0:00 /usr/sbin/httpd
apache      32  0.0  0.3 175276  2416 ?        S    17:41   0:00 /usr/sbin/httpd
[root@4922d9e8597e /]#
[root@4922d9e8597e /]# curl http://127.0.0.1/
docker test server
[root@4922d9e8597e /]#

[root@4922d9e8597e /]# exit
exit
[root@example-CentOS-6-6-Docker ~]#
[root@example-CentOS-6-6-Docker ~]# ps awux | grep -v grep | grep http
[root@example-CentOS-6-6-Docker ~]#
```

**(10) Dockerコンテナをポートフォワード(-pオプションでポート番号を指定)するように起動し、ホストOS側からDockerコンテナ内のApacheへアクセス出来るようにします。**

```
[root@example-CentOS-6-6-Docker ~]# docker ps -a
CONTAINER ID        IMAGE                         COMMAND             CREATED              STATUS                      PORTS               NAMES
4922d9e8597e        centos:centos6/httpd:latest   "/bin/bash"         About a minute ago   Exited (0) 42 seconds ago                       drunk_thompson
d846367e8860        centos:centos6                "/bin/bash"         21 minutes ago       Exited (0) 3 minutes ago                        backstabbing_colden
[root@example-CentOS-6-6-Docker ~]#
```

```
[root@example-CentOS-6-6-Docker ~]# docker run -i -t -p 50050:80 centos:centos6/httpd /bin/bash
[root@38c4efed92a8 /]#
[root@38c4efed92a8 /]# /etc/init.d/httpd start
Starting httpd:                                            [  OK  ]
[root@38c4efed92a8 /]#
[root@38c4efed92a8 /]# curl http://127.0.0.1/
docker test server
[root@38c4efed92a8 /]#
```

**(11) Dockerコンテナ内からログアウトします。**

Dockerコンテナ内でCtrl + pキーとCtrl + qキーの順に押下して、コンテナ内からログアウトします。

```
[root@38c4efed92a8 /]# →　★Ctrl + pキーとCtrl + qキーの順に押下して、コンテナ内からログアウトします。

[root@38c4efed92a8 /]# [root@example-CentOS-6-6-Docker ~]#
[root@example-CentOS-6-6-Docker ~]#
```

**(12) DockerホストOS上で、Dockerコンテナ内のApacheへアクセス出来る事を確認します。**

```
[root@example-CentOS-6-6-Docker ~]# curl http://127.0.0.1:50050/
docker test server
[root@example-CentOS-6-6-Docker ~]#
```

***

Dockerを利用すると、手軽に環境を用意出来るので便利ですね。

以上になります。