2016-05-26 3 views
62

CMDとRUNをいつ使うべきか混乱します。たとえば、bash/shellコマンド(ls -la)を実行するには、私はいつもCMDを使用しますか、またはRUNを使用する状況がありますか?この2つの同様のDockerfileディレクティブに関するベストプラクティスを理解しようとしています。ドッカーファイルでRUNとCMDの違いは何ですか?また、どちらを使用する必要がありますか?

答えて

109

RUNは、画像構築ステップです。RUNコマンドの後のコンテナの状態は、ドッカー画像にコミットされます。 Dockerfileには、イメージを構築するために互いに重なり合っている多くのRUNステップを持つことができます。

CMDは、組み込みイメージを起動するときにコンテナがデフォルトで実行するコマンドです。 Dockerfileは1つだけCMDを持つことができます。 docker run $image $other_commandでコンテナを開始するときは、CMDを無効にすることができます。

ENTRYPOINTCMDと密接に関連しており、コンテナが画像を開始する方法を変更することができます。

+0

お気に入りのスクリプトを実行します。あなたのコンテナで実行されているプロセスを起動します(例:nginxの場合)。https://github.com/nginxinc/docker-nginx/blob/2f25936db78f98a4fac8e9fd9ac8ff53f244d3ea/mainline/jessie/Dockerfileに行が表示されます。 'CMD [" nginx "、" -g "、" daemon off; "]' – user2915097

21

私はそれらの違いを理解することがthis記事が非常に役に立った:

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

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

1

注:RUNとCMDを混同しないでください。 RUNは実際にコマンドを実行し、 は結果をコミットします。 CMDはビルド時には何も実行しませんが、 はイメージのコマンドを指定します。ドッキングウィンドウのファイル参照から

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

7

RUN - 私たちは、ドッキングウィンドウのイメージを構築しながら、コマンドがトリガされます。

作成したドッカーイメージを起動している間にCMDコマンドがトリガします。

0

RUN - パイソンをインストールし、あなたのコンテナは現在、画像
CMDに焼き付けのpythonている - のpython hello.pyを、あなたはすべての `セットアップあなたにRUN`neededん

関連する問題