【Docker】Dockerfileのインストラクションまとめ

はじめに

Dockerfileのインストラクション(命令)をまとめました。実際の使用例も載せています。

Dockerfileとは

Dockerfileとは、イメージを作成するまでの命令をまとめたファイルです。

書式は以下の通りです。

命令 引数

命令の部分をインストラクションと呼んだりします。インストラクションは大文字、小文字を区別しませんが、基本的に大文字で書かれます。

FROM

ビルドステージを初期化して、以降で使用するイメージを指定します。

FROM [--platform=<platform>] <image> [AS <name>]

FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]

FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]

DockerfileはFROMで始まる必要がありますが、ARGのみFROMの前に記述できます。

具体例

FROM busybox:latest
FROM python:3

RUN

イメージをビルドする時に実行するコマンドを定義します。

RUN <command>

RUN ["executable", "param1", "param2"]

具体例

FROM centos:7
RUN yum install -y httpd
RUN systemctl enable httpd

CMD

コンテナで実行するコマンドを指定します。

CMD ["executable","param1","param2"]

CMD command param1 param2

# ENTRYPOINTの指定が必要
CMD ["param1","param2"]

Dockerfile内で一度しか使えません。

具体例

FROM centos:7.5.1804
CMD ["cat", "/etc/redhat-release"]

LABEL

イメージにメタデータを付与します。

LABEL <key>=<value> <key>=<value> <key>=<value> ...

具体例

FROM centos:latest
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 <port> [<port>/<protocol>...]

デフォルトのプロトコルはtcpです。

具体例

FROM nginx:latest
EXPOSE 8080

ENV

環境変数を設定します。

ENV <key>=<value> ...

具体例

FROM centos:7.5.1804
ENV http_proxy http://myproxy.com:8080
ENV https_proxy https://myproxy.com:8080

ADD

ファイルやディレクトリをイメージにコピーします。

アーカイブファイルを指定した場合は展開されます。リモートファイルのURLも指定可能です。

ADD [--chown=<user>:<group>] <src>... <dest>
ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]

具体例

FROM centos:7.5.1804
RUN mkdir -p /root/dir_add
ADD test.tgz /root/dir_add/
ADD testdir /root/testdir

COPY

ファイルやディレクトリをイメージにコピーします。

アーカイブファイルを指定しても展開されず、そのままコピーされます。

COPY [--chown=<user>:<group>] <src>... <dest>
COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]

具体例

FROM centos:7.5.1804
RUN mkdir -p /root/dir_copy
COPY test.tgz /root/dir_copy/

ENTRYPOINT

コマンドを実行し、コンテナを実行ファイルのように扱えるようにします。

ENTRYPOINT ["executable", "param1", "param2"]

コンテナ実行時に引数を渡すことで、ENTRYPOINTの引数とすることができます。

具体例

FROM centos:7.5.1804
ENTRYPOINT ["uname", "-r"]

VOLUME

指定したディレクトリをボリュームとして扱います。

VOLUME ["/data"]

具体例

FROM centos:7.5.1804
VOLUME ["/myvol"]

USER

ユーザを指定します。

USER <user>[:<group>]

USER <UID>[:<GID>]

具体例

FROM centos:7.5.1804
RUN useradd -m hoge
USER hoge

WORKDIR

作業ディレクトリを指定します。

WORKDIR /path/to/workdir

具体例

FROM centos:7.5.1804
WORKDIR /tmp
ENTRYPOINT ["pwd"]

ARG

docker image build時に利用できる引数を設定します。

ARG <name>[=<default value>]

具体例

FROM centos:7.5.1804
ARG http_proxy
ARG https_proxy

ONBUILD

ONBUILDを定義したDockerfileで作成したイメージを利用するイメージのビルドで実行されます。ONBUILDを定義したイメージでは実行されません。

ONBUILD <INSTRUCTION>

具体例

FROM centos:7.5.1804
ONBUILD COPY default1.html /var/www/html/

STOPSIGNAL

コンテナ終了時に送信するシグナルを設定します。

STOPSIGNAL signal

具体例

FROM centos:7.5.1804
STOPSIGNAL SIGKILL

HEALTHCHECK

コンテナ内のアプリケーションの死活監視をします。

HEALTHCHECK [OPTIONS] CMD command

# ベースイメージのヘルスチェックを無効化
HEALTHCHECK NONE

具体例

FROM nginx:mainline-alpine
HEALTHCHECK --timeout=5s --interval=1s \
  CMD wget -q -O - http://localhost/index.html || exit 1

SHELL

シェルを変更します。

SHELL ["executable", "parameters"]

具体例

FROM centos:7.5.1804
RUN yum install -y zsh
SHELL ["/bin/zsh", "-c"]

参考

タイトルとURLをコピーしました