WindowsでのDockerのざっくりした使い方(4)Dockerfile編

スポンサーリンク
Docker
スポンサーリンク

 Dockerでのイメージ作成の設計図となるDockerfile。そのDockerfileのコマンドをまとめてみました。まとめてみてもいまいちよく分からないところは実際書いてみると、よく分かる。後半にはDockerfileの例を読み解いていきます。

WindowsでのDockerのざっくりした使い方
(1)導入編
(2)仕組み編
(3)コマンド編
(4)Dockerfile編

Dockerfileコマンド一覧

 前回のDockerコマンドに引き続き、今回はイメージ作成をするときに使うDockerfileのコマンドをまとめてみました。印刷用にPDF版もご参考ください。

「Dockerfileコマンドまとめ」(PDF)

Dockerfile命令説明
FROMイメージの土台となるイメージを指定。Docker推奨はAlpineイメージで、しっかり管理されていて、しかも軽量のLinuxディストリビューション。
LABELイメージ管理などのためのラベルを記載。
RUNシェル内で実施されるコマンドを設定。
RUN apt-getパッケージのインストールするために使う。長い行はバックスラッシュで複数行に分けて記載することが推奨されている。
apt-get updateとapt-get installは同じRUNの中で使わなければいけない。-yをつけるとインストール時の確認が省略できる。A && Bの記載は、Aが完了してからBを実施するということ。A | BはAの実行結果をBに受け渡すということを示す。
CMDイメージ内のソフトウエアを実行するために用いる。CMD [“実行モジュール”,”引数1″,”引数2″・・・]の形式をとる。Docker runの時に実施される。
EXPOSEコンテナ実行時のコンテナ側のネットワークポートを通知する。docker run -pフラグで公開用ポートと割り当てて、ポートを指定する。
ENV環境変数に対し、値を設定する。その値は途中で置き換え可能。
ENV <キー>=<値>
一度に複数の割り当てもできる。Docker inspectで確認できる。
変更するにはdocker run –env <キー>=<値>で行う。
ADDファイルを指定の場所に追加する。元ファイルの指定で、*や?などのワイルドカードが使用できる。元ファイルがローカルで、tar形式の圧縮ファイルの場合、自動でディレクトリに展開する点がCOPYと違う。
COPYファイルを指定の場所に追加する。元ファイルの指定で、*や?などのワイルドカードが使用できる。ADDより優先される。
ENTRYPOINTイメージ内のソフトウエアを実行するために用いる。
ENTRYPOINT [“実行ファイル”,”パラメータ1″,”パラメータ2″]
VOLUME指定した名前でマウントポイントを作成する。VOLUME [“/data”]の形式でダブル・クォート(”)で囲むJSON配列か、VOLUME /dataの形式のどちらかで記述する。ホスト側のディレクトリはマウントされない。
USER実行ユーザーやユーザーグループを指定する。
USER partick などと記述。
WORKDIR作業ディレクトリを指定する。
WORKDIR b などと記述。
ARGイメージをビルドするときに、–build-arg <変数>=<値>で渡す変数を定義しておく。デフォルト値を設定することもできる。
ONBUILD後からイメージのベースとして使われるときに実行する命令を記述する。
STOPSIGNALコンテナ終了時に送信される信号(符号なし整数)を設定する。
HEALTHCHECHコンテナ内部でコマンドを実行し、コンテナの正常性を確認する。
SHELLシェル形式のコマンドを入力できる。

Dockerfileを読み解く

 Dockerの公式ページからDockerfileのベストプラクティスを参考にDockerfikeを見ていきます。
参照元はDocker公式のサンプルページでPythonのFlaskでWebアプリを作成するコードのDockerfile部分です。

元ページ

# our base image
# ベースイメージとしてalpine:3.5を読み出します
FROM alpine:3.5

# Install python and pip
# "apk add"のコマンドを実行. python2.7とpipのライブラリをインストール
RUN apk add --update py2-pip

# install Python modules needed by the Python app
# ホストのディレクトリからrequirements.txtを仮想環境の/user/src/app/にコピー
# requirements.txtからパッケージを一括インストール
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r /usr/src/app/requirements.txt

# copy files required for the app to run
# ホストのディレクトリから実行ファイルapp.pyとindex.htmlをコピー
COPY app.py /usr/src/app/
COPY templates/index.html /usr/src/app/templates/

# tell the port number the container should expose
# 仮想環境側のポート5000番を接続ポートに指定
EXPOSE 5000

# run the application
# app.pyをpythonファイルとして実行
CMD ["python", "/usr/src/app/app.py"]

 ベースとして、仮想環境に構築したaplineにpythonやそのライブラリ、実行ファイルをインストールしていくイメージです。各Dockerfileのコマンドの意味が分かると自分でカスタマイズしたイメージが作れるようになります。

参考リンク

docker docs(公式ホームページ)
公式ドキュメントです。チュートリアルやサンプルコードもあります。

Docker ドキュメント日本語化プロジェクト
上記の公式ホームページの日本語化ページです。

【図解】Dockerの全体像を理解する(Qiita)
すごく分かりやすいDockerのまとめページです。

DockerでPython実行環境を作ってみる(Qiita)
DockerでのPython仮想環境構築を丁寧に説明してくれています。ワークショップの動画やコードも公開してくれているので、そのままやるだけでPythonの仮想環境は作れます。

DockerでPython公式イメージ + MeCab + NEologd辞書(Qiita)
Dockerを学んでみたいというモチベーションとなったページです。DockerでPython+MeCab+mecab-ipadic-NEologd辞書の環境構築の方法を教えてくれます。最終的なゴールはこのページのコードを全部理解して、自分でカスタマイズできるようになることです。

Docker
スポンサーリンク
鷹の目週末プログラマー

コメント