はじめに
自作のスクリプトをDockerコンテナにまとめて、配布する方法を試してみました。
今回はPHPのWebアプリを展開してみます。
サンプルなので、以下の通り必要最低限の構成にしています。
.
├── Dockerfile
├── Dockerfile_dev
└── src
└── index.php
開発中
開発時は以下のDockerfile
を使います。
docker build -t php7-apache -f Dockerfile_dev .
docker run -d -p 8080:80 -v $PWD/src:/var/www/html/ php7-apache
こんな感じでDockerfileから開発用のイメージを作って、コンテナを立ち上げます。
これで、src
配下のコードを書いていけば、localhost:8080
でアクセスすることが出来ます。
Note:
Dockerfileの4, 5行目のコマンドを追加しないと、localhost:8080
にアクセスしても 403 Forbidden となります。docker run
でボリュームをマウントした時に所有者が変わってしまうのが原因ということで、以下サイトを参考に追加をしました。
Docker: マウントしたVolumeにApacheが書き込めないとき
src
の中は今回の記事ではあまり重要じゃないので、みんな大好きなFizzBuzzです。
配布
src
の中にいろいろ書いてアプリが完成したら配布の準備をしていきます。
展開するイメージの元になるDockerfileはこちら。
開発時に使っていたDockerfileと違って、src
配下のファイルをコピーした状態でイメージを作ります。
docker build -t fizzbuzz .
docker save fizzbuzz -o fizzbuzz.tar
こんな感じで、fizzbuzz
という名前Dockerイメージを作り、そのイメージをtarファイルにまとめます。
あとはこのtarファイルをGoogleドライブなり、Dropboxなり、USBメモリなりで配ればOKです。
展開
docker load -i fizzbuzz.tar
docker run -d -p 8080:80 fizzbuzz
こんな感じで、tarファイルを受け取ったマシンでは、docker load
でtarファイルからDockerイメージを作ることができます。
あとは通常のDockerイメージと同様に、docker run
することで、localhost:8080
にアクセス出来るようになります。
まとめ
開発用と配布用でDockerイメージを作り直しているので、ひと手間増えてしまいますが、Dockerがインストールされているマシンならどこでも動くのは嬉しいですね。
今回のDockerイメージもmacOS Catalinaで作ったのですが、Windows10 でも問題なく展開することが出来ます。
Dockerイメージの中に実行環境も含んでいるので、tarファイルのサイズが大きくなるのはデメリットとして挙げられます。 今回のFizzBuzzも350MBぐらいあります。 (Dockerfileでベースにしているイメージをもっと軽量のものに変更すれば、もっと軽くなると思いますが…)
Dockerイメージの共有というと、Docker Hubにアップロードするか、自前でレジストリを建てるものかと思っていましたが、少人数に配るだけならtarファイルにまとめるだけで充分ですね。