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 演算子の詳細な説明

推薦する

CSS3のtext-fill-colorプロパティの詳細な説明

text-fill-color とは何を意味しますか?文字通りの意味から言えば、「テキストの塗りつぶ...

Xshellの一般的な問題と関連する設定の詳細な説明

この記事では、Xshell と関連する構成の一般的な問題について説明します。この記事の構成は、主に ...

Idea で Tomcat のソースコードデバッグを開始し、デバッグのために Tomcat に入る方法

idea 開発ツールを使用してコードをデバッグする場合、Java Web プロジェクトで、Web コ...

Tomcat が応答データグラムを書き戻すタイミングの詳細な分析

疑問が生じるこの質問は、ファイルのダウンロードを記述しているときに発生しました。HttpServle...

nginxで複数のサーバーを簡単に構成する方法

1: nginx のインストール方法については詳しく説明しません。Baidu で検索してください。 ...

type=fileファイル変更フォームの名前が正常にエコーされない問題を解決

easyui フレームワークのコードは次のとおりです。 css: .ファイルボックス{ フロート:...

MySQL の null (IFNULL、COALESCE、NULLIF) に関する知識ポイントのまとめ

この記事では、MySQL の null (IFNULL、COALESCE、NULLIF) に関連する...

Ubuntu MySQL バージョンが 5.7 にアップグレードされました

数日前、図書館はサーバー(Ubuntu 14.04)にセキュリティ上の脆弱性があり、時間通りに修復さ...

jsのイベントループ機構の解析

序文ご存知のとおり、JavaScript は本質的にシングルスレッドですが、ブラウザは非同期リクエス...

Linux のハードリンクとソフトリンクの原理と使用法の分析

Linux システムには、ファイル共有を解決するために使用できるリンク ファイルと呼ばれる種類のファ...

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

この記事では、mysql5.7.23 の詳細なインストールプロセスを記録し、皆さんと共有します。 1...

ウェブページのエンコードにおける GB2312、GBK、UTF-8 の違い

まず、GB2312、GBK、UTF-8 はすべて文字エンコーディングであることを理解する必要がありま...

Vueは複数列レイアウトドラッグを実装します

この記事では、マルチカラムレイアウトドラッグを実装するためのVueの具体的なコードを参考までに共有し...

MySQL インストール プロンプト「詳細なヘルプについては NET HELPMSG 3534 と入力してください」の解決方法

今日、MySQL をインストールすると次のエラー メッセージが表示されます。 かなり長い時間ネットで...

Vue での mixin の応用について議論する

Mixin は、再利用可能な機能を Vue コンポーネント間で分散する非常に柔軟な方法を提供します。...