はじめに
Dockerfileのインストラクション(命令)をまとめました。実際の使用例も載せています。
Dockerfileとは
Dockerfileとは、イメージを作成するまでの命令をまとめたファイルです。
書式は以下の通りです。
1命令 引数命令の部分をインストラクションと呼んだりします。インストラクションは大文字、小文字を区別しませんが、基本的に大文字で書かれます。
FROM
ビルドステージを初期化して、以降で使用するイメージを指定します。
1FROM [--platform=<platform>] <image> [AS <name>]
2
3FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
4
5FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]DockerfileはFROMで始まる必要がありますが、ARGのみFROMの前に記述できます。
具体例
1FROM busybox:latest1FROM python:3RUN
イメージをビルドする時に実行するコマンドを定義します。
1RUN <command>
2
3RUN ["executable", "param1", "param2"]具体例
1FROM centos:7
2RUN yum install -y httpd
3RUN systemctl enable httpdCMD
コンテナで実行するコマンドを指定します。
1CMD ["executable","param1","param2"]
2
3CMD command param1 param2
4
5# ENTRYPOINTの指定が必要
6CMD ["param1","param2"]Dockerfile内で一度しか使えません。
具体例
1FROM centos:7.5.1804
2CMD ["cat", "/etc/redhat-release"]LABEL
イメージにメタデータを付与します。
1LABEL <key>=<value> <key>=<value> <key>=<value> ...具体例
1FROM centos:latest
2LABEL "com.example.vendor"="ACME Incorporated"
3LABEL com.example.label-with-value="foo"
4LABEL version="1.0"
5LABEL description="This text illustrates \
6that label-values can span multiple lines."EXPOSE
コンテナ実行時にリッスンするポートを指定します。
1EXPOSE <port> [<port>/<protocol>...]デフォルトのプロトコルはtcpです。
具体例
1FROM nginx:latest
2EXPOSE 8080ENV
環境変数を設定します。
1ENV <key>=<value> ...具体例
1FROM centos:7.5.1804
2ENV http_proxy http://myproxy.com:8080
3ENV https_proxy https://myproxy.com:8080ADD
ファイルやディレクトリをイメージにコピーします。
アーカイブファイルを指定した場合は展開されます。リモートファイルのURLも指定可能です。
1ADD [--chown=<user>:<group>] <src>... <dest>
2ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]具体例
1FROM centos:7.5.1804
2RUN mkdir -p /root/dir_add
3ADD test.tgz /root/dir_add/
4ADD testdir /root/testdirCOPY
ファイルやディレクトリをイメージにコピーします。
アーカイブファイルを指定しても展開されず、そのままコピーされます。
1COPY [--chown=<user>:<group>] <src>... <dest>
2COPY [--chown=<user>:<group>] ["<src>",... "<dest>"]具体例
1FROM centos:7.5.1804
2RUN mkdir -p /root/dir_copy
3COPY test.tgz /root/dir_copy/ENTRYPOINT
コマンドを実行し、コンテナを実行ファイルのように扱えるようにします。
1ENTRYPOINT ["executable", "param1", "param2"]コンテナ実行時に引数を渡すことで、ENTRYPOINTの引数とすることができます。
具体例
1FROM centos:7.5.1804
2ENTRYPOINT ["uname", "-r"]VOLUME
指定したディレクトリをボリュームとして扱います。
1VOLUME ["/data"]具体例
1FROM centos:7.5.1804
2VOLUME ["/myvol"]USER
ユーザを指定します。
1USER <user>[:<group>]
2
3USER <UID>[:<GID>]具体例
1FROM centos:7.5.1804
2RUN useradd -m hoge
3USER hogeWORKDIR
作業ディレクトリを指定します。
1WORKDIR /path/to/workdir具体例
1FROM centos:7.5.1804
2WORKDIR /tmp
3ENTRYPOINT ["pwd"]ARG
docker image build時に利用できる引数を設定します。
1ARG <name>[=<default value>]具体例
1FROM centos:7.5.1804
2ARG http_proxy
3ARG https_proxyONBUILD
ONBUILDを定義したDockerfileで作成したイメージを利用するイメージのビルドで実行されます。ONBUILDを定義したイメージでは実行されません。
1ONBUILD <INSTRUCTION>具体例
1FROM centos:7.5.1804
2ONBUILD COPY default1.html /var/www/html/STOPSIGNAL
コンテナ終了時に送信するシグナルを設定します。
1STOPSIGNAL signal具体例
1FROM centos:7.5.1804
2STOPSIGNAL SIGKILLHEALTHCHECK
コンテナ内のアプリケーションの死活監視をします。
1HEALTHCHECK [OPTIONS] CMD command
2
3# ベースイメージのヘルスチェックを無効化
4HEALTHCHECK NONE具体例
1FROM nginx:mainline-alpine
2HEALTHCHECK \
3 CMD wget -q -O - http://localhost/index.html || exit 1SHELL
シェルを変更します。
1SHELL ["executable", "parameters"]具体例
1FROM centos:7.5.1804
2RUN yum install -y zsh
3SHELL ["/bin/zsh", "-c"]



