「Docker」コンテナにApache HTTP Serverのインストール、イメージの保存

前回エントリーで CentOS イメージからコンテナ起動までやってみました。 今回は、コンテナに Webサーバとして Apache HTTP Server をインストールしてコンテナ外からアクセスして使ってみたいと思います。あと、コンテナに対して加えた変更をイメージに保存する方法についても触れます。

「Docker」CentOSイメージからコンテナを起動してみる

※ 本記事の内容は VirtualBox 上の CentOS にインストールした Docker で実施してます。なんか WSL と Docker の相性が悪そうでこの環境でやることを断念・・・

1. Apache HTTP Server のインストール

特筆すべきことはありません。yum で一発でいれます。

[root@HOST:~]# docker run -it centos:centos7 /bin/bash
[root@xxxxxxxxxx /]# yum -y install httpd

正常にインストールされたこと、起動できていることを確認しておく。

[root@xxxxxxxxxx /]# rpm -qa | grep httpd
httpd-2.4.6-80.el7.centos.1.x86_64
httpd-tools-2.4.6-80.el7.centos.1.x86_64
[root@xxxxxxxxxx /]# echo "<html><body>test</body></html>" > /var/www/html/test.html
[root@xxxxxxxxxx /]# httpd
[root@xxxxxxxxxx /]# curl http://localhost/test.html
<html><body>test</body></html>



2. コンテナの変更をイメージに保存する

コンテナでの変更はイメージには保存されません。今回の場合だと同じイメージを利用してコンテナを起動すると再び Apache のインストールから始めなくてはいけないはめになります。

コンテナで変更した内容をあらたなイメージとして保存するコマンドとして docker commit というコマンドが用意されていて、こいつを使って Apache をインストールしたコンテナをあらたなイメージとして保存しておきます。

いったん、 Ctrl+p、Ctrl+q でコンテナから抜けて、下記の通りコマンドを実行します。 amazing_thompson はイメージとして保存したいコンテナ名です。docker ps -a の NAMES の箇所です。

[root@centos7 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS                  NAMES
5ae33628fedd        centos:centos7      "/bin/bash"         35 minutes ago      Up 35 minutes                                      amazing_thompson
e833cce48749        centos:centos7      "/bin/bash"         37 minutes ago      Exited (1) 35 minutes ago                          frosty_sammet
72d1bc167ccd        hello-world         "/hello"            38 minutes ago      Exited (0) 38 minutes ago                          musing_payne
[root@HOST ~]# docker commit amazing_thompson centos:httpd
sha256:b62dfd357e204a01732795169473af5d5ad32e224deab678c86b5267af659938
[root@centos7 ~]# docker image ls
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
centos                  httpd               b62dfd357e20        6 seconds ago       335 MB
docker.io/centos        centos7             75835a67d134        2 weeks ago         200 MB
docker.io/hello-world   latest              4ab4c602aa5e        7 weeks ago         1.84 kB

docker image ls で TAG が httpd のあらたなイメージが作成されていることが確認できます。

3. 作成したイメージからコンテナを起動する

上記で作成した centos:httpd イメージからコンテナを起動してみます。

[root@HOST ~]# docker run -it -p 8080:80 centos:httpd /bin/bash
[root@xxxxxxxxxx /]# rpm -qa | grep httpd
httpd-2.4.6-80.el7.centos.1.x86_64
httpd-tools-2.4.6-80.el7.centos.1.x86_64

Apache がインストールされており、ちゃんとコンテナでの変更がイメージに保存できていたことが確認できます。

なお、docker run の -p オプションについてはポートフォーワードの設定です。 8080:80 と書くとホストの8080ポートへアクセスするとコンテナの80ポートへフォーワードされます。

Apache を起動させて、Ctrl+p、Ctrl+q で抜けて、外部からコンテナの Apache にアクセスしてみる。

[root@xxxxxxxxxx /]# httpd
[root@xxxxxxxxxx /]# ★ Ctrl+p、Ctrl+q
[root@HOST ~]# curl http://localhost:8080/test.html
<html><body>test</body></html>

できてますね。

以上です。

[環境情報]

CentOS 7

Docker version 1.13.1