search
LoginSignup
3

More than 1 year has passed since last update.

posted at

updated at

DockerfileにおけるCMDとRUNの挙動

はじめに

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が実行されていることが分かった。

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
What you can do with signing up
3