Docker
「RUM」と「CMD」はDockerfile 内でコマンドを実行するために使われますが、目的と実行タイミングが異なります。
RUN コマンド(重要)コンテナのビルド時に1回だけ実行される!
・イメージの作成時に実行
・「RUN」の結果はコンテナに保存
・イメージに含まれるためコンテナ起動時に実行されない(コンテナに適用された状態で起動)
次の「npm install」のように初回のみ(ビルド時)実行したいコマンドを指定します。
FROM node:18
WORKDIR /app
# 依存関係をインストール(イメージ作成時に実行)
RUN npm install
CMD コマンド(重要)コンテナの起動時に実行される!
・docker run でコンテナを起動するときに実行されるコマンドへ指定
・CMD はデフォルトの実行コマンドなので、docker run の引数で上書き可能
・1つの Dockerfile に CMD は1つしか指定できない(最後の CMD が有効)
次の「npm run dev」のようにコンテナの起動時に実行したいコマンドを指定します。
FROM node:18
WORKDIR /app
# 依存関係をインストール
RUN npm install
# コンテナ起動時に 「npm run dev」を実行
CMD ["npm", "run", "dev"]
| 比較項目 | RUN | CMD |
|---|---|---|
| 実行タイミング | イメージのビルド時 (1回だけ) | コンテナの起動時 (起動時毎回) |
| imageへの影響 | 影響あり (結果がimageに保存) | 影響なし (実行のみ) |
| 上書き可能か | 不可能 (上書きするには再ビルド) | 可能 ( docker run の引数で可能) |
こんにちは。RYUTOと申します。
医療職を経て、夢見るSE(システムエンジニア)として日々研鑽を積んでいます。
このサイトでは日々邁進する中で、その生きた証(ログ)を備忘録を残しています。
皆さんの参考になれたらうれしいです。