LoginSignup
6
3

More than 1 year has passed since last update.

DockerfileにおけるCMDとRUNの挙動

Last updated at Posted at 2021-11-24

はじめに

Dockerfileを書く際に、CMDとRUNの挙動について調べたので、そのことについてまとめていく。

CMD

  • CMD の主な目的は、コンテナ実行時のデフォルト(初期設定)を指定するためですと公式ドキュメントにあるように、CMDはコンテナが作成されるときに実行される。
  • ということは、イメージを作成するビルド時に実行されないと思われるので試してみた。

試してみた

  • Dockerfileの最後にCMDでWebサーバーを起動するコマンドを書いた際の挙動をみてみる。
  • 以下、Dockerfileのみ抜粋。
  • 他の構成ファイルはGithubを参照。
FROM node:12.22.1-alpine

WORKDIR /app

COPY ./src/package.json ./src/yarn.lock ./src/server.js ./

RUN yarn install

# コンテナ作成後にコマンド実行
CMD [ "node", "server.js" ]

1.Dockerfileをビルド

image.png

  • ビルドしただけなので、CMDのコマンドは実行されず、何も表示されない。 image.png

2.コンテナを起動

image.png

  • 画面が表示される。 image.png

結果

Webサーバーが起動していることから、コンテナ作成時にCMDで書いたコマンド[ "node", "server.js" ]が実行されたことが分かる。

RUN

  • RUN 命令は、現在のイメージよりも上にある新しいレイヤでコマンドを実行し、その結果を コミット(確定)commit しますと公式ドキュメントにあるように、RUNはビルド時に実行される。
  • ということは、ビルド時に実行されると思われるので試してみた。

試してみた

  • Dockerfileの最後にRUNでWebサーバーを起動するコマンドを書いた際の挙動をみてみる。
  • 以下、Dockerfileのみ抜粋。
  • 他の構成ファイルはGithubを参照。
    ※Dockerfileの最後は以下のように変更すること。
FROM node:12.22.1-alpine

WORKDIR /app

COPY ./src/package.json ./src/yarn.lock ./src/server.js ./

RUN yarn install

# ビルド後にコマンド実行
RUN node server.js

1.Dockerfileをビルド

image.png

  • node server.jsが実行されているのがみえる。

結果

イメージのビルド時にRUNで書いたコマンドnode server.jsが実行されていることが分かった。

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3