CMDとRUNをいつ使うべきか混乱します。たとえば、bash/shellコマンド(ls -la
)を実行するには、私はいつもCMDを使用しますか、またはRUNを使用する状況がありますか?この2つの同様のDockerfileディレクティブに関するベストプラクティスを理解しようとしています。ドッカーファイルでRUNとCMDの違いは何ですか?また、どちらを使用する必要がありますか?
答えて
RUNは、画像構築ステップです。RUN
コマンドの後のコンテナの状態は、ドッカー画像にコミットされます。 Dockerfileには、イメージを構築するために互いに重なり合っている多くのRUN
ステップを持つことができます。
CMDは、組み込みイメージを起動するときにコンテナがデフォルトで実行するコマンドです。 Dockerfileは1つだけCMD
を持つことができます。 docker run $image $other_command
でコンテナを開始するときは、CMD
を無効にすることができます。
ENTRYPOINTもCMD
と密接に関連しており、コンテナが画像を開始する方法を変更することができます。
私はそれらの違いを理解することがthis記事が非常に役に立った:
RUN - RUN命令は、あなたのアプリケーションとそれに必要なパッケージ をインストールすることができます。現在の画像 の上にあるコマンドを実行し、結果をコミットすることによって新しいレイヤーを作成します。多くの場合、Dockerfileには 複数のRUN命令があります。
CMD - CMD命令は、あなたがコマンドを指定せずにコンテナを実行したときにのみ が実行されるデフォルトのコマンドを設定することができます。 Dockerコンテナがコマンドで実行される場合、デフォルトのコマンドは になります。 Dockerfileに複数のCMD命令がある場合、最後のものを除くすべて
CMD命令は無視されます。
注:RUNとCMDを混同しないでください。 RUNは実際にコマンドを実行し、 は結果をコミットします。 CMDはビルド時には何も実行しませんが、 はイメージのコマンドを指定します。ドッキングウィンドウのファイル参照から
RUN - 私たちは、ドッキングウィンドウのイメージを構築しながら、コマンドがトリガされます。
作成したドッカーイメージを起動している間にCMDコマンドがトリガします。
RUN - パイソンをインストールし、あなたのコンテナは現在、画像
CMDに焼き付けのpythonている - のpython hello.pyを、あなたはすべての `セットアップあなたにRUN`neededん
- 1. git.cmdとgit.exeの違いは何ですか?どちらを使用する必要がありますか?
- 2. TypeScript []とArray <any>の違いは何ですか?また、どちらを使用する必要がありますか?
- 3. どちらのダブルクリックサービスを使用する必要がありますか?
- 4. ArithmeticExceptionまたはIllegalArgumentExceptionを使用する必要がありますが、相違点は何ですか?
- 5. NAntまたはMSBuild、どちらをsvn環境で使用する必要がありますか?
- 6. FrameLayoutの目的は何ですか?また、どのシナリオで使用する必要がありますか?
- 7. MyDbContext.Blogs.Add(ablog)またはMyDbContext.Add(ablog)のどちらを使用する必要がありますか?
- 8. FILTER_SANITIZEとFILTER VALIDATEの違いは何ですか?また、どちらを使用しますか?
- 9. componentDidMountまたはcomponentWillMountどちらかを使用する必要があります
- 10. いつbefore_filterとhelper_methodのどちらを使用する必要がありますか?
- 11. ライブチャット - 何を使用する必要がありますか?
- 12. ブラウザ用のActiveX。どちらがVB6または.NETを選択する必要がありますか?
- 13. Cocoaのデリゲートとは何ですか?なぜそれらを使用する必要がありますか?
- 14. 私たちが必要とするオフラインブートストラップファイルとはどちらですか?
- 15. ドッカーファイルはどこにありますか?
- 16. $ translateChangeSuccessと$ translateChangeStartの違いは何ですか?私の場合はどちらを使用しますか?
- 17. JAppletとAppletの違いは何ですか?また、どちらを使うべきですか?
- 18. どのレイアウトマネージャを使用する必要がありますか?
- 19. どのエラーを処理する必要がありますか?どちらが「致命的」ですか?
- 20. ng-controllerとdata-ng-controllerのどちらを使用する必要がありますか?
- 21. フォームファクトリとは何ですか、いつフォームファクトリを使用する必要がありますか?
- 22. Cloudantでセレクタまたはビューを使用する必要がありますか?
- 23. JavaScriptでwindow.navigateまたはdocument.locationを使用する必要がありますか?
- 24. ビューでディスパッチイベントまたはファイアイベントを使用する必要がありますか?
- 25. JComboBoxでEnumまたはStringを使用する必要がありますか?
- 26. asyncioでプロトコルまたはストリームを使用する必要がありますか?
- 27. GeoCoderをモデルまたはコントローラで使用する必要がありますか?
- 28. SparkでStringBuilderまたはStringBufferを使用する必要がありますか?
- 29. WFでステートマシンまたはシーケンスワークフローを使用する必要がありますか?
- 30. ハイパーリンクでHTTPまたはHTTPSを使用する必要がありますか?
お気に入りのスクリプトを実行します。あなたのコンテナで実行されているプロセスを起動します(例:nginxの場合)。https://github.com/nginxinc/docker-nginx/blob/2f25936db78f98a4fac8e9fd9ac8ff53f244d3ea/mainline/jessie/Dockerfileに行が表示されます。 'CMD [" nginx "、" -g "、" daemon off; "]' – user2915097