Dockerfileについてやる
.dockerignoreファイル
Dockerfileをおいたディレクトリ内のファイルで、Dockerデーモンに送りたくないファイルを指定します。ワイルドカードが使えます。
基本構文について
基本書式
# コメント
<命令> <引数>
一文が長くなるとエスケープ文字()を使える
RUN apt-get update && apt-get install -y \
httpd \
nginx
形式
・shell形式
→シェル(bash)を通してコマンドが実行されるので、環境変数が使える
<命令> <引数>
・exec形式
→シェルを介さず、実行バイナリを直接実行する
<命令> ["<実行バイナリ>","<パラメータ1>","<パラメータ2>"]
shell形式の例
RUN apt-get update
exec形式の例
RUN ["/bin/sh","-c","apt-get update"]
命令一覧
FROM
→イメージ名を指定する。コメントを除くと一行目に記述。タグ名を省略すると「latest」になる。
FROM <イメージ名>[:<タグ名>]
RUN
→コンテナイメージを作成する際に実行したいコマンドを指定する。RUNが実行されるごとに中間イメージレイヤが1つずつ作られるので、通常「&&」でつなげる
例
RUN apt-get update && apt-get install -y httpd
CMD
→Dockerfileで作成されたコンテナが実行される際に、デフォルトでコンテナが実行する命令を指定する。
例
CMD /bin/bash
例を記載したdockerfileを実行する際、「docker run <イメージ名>」の後、/bin/bashを指定しなくてもbashが実行される。また、docker runコマンドで引数が指定されたら、その引数のみ実行される。
ENTRYPOINT
→CMDと同じくコンテナ生成後に実行する命令だが、docker run時に上書きされない。
LABEL
→イメージの動作に影響しない。コンテナの情報を記載できる。ここで指定した情報は「docker inspect イメージID」で確認できる。
バージョン情報と作者情報を付ける例
LABEL imageversion=latest \
maintainer=shobute
EXPOSE
→コンテナ稼働時にコンテナが使用するポートをdockerに通知する。外部からホストOS経由で接続できるようにするには、docker runコマンドで「-p」オプションを使う必要がある
例
EXPOSE 80
ENV
→環境変数指定。設定した値はdocker inspectコマンドで確認できる。
ENV <環境変数名> <値>
#もしくは
ENV <環境変数名>=<値> <環境変数名>=<値>...
COPY,ADD
→イメージのビルド時に、ホストOSにファイルをコンテナ内のディレクトリにコピーする。ADDは、COPYと違いtarやzipを展開しながらコピーする。コピー先は絶対パスか、「WORKDIR」で設定したディレクトリからの相対パスで指定可能。
コピー元のホストOSディレクトリは、ビルド時に指定したディレクトリ(Dockerfileがあるディレクトリ)がルート位置として扱われるため、ビルド時に指定したディレクトリより上の階層は参照できない
COPY <コピー元> <コピー先>
ADD <コピー元> <コピー先>
VOLUME
→指定したディレクトリをマウントポイントにして、ホストOSや他のコンテナからマウントできるようにする
VOLUME <dir>
WORKDIR
→DockerfileのRUN,CMD,ENTRYPOINT,COPY,ADDの命令を実行する際の作業ディレクトリ指定。
WORKDIR <dir>
ONBUILD
→ビルド時に最初に実行するコマンド指定。2つのDockerfileを用いて2段階でイメージを生成する際に使う。
ONBUILD <命令>
Discussion