Dockerfile を作ってみよう
今度は、Docker イメージの制作者になってみましょう。
DockerHub 等で自分の作成したイメージを配る側の立場になってみましょう。
前回と同じく、前提として、あなたは Ubuntu 14.04(192.168.0.1) を利用しているとします。
Dockerfile とは・・・簡単に言うと、OS のコマンドの羅列です。
今回は、nginx をインストールし、デフォルトの index.html をカスタマイズした Docker イメージを作成してみましょう。
次のような Dockerfile を作成してください(名前を Dockerfile にし、拡張子はつけない)
FROM ubuntu:14.04 RUN apt-get install -y nginx ADD index.html /usr/share/nginx/html/index.html CMD service nginx start && tail -F /var/log/nginx/access.log
簡単ですね。
Dockerfile には、まず FROM でどの OS を基にしてイメージを作るのかを書きます。
そして、RUN コマンドで、その OS に対するコマンドを列挙していきます。
(今回は RUN は一個だけですが・・・・)
ただただそれだけです。
前準備として、Ubuntu 14.04(192.168.0.1) に /root/index.html を作成してください。
このファイルは、Docker 実行時にカスタマイズされた index.html として表示される html になります。
ADD index.html /usr/share/nginx/html/index.html
というのは、Ubuntu 14.04(192.168.0.1) の index.html ファイル(後に Docker build を実行するカレントディレクトリに存在する index.html ファイル)を、仮想コンテナの /usr/share/nginx/html/index.html に配置する、という命令になります(仮想コンテナ側にファイルが存在する場合は上書きされます)
つまりこの Dockerfile は、nginx を apt-get でインストールした後、/usr/share/nginx/html/index.html をカスタマイズしたもので上書くものになります。
作成した Dockerfile を、/root/Dockerfile として作成したとします。
cd /root docker build -t mynginx .
と入力してみてください。これは、. ディレクトリ (/root) の Dockerfile を build し、mynginx と名前を付ける、という命令になります。
Dockerfile 内に記述したコマンドの実行結果がコンソールに表示され、最後に
Successfully built 122decba5d6b
などと表示されれば成功です。
docker images
と実行してみましょう。
# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE mynginx latest 122decba5d6b 3 minutes ago 211.1 MB
と表示されると思います。
実行は、前回の記事と同様です。
docker run -it -p 192.168.0.1:81:80 mynginx
とします。
CMD service nginx start && tail -F /var/log/nginx/access.log
の説明がまだでした。
これは、docker run 時に実行されるコマンドです。
docker build 時には実行されません(docker build 時に実行されるのは、RUN コマンドです)
上記 docker run 実行時に、CMD に指定されているコマンド(nginx の起動、およびアクセスログの tail)が実行される、という仕組みです。
この mynginx コンテナを配布することにより、誰もがすぐにあなたがカスタマイズした nginx を実行することが可能になります。
(DockerHub やプライベートリポジトリへの配布方法は、他の方の記事を参考にしてください。色々方法がありますが、一番普通なのは mynginx の名前を変えて push する方法です)
いかがでしたでしょうか?
Dockerfile の作成にはまだまだ沢山の機能があるのですが、まずはとっかかりとして単純な例として本記事を書いてみました。
より詳しい応用へのとっかかりになると幸いです。