懇切丁寧! コピペでできる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()の内容が表示できれば、今回の実験は成功です!
以上です。