web-dev-qa-db-ja.com

dockerファイルにおけるRUNとCMDの違い

CMDRUNをいつ使うべきかについて混乱しています。たとえば、bash/Shellコマンド(つまりls -la)を実行するには、常にCMDを使用するのでしょうか、それともRUNを使用するのでしょうか。これら2つの似たDockerfileディレクティブに関するベストプラクティスを理解しようとしています。

180
TakeSoUp

RUN はイメージ構築ステップです。RUNコマンドの後のコンテナの状態はdockerイメージにコミットされます。 Dockerfileには、イメージを構築するために互いの上に重なる多くのRUNステップを含めることができます。

CMD は、ビルドされたイメージを起動したときにデフォルトでコンテナが実行するコマンドです。 DockerfileはCMDを1つだけ持つことができます。 docker run $image $other_commandを指定してコンテナーを起動すると、CMDをオーバーライドできます。

ENTRYPOINTCMDと密接に関係しており、コンテナがイメージを開始する方法を変更することができます。

287
Matt

RUN - dockerイメージを構築している間にコマンドがトリガーされます。

CMD - 作成したdockerイメージを起動している間にコマンドが起動します。

51
Nisal Edu

私はこれらの違いを理解するのに非常に役立つ この 記事を見つけました:

RUN - RUN命令を使用すると、アプリケーションとそれに必要なパッケージをインストールできます。現在の画像の上でコマンドを実行し、結果を確定することによって新しいレイヤーを作成します。多くの場合、Dockerfileに複数のRUN命令があります。

CMD - CMD命令を使用すると、デフォルトのコマンドを設定できます。デフォルトのコマンドは、コマンドを指定せずにcontainerを実行した場合にのみ実行されます。 Dockerコンテナーがコマンドで実行されている場合、デフォルトのコマンドは無視されます。 Dockerfileに複数のCMD命令がある場合、最後以外のすべて
CMD命令は無視されます。

50
fay

注:RUNとCMDを混同しないでください。 RUNは実際にコマンドを実行して結果をコミットします。 CMDはビルド時には何も実行しませんが、イメージに対して意図したコマンドを指定します。

dockerファイル参照から

https://docs.docker.com/engine/reference/builder/#cmd

5
Elsayed

RUN - Pythonをインストールすると、コンテナーにpythonがイメージに焼き付けられています。
CMD - python hello.py、お気に入りのスクリプトを実行してください。

2
Rohit Salecha

RUNコマンド:RUNコマンドは基本的に、イメージを構築しているときにデフォルトのコマンドを実行します。また、次のステップのために画像の変更を確定します。

新しいイメージを作成するプロセスを支援するために、複数のRUNコマンドがある場合があります。

CMDコマンド:CMDコマンドは新しいコンテナにデフォルトのコマンドを設定するだけです。これはビルド時には実行されません。

Dockerファイルに複数のCMDコマンドがある場合、最後のものを除いてそれらのすべてが無視されます。このコマンドは何も実行しないので、デフォルトのコマンドを設定するだけです。

2
Bharat Raj