docker の run/cmd/entrypoint の違いの詳細な説明

docker の run/cmd/entrypoint の違いの詳細な説明

Dockerfile では、run、cmd、entrypoint はすべてコマンドを実行するために使用できます。主な用途は次のとおりです。

  • 実行コマンドはコマンドを実行し、通常はソフトウェアパッケージのインストールに使用される新しいイメージレイヤーを作成します。
  • cmdコマンドはコンテナの起動後に実行されるデフォルトのコマンドとそのパラメータを設定しますが、CMDで設定されたコマンドはdocker runコマンドの後のコマンドラインパラメータで置き換えることができます。
  • コンテナの起動時に実行されるエントリポイント構成コマンドは、 docker run実行時に他のコマンドが指定されている場合でも無視されずに実行されます。

Shell および Exec 形式でコマンドを実行する

run、cmd、entrypoint で実行するコマンドは、次の 2 つの形式で指定できます。

  • シェルの形式: .例えば: yum install -y wget
  • 実行形式: ["executable", "param1", "param2", …]。例: [“yum”、“install”、“-y”、“wget”]

どちらの形式も run では使用できますが、命令がより読みやすく理解しやすいため、cmd と entrypoint には exec 形式を使用することをお勧めします。

実行形式の落とし穴

dockerfile の内容は次のとおりです。

環境名モリス

エントリポイント ["echo", "$name"]

この書き方では、シェルではなく echo コマンドのみが実行されるため、$name のみが出力され、変数は置き換えられません。これは、シェルで echo を実行しているのではなく、単に echo を実行しているだけなので、変数は置き換えられないことを意味します。

実行可能なシェルに変更するには、次の形式に書き直す必要があります。

環境名モリス

エントリポイント ["/bin/bash", "-c", "echo $name"]

コマンドの実行

run コマンドは、アプリケーションやソフトウェア パッケージをインストールするときによく使用されます。 run は現在のイメージ上でコマンドを実行し、新しいイメージ レイヤーを作成します。 Dockerfile には複数の実行命令が含まれることがよくあります。次に例を示します。

yum update && yum install -y \ を実行します。  
 bzr \
 cvs \
 git \
 気まぐれな\
 転覆

yum update と yum install は 1 つの実行コマンドで実行されるため、毎回最新のパッケージがインストールされます。 yum install を別途実行した場合、yum update によって作成されたイメージ レイヤーが使用されますが、これはかなり前にキャッシュされている可能性があります。

cmd コマンド

cmd ディレクティブを使用すると、ユーザーはコンテナによって実行されるデフォルトのコマンドを指定できます。このコマンドは、コンテナが起動され、docker run で他のコマンドが指定されていない場合に実行されます。次に例を示します。

cmd echo "こんにちは世界"

コンテナdocker run -it [image]を実行すると、次の出力が出力されます。

こんにちは世界

ただし、その後にdocker run -it [image] echo hiなどのコマンドが追加されると、cmd は無視され、コマンドecho hiが実行されます。

こんにちは

cmd コマンドが複数ある場合は、最後の cmd コマンドのみが実行されます。

エントリポイントコマンド

エントリポイントの exec 形式は、コンテナの起動時に実行されるコマンドとそのパラメータを設定するために使用されます。追加のパラメータは、cmd コマンドまたはコマンドラインパラメータを通じて提供できます。エントリポイント内のパラメータは常に使用されます。これは cmd コマンドとは異なります。次に例を示します。

エントリポイント ["echo", "Hello"]

docker run -it [image]経由でコンテナを起動すると、出力は次のようになります。

こんにちは

docker run -it [image] morrisで起動した場合、出力は次のようになります。

こんにちはモリス

別の例を見てみましょう。Dockerfile は次のとおりです。

エントリポイント ["echo", "Hello"]
cmd ["世界"]

docker run -it [image]経由でコンテナを起動すると、出力は次のようになります。

こんにちは世界

docker run -it [image] morrisで起動すると、出力は次のようになります。

こんにちはモリス

エントリポイント内のパラメータは常に使用されますが、cmd の追加パラメータはコンテナの起動時に動的に置き換えられます。

同様に、エントリポイント コマンドが複数ある場合は、最後のエントリポイント コマンドのみが実行されます。

要約する

  • 実行コマンドを使用して、アプリケーションとソフトウェア パッケージをインストールし、イメージをビルドします。
  • Docker イメージの目的が、MySQL の実行など、アプリケーションまたはサービスを実行することである場合、最初に Exec 形式のエントリポイント命令を使用する必要があります。 cmd はエントリポイントの追加のデフォルト パラメータを提供でき、デフォルト パラメータは docker run コマンドラインで置き換えることができます。
  • コンテナのデフォルトの起動コマンドを設定する場合は、cmd コマンドを使用します。ユーザーは、docker run コマンドラインでこのデフォルト コマンドを置き換えることができます。

docker の run/cmd/entrypoint の違いについての記事はこれで終わりです。docker run/cmd/entrypoint に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • docker CMD/ENTRYPOINT が sh スクリプトを実行する問題の解決策: not found/run.sh:
  • docker run後に複数のコマンドを実行する
  • Ubuntu vps が docker をインストールし、エラーを報告します: unix:///var/run/docker.sock の Docker デーモンに接続できません。問題は解決しました
  • DockerはCMDまたはENTRYPOINTコマンドを使用して複数のサービスを同時に起動します
  • Dockerfile の CMD および ENTRYPOINT コマンドの詳細な説明

<<:  ビジュアルデザイナーの成長の3つの段階のまとめ

>>:  Python の MySQL データベース LIKE 演算子の詳細な説明

推薦する

JavaScript シングルスレッドと非同期の詳細

目次1. タスクキュー2. 混乱を招く問題を説明する1. setTimeout(f1,0)とは何です...

Apache Tika を使用してファイルが破損しているかどうかを検出する方法

Apache Tika は、さまざまな形式のファイルからファイル タイプを検出し、コンテンツを抽出す...

Linux プログラムの実行中に動的ライブラリをロードできない場合の解決策

Linux でダイナミック ライブラリをロードできません次のような異常事態が発生した場合./test...

Linux システムで PATH 環境変数を設定する方法 (3 つの方法)

1. Windows システムでは、JDK のインストールなど、多くのソフトウェアのインストールで...

MySQL の pid とソケットの詳細な説明

目次1. pidファイルの紹介2.ソケットファイルの紹介要約:ソケット ファイル: Unix ドメイ...

JS でクリップボード API を使用する方法

目次1. Document.execCommand() メソッド(1)コピー操作(2)貼り付け操作(...

DockerでGPUを使用するプロセスの詳細な説明

目次tf-gpu をダウンロード取得したtf-gpuイメージに基づいて独自のイメージを構築するイメー...

Tomcatアーキテクチャの原則をアーキテクチャ設計に分析する

目次1. 学習目標1.1. Tomcatアーキテクチャの設計と原則をマスターして社内スキルを向上させ...

MySQL 8.0.25 のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0.25の最新のダウンロードとインストールのチュートリアルは参考になります。具体的な...

Linux インストール MySQL チュートリアル (バイナリ配布)

このチュートリアルでは、LinuxにMySQLをインストールする詳細な手順を参考までに紹介します。具...

スクラッチ宝くじの例を実現する JavaScript キャンバス

この記事では、スクラッチ効果を実現するためのJavaScriptキャンバスの具体的なコードを参考まで...

JavaScriptでページスクロールアニメーションを実装する

目次レイアウトを作成するCSSスタイルを追加するJavaScript で要素を操作する対象要素を取得...

DockerでRabbitMqの共通クラスタとミラークラスタを構築する詳細な操作

目次1. RabbitMqの動作環境を構築する1.検索を通じてrabbitmqイメージを照会する2....

Vue+Elementバックグラウンド管理フレームワークの統合実践

目次Vue+ElementUI バックグラウンド管理フレームワークでは、ElementUI とは何で...

vue backtop コンポーネントを実装するための完全なコード

効果: コード: <テンプレート> <div class="back-t...