簡易 Apache Web サーバーをコンテナーに構築する
コンテナーがどのように稼動するかを説明する際に、Web サーバーを例にあげる場合がよくあります。このガイドでは以下の手順について説明します。
- コンテナー内に Apache (httpd) Web サーバーを構築する
- ホストのポート 80 でサービスを公開する
- 簡易な index.html ファイルを提供する
- バックエンドサーバーからデータを表示する (こちらから入手できる追加の MariaDB コンテナーが必要です)
Apache Web サーバーコンテナーを作成して実行する
-
システムをインストールする。docker パッケージを含む RHEL 7 または RHEL Atomic システムをインストールして、docker サービスを起動します。
-
イメージを取得する。以下のコマンドを実行して rhel7 イメージを取得します。
# docker pull rhel7:latest
-
サポートファイルが含まれる tarball を取得する。このガイドに添付されている tarball ファイル (web_cont.tgz) をダウンロードします。新しい mywebcontainer ディレクトリーにダウンロードして、以下のように tar を展開してください。
# mkdir ~/mywebcontainer # cp web_cont*.tgz ~/mywebcontainer # cd ~/mywebcontainer # tar xvf web_cont*.tgz action Dockerfile
-
CGI スクリプト action を修正する。必要に応じて action ファイルを編集します。このファイルは、バックエンドデータベースサーバーコンテナーからデータを取得するのに使用します。このスクリプトでは、ホストシステムの docker0 インターフェイスの IP アドレスは 172.17.42.1、ログイン用のユーザーアカウントは dbuser1 、そのパスワードは redhat、そして使用するデータベースの名前は gss であると想定しています。IP アドレスに変更がなく、こちらで説明されているデータベースコンテナーをお使いの場合は、このスクリプトを変更する必要はありません。また、このスクリプトを使用せず、Web サーバーを使用して HTML コンテンツを使用することもできます。
#!/usr/bin/python # -*- coding: utf-8 -*- import MySQLdb as mdb import os con = mdb.connect(os.getenv('DB_SERVICE_SERVICE_HOST','172.17.42.1'), 'dbuser1', 'redhat', 'gss') with con: cur = con.cursor() cur.execute("SELECT MESSAGE FROM atomic_training") rows = cur.fetchall() print 'Content-type:text/html\r\n\r\n' print '<html>' print '<head>' print '<title>My Application</title>' print '</head>' print '<body>' for row in rows: print '<h2>' + row[0] + '</h2>' print '</body>' print '</html>' con.close()
-
Dockerfile を確認する。必要に応じて ~/mywebcontainer ディレクトリーにある Dockerfile ファイルを編集します (変更が必要なのはおそらく Maintainer_Name のみ)。以下は、そのファイルの内容です。
# Webserver container with CGI python script # Using RHEL 7 base image and Apache Web server # Version 1 # Pull the rhel image from the local repository FROM rhel7:latest USER root MAINTAINER Maintainer_Name # Fix per https://bugzilla.redhat.com/show_bug.cgi?id=1192200 RUN yum -y install deltarpm yum-utils --disablerepo=*-eus-* --disablerepo=*-htb-* \ --disablerepo=*-ha-* --disablerepo=*-rt-* --disablerepo=*-lb-* --disablerepo=*-rs-* --disablerepo=*-sap-* RUN yum-config-manager --disable *-eus-* *-htb-* *-ha-* *-rt-* *-lb-* *-rs-* *-sap-* > /dev/null # Update image RUN yum update -y RUN yum install httpd procps-ng MySQL-python -y # Add configuration file ADD action /var/www/cgi-bin/action RUN echo "PassEnv DB_SERVICE_SERVICE_HOST" >> /etc/httpd/conf/httpd.conf RUN chown root:apache /var/www/cgi-bin/action RUN chmod 755 /var/www/cgi-bin/action RUN echo "The Web Server is Running" > /var/www/html/index.html EXPOSE 80 # Start the service CMD ["-D", "FOREGROUND"] ENTRYPOINT ["/usr/sbin/httpd"]
-
Web サーバーコンテナーを構築する。Dockerfile ファイルとその他のコンテンツを含むディレクトリーで、以下のコマンドを実行します。
# docker build -t webwithdb . Sending build context to Docker daemon 4.096 kB Sending build context to Docker daemon Step 0 :FROM rhel7:latest ---> bef54b8f8a2f Step 1 :USER root ---> Running in 00c28d347131 ---> cd7ef0fcaf55 ...
-
Web サーバーコンテナーを起動する。コンテナーイメージを起動するには、以下のコマンドを実行します。
# docker run -d -p 80:80 --name=mywebwithdb webwithdb
-
Web サーバーコンテナーをテストする。Web サーバーが動作していることを確認するには、以下に示す最初の curl コマンドを実行します。バックエンドデータベースコンテナーを実行している場合は、2 つ目のコマンドを実行します。
# curl http://localhost/index.html The Web Server is Running # curl http://localhost/cgi-bin/action <html> <head> <title>My Application</title> </head> <body> <h2>RedHat rocks</h2> <h2>Success</h2> </body> </html> </tt></pre>
ローカルホストに Web ブラウザーをインストールしている場合は、Web ブラウザーを開いて、出力がきちんと表示されていることを確認します。ブラウザーで http://localhost/cgi-bin/action を開きます。
コンテナーを使用するためのヒント
ここでは、Web サーバーコンテナーを使用するためのヒントを紹介します。
-
MariaDB を変更する。(Building a Simple Database Server in a Docker Container で説明されている) MariaDB コンテナーでこのコンテナーを使用するには、action スクリプトを編集し、IP アドレスを 172.17.42.1 から、docker0 インターフェイスのホスト IP に変更します。そのアドレスがホストにあることを確認するには、以下のコマンドを実行します。
# ip a | grep docker0 | grep inet inet 172.17.42.1/16 scope global docker0
-
コンテンツを追加する。docker run コマンドラインに -v オプションを使用すると、ローカルホストからマウントした自作のコンテンツを追加できます。たとえば、次のようになります。
# docker run -d -p 80:80 -v /var/www/html:/var/www/html \ --name=mywebwithdb webwithdb
-
コンテナーを編成する。その他のコンテナーと一緒にこのコンテナーを管理するには、Kubernetes を使用してポッドに編成することが推奨されます。Kubernetes を使用して、コンテナーを編成する方法については、以下のナレッジベースを参照してください。
-
Get Started Orchestrating Docker Containers with Kubernetes: 簡単な Kubernetes 環境を作成し、単一システムで試しに使用する方法を説明します。
-
Creating a Kubernetes Cluster to Run Docker Format Containers: Flannel ネットワーク、Kubernetes サービス、レプリケーションコントローラー、およびポッドデプロイメントを使用したマルチオンの Kubernetes 設定を作成する方法を説明します。
-
Comments