「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