このドキュメントで説明されているソフトウェアはサポートされていないか、拡張サポートが提供されています。
現在サポートされているリリースにアップグレードすることをお薦めします。
Dockerfileに含まれている定義からDockerfileイメージを作成するには、docker buildコマンドを使用します。
次の例は、oraclelinux:6
イメージをベースとするタグv2
の付いたmymod/httpd
という名前のイメージをビルドして、Apache HTTPサーバーが実行できるようにする方法を示しています。
DockerfileからDockerイメージを作成する手順:
次のようにして、Dockerfileの生成先ディレクトリを作成します。
#
mkdir -p /var/docker_projects/mymod/httpd
注意イメージから作成するコンテナのデプロイ先と同じシステムにDockerfileを作成する必要はありません。 唯一の要件は、Docker EngineがDockerfileファイルにアクセスできることです。
新しいディレクトリに、通常は
Dockerfile
という名前が付けられるDockerfileを作成します。 次のDockerfileのコンテンツは、この例専用です。# Dockerfile that modifies oraclelinux:6 to include an Apache HTTP server FROM oraclelinux:6 MAINTAINER A N Other <another@example.com> RUN sed -i -e '/^\[main\]/aproxy=http://proxy.example.com:80' /etc/yum.conf RUN yum -y install httpd RUN echo "HTTP server running on guest" > /var/www/html/index.html EXPOSE 80 ENTRYPOINT /usr/sbin/httpd -D FOREGROUND
先頭行の
#
接頭辞は、その行がコメントであることを示します。 その他の行は次の命令キーワードで始まり、Dockerによるイメージの作成方法を定義します。-
ENTRYPOINT
イメージから作成されたコンテナが常に実行するコマンドを指定します。 この例では、/usr/sbin/httpd -D FOREGROUNDがコマンドで、HTTPサーバー・プロセスを開始します。
-
EXPOSE
指定されたポートが着信リクエストに対応できることを示します。 docker runで-pオプションまたは-Pオプションを使用すると、このポートをホストの別のポートにマップできます。 または、docker runで--linkオプションを使用すると、別のコンテナがDockerの内部ネットワーク経由でポートにアクセスできます(4.6項「Dockerコンテナ間の通信」を参照)。
-
FROM
Dockerが新しいイメージのベースとして使用するイメージを定義します。
-
MAINTAINER
Dockerfileの管理者を定義します。
-
RUN
新しいイメージを変更する際にDockerが実行するコマンドを定義します。 この例では、
RUN
行でWebプロキシを設定し、httpd
パッケージをインストールして、サーバー用の簡易ホーム・ページを作成します。
Dockerfileで使用できるその他の指示の詳細については、https://docs.docker.com/engine/reference/builder/を参照してください。
-
docker buildコマンドを使用してイメージを作成します。
#
docker build --tag="mymod/httpd:v2" /var/docker_projects/mymod/httpd/
Sending build context to Docker daemon 2.048 kB Step 1 : FROM oraclelinux:6 ---> 768a3d7b605a Step 2 : MAINTAINER A N Other <another@example.com> ---> Running in bc28c7b6babf ---> 0eb554ad6a7b Removing intermediate container bc28c7b6babf Step 3 : RUN sed -i -e '/^\[main\]/aproxy=http://proxy.example.com:80' /etc/yum.conf ---> Running in 4bd1305ab0fc ---> 328ff7b80dc0 Removing intermediate container 4bd1305ab0fc Step 4 : RUN yum -y install httpd ---> Running in 991bcace0d34 Loaded plugins: security, ulninfo Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package httpd.x86_64 0:2.2.15-53.0.1.el6 will be installed --> Processing Dependency: httpd-tools = 2.2.15-53.0.1.el6 for package: httpd-2.2.15-53.0.1.el6.x86_64 . . . Installed: httpd.x86_64 0:2.2.15-53.0.1.el6 Dependency Installed: apr.x86_64 0:1.3.9-5.el6_2 apr-util.x86_64 0:1.3.9-3.el6_0.1 apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1 httpd-tools.x86_64 0:2.2.15-53.0.1.el6 mailcap.noarch 0:2.1.31-2.el6 Complete! ---> 153b5fa6ba92 Removing intermediate container 991bcace0d34 Step 5 : RUN echo "HTTP server running on guest" > /var/www/html/index.html ---> Running in 0a9d54558627 ---> 6409e3ae11e1 Removing intermediate container 0a9d54558627 Step 6 : EXPOSE 80 ---> Running in da51ae63fbe0 ---> d16342a6b776 Removing intermediate container da51ae63fbe0 Step 7 : ENTRYPOINT /usr/sbin/httpd -D FOREGROUND ---> Running in 221988caab1c ---> 6df513b1c3d1 Removing intermediate container 221988caab1c Successfully built 6df513b1c3d1
イメージがビルドされたら、newguest2
という名前のコンテナ・インスタンスを作成してテストできます。
[root@host ~]# docker run -d --name newguest2 -P mymod/httpd:v2
31b334b9933cfbec71d7bc4f723c352c8de842823505b6f11a08bf960e0398e7
/usr/sbin/httpd -D FOREGROUNDはコンテナに組み込まれているので、このコマンドを指定する必要はありません。
-Pオプションは、Dockerがゲストによって公開されたポートをホストの49000から49900までの範囲にある使用可能なポートにマップする必要があることを指定します。
docker inspectを使用すると、DockerがTCPポート80にマップするホスト・ポートが返されます。
[root@host ~]# docker inspect --format='{{ .NetworkSettings.Ports }}' newguest2
map[80/tcp:[map[HostIp:0.0.0.0 HostPort:49153]]]
この例では、ゲストのTCPポート80はホストのTCPポート49153にマップされています。
ゲストが提供しているWebコンテンツを表示するには、ブラウザがホストのポート49153を参照するように指定します。 別のシステムからコンテンツにアクセスする場合は、ホストのポートに対する着信接続の許可が必要になる可能性があります。
たとえば、iptablesルールを作成してポートを開くことができます:
[root@host ~]#iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 49153 -j ACCEPT
[root@host ~]#service iptables save
curlを使用して、サーバーが機能していることをテストすることも可能です。
[root@host ~]#curl http://localhost:49153
HTTP server running on guest [root@host ~]#ssh auser@10.0.0.23
auser@10.0.0.23's password:Last login: Fri Aug 29 13:48:58 2014 from 192.168.0.1 [auser@10.0.0.23 ~]$
password
curl 192.168.0.2:49153
HTTP server running on guest