懇切丁寧! コピペでできるdocker入門 ~Dockerfileとdocker build編~


こんにちは。
開発チームのワイルド担当、まんだいです。

コピペでできるdockerシリーズその2として、docker buildコマンドに挑戦してみたいと思います。
docker buildができるようになると、

  • 既存のdockerイメージに修正を加えて新しいdockerイメージの作成ができます。
  • 似たようなdockerイメージを作る際、ベースになるdockerイメージがあると作業が楽になります。
  • VMイメージの場合、vagrantでpackageしたものを配布する事になりますが、dockerイメージの場合、Dockerfileとdockerコンテナ内に配置するファイルのみになります。

のような利点があります。

その1はこちら → 懇切丁寧! コピペでできるdocker入門

それでははりきって行きましょう。

 

docker buildを使って、dockerイメージをアレンジする

まず、ホストOSにビルドに使うファイルを格納するディレクトリを作成します。

vagrant@vagrant:~$ mkdir docker_php7
vagrant@vagrant:~$ cd docker_php7

かなり重要なことですが、Dockerfileを使って新たにdockerイメージを作成する場合、Dockerfileがあるディレクトリより上位のディレクトリへのアクセスはできません。
なので、COPYやADDに必要なファイルはDockerfileを設置したディレクトリ以下に配置する必要があります。

次に、dockerコンテナに入れるPHPファイルをホストOS上に作成します。

vagrant@vagrant:~/docker_php7$ echo "<?php phpinfo();" > info.php

続いてDockerfileを作成します。

vagrant@vagrant:~/docker_php7$ vi Dockerfile

# Dockerfileの中身
FROM php:7.0.2-apache                # docker build する際にベースとなるdockerイメージの指定(必須)
MAINTAINER Y.Mandai Beyond Inc.      # Dockerfileのメンテナ情報(オプション)
COPY info.php /var/www/html/         # info.php を コンテナ内の/var/www/html/ にコピー
EXPOSE 80                            # コンテナの80番ポートを外部(ホストOSから見えるよう)に開放

php:7.0-apacheのDockerfileを見てみると
コンテナ構築のコマンドは、PHPをコンテナ内でコンパイルする内容も含まれていて、かなり参考になります。
これを参考すると、マルチバイト関連の拡張モジュール入りのdockerイメージを作成できます。

では、docker buildでdockerイメージを作成してみます。

vagrant@vagrant:~/docker_php7$ docker build -t addinfo .
Sending build context to Docker daemon 3.072 kB
Step 1 : FROM php:7.0.2-apache
 ---> 797e8c22cdde
Step 2 : MAINTAINER Y.Mandai Beyond Inc.
 ---> Running in 49c22633979a
 ---> 8550f12577fd
Removing intermediate container 49c22633979a
Step 3 : COPY info.php /var/www/html/
 ---> 9e143b3f9df5
Removing intermediate container b70897d9000e
Step 4 : EXPOSE 80
 ---> Running in 31b54ea14f9f
 ---> 38445ad62923
Removing intermediate container 31b54ea14f9f

-tオプションでdockerイメージの名前を設定し、最後の「.」でDockerfileのパスを指定します。

docker build -t addinfo:hogehoge .

で、hogehogeというタグを付けて作成することもできます。

docker imagesコマンドで確認してみます。

vagrant@vagrant:~/docker_php7$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
addinfo             latest              31b54ea14f9f        About an hour ago   521 MB
php                 7.0.2-apache        797e8c22cdde        5 weeks ago         521 MB

新しいdockerイメージの作成ができましたので、こちらからdockerコンテナを作ってみたいと思います。

vagrant@vagrant:~/docker_php7$ docker run -d -p 8080:80 addinfo
862db6201b865a12415d4602219b03714605e0a89f2fa3076ae2161cf271d666

ホストOSの8080番ポートにコンテナの80番ポートをマッピングしたので、ホスト側からcurlでinfo.phpを実行できるか確認してみます。

vagrant@vagrant:~/docker_php7$ curl http://localhost:8080/info.php

phpinfo()の内容が表示できれば、今回の実験は成功です!

以上です。


この記事をかいた人

About the author