第2章 コンテナーの使用方法
2.1. Apache Web Server コンテナーのインストールおよびデプロイ
2.1.1. 概要
コンテナーがどのように機能するかを説明する際に、Web サーバーを例に挙げることがよくあります。このトピックでは以下の手順について説明します。
- コンテナー内に Apache (httpd) Web サーバーを構築する
- ホストのポート 80 でサービスを公開する
- 簡単な index.html ファイルを提供する
- バックエンドサーバーからデータを表示する (後述する追加の MariaDB コンテナーが必要)
2.1.2. Apache Web Server コンテナーの作成および実行
- システムのインストール: docker パッケージを含む RHEL 7 または RHEL Atomic システムをインストールして、docker サービスを起動します。
イメージの取得: 以下のコマンドを実行して rhel7 イメージを取得します。
# docker pull rhel7:latest
サポートファイルが含まれる tarball の取得: 本書に添付されている tarball ファイル (web_cont_2.tgz) をダウンロードします。新規の mywebcontainer ディレクトリーにダウンロードして、以下のように untar を実行します。
# 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 registry 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-* \n --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 ブラウザーを開いて、出力内の数行がきちんと表示されていることを確認します。ブラウザーで以下の URL を開きます。 http://localhost/cgi-bin/action
2.1.3. コンテナーを使用するためのヒント
ここでは、Web サーバーコンテナーを使用するためのヒントを紹介します。
- MariaDB の変更: 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 \n --name=mywebwithdb webwithdb
2.1.4. 添付ファイル
2.2. MariaDB コンテナーのインストールおよびデプロイ
2.2.1. 概要
MariaDB を使用して、他のアプリケーションからアクセスできる基本的なデータベースをコンテナーにセットアップすることができます。本書では以下の手順について説明します。
- docker フォーマットのコンテナーに MariaDB データベースサーバーを構築する
- ホストのポート 3306 でサービスを公開する
- データベースサービスを起動して情報を共有する
- Web サーバーからデータベースをクエリーするためのスクリプトを実行できるようにする (後述の追加 Web サーバーコンテナーが必要)
- このコンテナーを使用し、拡張するためのヒント
2.2.2. MariaDB データベースサーバーコンテナーの作成および実行
- システムのインストール: docker パッケージを含む Red Hat Enterprise Linux 7 または Red Hat Enterprise Linux Atomic Host システムをインストールし、docker サービスを起動します。
イメージの取得: 以下のコマンドを実行して rhel7 イメージを取得します。
# docker pull rhel7:latest
サポートファイルが含まれる tarball の取得: 本書に添付されている tarball ファイル (mariadb_cont.tgz) をダウンロードします。新規の mydbcontainer ディレクトリーにダウンロードして、以下のように untar を実行します。
# mkdir ~/mydbcontainer # cp mariadb_cont*.tgz ~/mydbcontainer # cd ~/mydbcontainer # tar xvf mariadb_cont*.tgz gss_db.sql Dockerfile
Dockerfile の確認: ~/mydbcontainer ディレクトリーにある Dockerfile ファイルを随時変更します (おそらく変更が必要なのは、名前を追加する際の Maintainer_Name のみ)。以下は、そのファイルの内容です。
# Database container with simple data for a Web application # Using RHEL 7 base image and MariahDB database # Version 1 # Pull the rhel image from the local registry FROM rhel7:latest USER root MAINTAINER Maintainer_Name # Update image RUN yum update -y # Add Mariahdb software RUN yum -y install mariadb-server # Set up Mariahdb database ADD gss_db.sql /tmp/gss_db.sql RUN /usr/libexec/mariadb-prepare-db-dir RUN /usr/bin/mysqld_safe --basedir=/usr & \n sleep 10s && \n /usr/bin/mysqladmin -u root password 'redhat' && \n mysql --user=root --password=redhat < /tmp/gss_db.sql && \n mysqladmin shutdown --password=redhat # Expose Mysql port 3306 EXPOSE 3306 # Start the service CMD ["--basedir=/usr"] ENTRYPOINT ["/usr/bin/mysqld_safe"]
データベースサーバーコンテナーの構築: Dockerfile ファイルとその他のコンテンツを含むディレクトリーで、以下のコマンドを実行します。
# docker build -t dbforweb . Sending build context to Docker daemon 528.4 kB Sending build context to Docker daemon Step 0 : FROM rhel7:latest ---> bef54b8f8a2f Step 1 : USER root ...
データベースサーバーコンテナーの起動: コンテナーイメージを起動するには、以下のコマンドを実行します。
# docker run -d -p 3306:3306 --name=mydbforweb dbforweb
データベースサーバーコンテナーのテスト: たとえば、ホストの docker0 インターフェースが 172.17.42.1 の場合 (これと異なる場合もある)、以下のように nc コマンド (RHEL 7 の場合は yum install nc と入力する) を実行して、データベースコンテナーが動作することを確認します。
# nc -v 172.17.42.1 3306 Ncat: Version 6.40 ( http://nmap.org/ncat ) Ncat: Connected to 172.17.42.1:3306. R 5.5.40-MariaDB?acL3YF31?X?FWbiiTIO2Kd6mysql_native_password Ctrl-C
2.2.3. コンテナーを使用するためのヒント
ここでは、Web サーバーコンテナーを使用するためのヒントを紹介します。
- 独自のデータベースの追加: お使いのデータベースファイルをビルドディレクトリーにコピーし、データベースファイル名を gss_db.sql からお使いのデータベース名に (Dockerfile ファイル内の複数箇所で) 変更することにより、独自の MariaDB コンテンツを組み込むことができます。
- コンテナーのオーケストレーション:このコンテナーを他のコンテナーと共に管理する効果的な方法として、Kubernetes を使用して Pod にそれらをオーケストレーションすることができます。
Comments