Dockerイメージを配布する手順

2020/03/28

はじめに

自作のスクリプトを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ファイルにまとめるだけで充分ですね。

プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化
amazon.co.jp
Dockerphp

ティール組織

アイマスクのすすめ