概要
勉強がてら、以下公式サイトの説明を少し読んだものです
Dockerfile reference
参考になれば幸いです
Dockerfile
Dockerfile
# ■ imageの説明
INSTRUCTION 説明
# ■ メンテナンスする人(メールアドレス)
# docker inspectで表示される
MAINTAINER メールアドレス
# ■ ラベル(imageのメタデータ)
# docker inspectで表示される
LABEL 説明項目=説明
# ■ 元にするイメージ
FROM イメージ名 [AS 別名]
# ■ このイメージのビルド時に実行する処理
# 子イメージで実行される処理
ONBUILD 処理(RUN等)
# ■ 引数
# docker build --build-arg 引数名=値 で使用
# ※ http_proxy等はデフォルトで引数として存在する
ARG 引数名
ARG 引数名=デフォルト値
# ■ 環境変数
ENV 環境変数名 設定値
ENV 環境変数名=設定値
ENV 環境変数名=${引数名}
# ■ 作業ディレクトリ
# RUNを実行するディレクトリ設定
WORKDIR ディレクトリ
# ■ ユーザ
# 実行するユーザ定義
USER ユーザ名
USER ユーザ名:グループ名
# ■ シェル
# 設定した後はRUN,CMDで先頭に自動で付与される
# = シェル変更等
SHELL ["実行ファイル(コマンド)", "パラメータ"]
SHELL ["/bin/sh", "-c"]
SHELL ["powershell", "/S", "/C"]
# ■ コマンド実行 パターン1
# 新しいレイヤーを追加する(インストール系はこれ)
RUN コマンド ${環境変数名}
# ■ コマンド実行 パターン2
# コンテナ起動時(run)のデフォルトコマンドを定義する
CMD コマンド ${環境変数}
CMD ["コマンド","パラメータ1","パラメータ2"]
CMD ["パラメータ"] # ENTRYPOINTのコマンドのパラメータ定義になる
# ■ コマンド実行 パターン3
# ★CMDよりも好ましいらしい(より明確になるから)
# https://www.ctl.io/developers/blog/post/dockerfile-entrypoint-vs-cmd/
ENTRYPOINT コマンド ${環境変数}
# ■ ボリューム
# マウントするコンテナのファイルパス(ホスト側や別コンテナ側?に入る)
VOLUME ファイルパス
VOLUME ["ファイルパス"]
VOLUME ファイルパス1 ファイルパス2
# ■ 開放するポート番号
EXPOSE ポート番号
EXPOSE ポート番号/プロトコル(tcp,udp等)
# ■ ファイルをコピーする パターン1
# オーナー変更も可能(Linuxのみ)
# ※1 ビルドコンテキストのファイルまたはURL
# またtarファイル等の圧縮ファイルは展開される
# ※2 コンテナのファイル
ADD コピー元※1 コピー先※2
ADD [--chown=ユーザ名:グループ] コピー元※1 コピー先※2
# ■ ファイルをコピーする パターン2
# オーナー変更も可能(Linuxのみ)
# ※3 ビルドコンテキストのファイル
# ※4 コンテナのファイル
# ★ADDよりこっちが良いらしい(より明確になるため)
# https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#add-or-copy
COPY コピー元※3 コピー先※4
COPY [--chown=ユーザ名:グループ] コピー元※1 コピー先※2
# ■ コンテナ停止するためのシグナル
STOPSIGNAL シグナル
# ■ ヘルスチェック(起動状況確認)
# ステータスの表示に使われる(docker inspect)
# 0:正常 1:異常 2:exitコードが使われていない
# ※5 --interval,--timeoutなど
# ※6 親イメージ引き継ぎ
HEALTHCHECK [オプション※5] CMD コマンド
HEALTHCHECK None # ※6