はじめに

DockerのインタラクティブなチュートリアルBuilding Container Imagesをやった。

FROMコマンド

イメージのベースを指定できる。Dockerfileは、必ずFROMから始まる。 FROMよりも先に記述できるARGコマンドは、FROMに使う引数を宣言するもの。 FROM <image-name>:<tag>

RUNコマンド

コマンドプロンプトと同じように、任意のコマンドを実行でき、その結果はイメージに保存される。 不要なファイルを残さないように、注意がする必要がある。

各命令は個別に実行されるため、各RUNはお互いに影響しあわない。

COPYコマンド

Dockerfileがあるディレクトリからコンテナのイメージにファイルをコピーできるコマンド。

COPY index.html /usr/share/nginx/html/index.html

EXPOSE

アプリケーションとして、どのポートを開くかをDockerfileに書くことができる。

EXPOSE 80 443
EXPOSE 7000-8000

CMD

CMDは、コンテナがローンチされたときに実行されるコマンドを定義できる。

# nginx -g daemon off;
CMD ["nginx", "-g", "daemon off;"]

おまけ

Dockerfile公式リファレンスによると,大文字はコマンド、小文字は引数という慣習があるとのこと。

パーサーディレクティブ

Dockerfileの解析ルールを指定できる方法が用意されている。 FROMコマンドよりも前に記述しなければならず、パーサーディレクティブの後ろに空白行を入れる、同じパーサーディレクティブを指定した場合は無効など細かいルールがある。

リファレンスの例では、Windowsのパス解析でエスケープする文字列を指定する話が書いてある。

# escape=`

FROM microsoft/nanoserver
COPY testfile.txt c:\
RUN dir c:\