FROM
ベースイメージを指定する。
# nodeのバージョン20をベースイメージとして指定する
FROM node:20
ベースイメージはここで探すことができる。
MySQLの環境、nginxの環境など
作りたいものに応じて最適化されたイメージが配信されているので、それを使うと良い。
WORKDIR(作業ディレクトリの指定)
Dockerfileで定義した命令を実行するための作業ディレクトリを指定する命令。
もし指定したディレクトリが存在しなければ新たに作成する。
ADD(ファイル、ディレクトリの追加)
イメージに対して、ホストマシン上にあるファイルやディレクトリを追加するときに使う。
- URLを指定してリモートファイルを追加することもできる
- ファイルのダウンロードに認証が必要な場合はRUN命令でcurlやwgetを使う必要あり
- ホストマシンのファイルがtarアーカイブ、圧縮フォーマットのときはディレクトリとして展開される
- リモートURLからダウンロードしたものは展開されない
COPY(ファイルのコピー)
イメージに対して、ホストマシン上にあるファイルやディレクトリをコピーするときに使う。
ADDとCOPYの違い
単純にイメージ内にファイルを配置したいだけの時はCOPY命令を使えばよい。
- ADD:リモートファイルのダウンロードやアーカイブの解凍機能を持つ
- COPY:ホスト上のファイルをイメージにコピーする処理だけを行う
RUN(コマンドの実行)
インストールや初期セットアップを行うためのコマンド。
- アプリケーションのインストール(
npm install
など)するときに使う - 環境構築のためのコマンドを実行するときに使う
- バックスラッシュを使って行を分けることで読みやすくすることができる(これは通常のシェルと同じ)
# apt-getの更新をしてから、vimをインストールする
RUN apt-get update && \
apt-get install -y vim
RUNコマンドは1行にまとめるほうが完成したDockerイメージの容量を抑えることができるので
できる限り1行にまとめておくことをおすすめする。
CMD(デーモンの実行)
コンテナを立ち上げる時、「コンテナに対して何もオプションを設定しなければ自動的に実行するコマンド」を設定する。
言い換えると、優先度は「CMD指定<実行時引数」
例えば、ubuntuのイメージは
コンテナ起動時に何もオプションが指定されなければ /bin/bash
を起動するようになっている。

- 生成したコンテナ内でコマンドを実行するときに使う
- 例:インストールしたnginxをデーモンとしてコンテナ内で常時動作させる
- この命令は1つのみ記述可能(複数指定した場合は最後の命令のみが有効になる)
ENTRYPOINT(デーモンの実行)
コンテナ起動時に強制的に実行されるコマンド。
- 明示的に起動時の
--entrypoint
オプションを指定しない限り実行される - イメージからDockerコンテナを起動する
docker container run
を実行したときに実行される
上書きする方法はこちらで解説している。
📄【Docker Compose】コンテナ内部のデバッグする
CMDとENTRYPOINTの違い
docker container run
コマンド実行時の動作に違いがある。
- ENTRYPOINT:必ず実行
-
--entrypoint
オプション指定時を除く
-
- CMD:実行時の引数により上書き可能
デーモンの起動コマンドが固定であればあまり気にする必要はない。
ただし、起動コマンドを動的にコントロールしたい場合に
以下のように使われることが多い。
-
ENTRYPOINT
:実行したいコマンドを記述する -
CMD
:↑のデフォルト引数を定義する- CMDは上書き可能なので、実行コマンドの引数を柔軟に変えて実行できる