株式会社プライムストラクチャーのエンジニアのSayaです。
今回は、Dockerイメージを構築するためのファイルであるDockerfileについてまとめてみました。
Dockerfileとは
DockerがDockerイメージを自動的に構築するときに読み込む、テキスト形式のドキュメントファイルです。
Docker buildコマンドによってDockerfileが読み込まれ、 Dockerfile内の命令通りにイメージを自動構築します。
Dockerfileの書き方
Dockerfile内は以下のように記述します。
# コメント
命令 引数
- 一般的に命令は大文字で記述します。
- Dockerfile内の命令を順番に実行していくため、1行目の命令はイメージを指定するFROMにします。
- 記述が複数行に渡る場合はバックスラッシュ
\
で区切ります。
Dockerfileの主な命令リスト
以下の命令は主にイメージを作成するときに実行されます。
- FROM
ベースイメージの指定。
一般的にDockerHubからパブリックリポジトリのイメージを取得する。
Dockerfileの1行目に以下のように記述する。
FROM
FROM :
FROM @
-
MAINTAINER
作成者の名前の記述。
MAINTAINER
-
RUN
コマンドを実行する。
RUN
(シェル形式)
RUN ["実行バイナリ", "パラメータ1", "パラメータ2"]
(exec 形式) -
CMD
Dockerfileで作成されたコンテナを起動するときに実行されるコマンド。
CMDはイメージの作成時には実行されない。
CMD ["実行バイナリ", "パラメータ1", "パラメータ2"]
(exec 形式、推奨する形式)
CMD
(シェル形式) -
LABEL
イメージにメタデータを追加する。
バージョンや説明などを書く。
LABEL = = = ...
記述例)
LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."
-
EXPOSE
コンテナ実行時に開くポートの指定。
EXPOSE [...]
-
ENV
環境変数を変更できる。
ENV
ENV = ...
-
ADD
ソースまたは”Https://~”などのリモートからコピーペーストする。
圧縮ファイルも解凍する。
ADD ...
ADD ["", ... ""]
-
COPY
ソースからコピーペーストする。
COPY ...
COPY ["",... ""]
-
ENTRYPOINT
コンテナ起動時に実行するコマンドを定義する。
ENTRYPOINT ["実行可能なもの", "パラメータ1", "パラメータ2"] (exec 形式、推奨)
ENTRYPOINT コマンド パラメータ1 パラメータ2(シェル 形式)
-
VOLUME
指定した名前でマウントポイントを作成し、他のホストやコンテナから外部マウント可能なボリュームにする。
VOLUME ["/data"]
-
USER
OS内のどのユーザで[RUN, CMD, ENTRYPOINT]
を実行するか指定する。
USER daemon
-
WORKDIR
[RUN, CMD, ENTRYPOINT, ADD]
実行時の作業ディレクトリを指定する。
WORKDIR /path/to/workdir
-
ARG
構築時に作業者がdocker build
コマンドで使う変数、--build-arg =
フラグを定義する。
ARG [=]
まとめ
今回はDockerfileについてまとめていきました。
Dockerfileを用いることでどの環境でもDockerさえあれば同じイメージの構築が出来ることが分かりました。
今後もDockerを使いこなせるように色々試していきたいと思います。
参考文献
Dockerfile リファレンス — Docker-docs-ja 17.06.Beta ドキュメント
Dockerfile を書くベスト・プラクティス — Docker-docs-ja 17.06.Beta ドキュメント