Help us understand the problem. What is going on with this article?

Dockerfileの構文はどんなものか(初心者)

概要

勉強がてら、以下公式サイトの説明を少し読んだものです
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
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away