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

参考までに、Javascriptを使用してメッセージボードの例(メッセージ削除あり)を実装します。具...

v-html レンダリング コンポーネントの問題

以前 HTML を解析したことがあるので、今日は Vue ドラッグ アンド ドロップを使用して、Ku...

NavicatがLinuxサーバー上のMySQLに接続できない問題を解決する

最初は悲しい気持ちになりました。スクリーンショットは以下の通りです。 少し苦労しましたが、解決策は次...

MySQLのインデックス

序文早速本題に入りましょう。これからお話しするのは次のマインドマップです。まずは印象をつかんでくださ...

Linux 構成で MySQL データベースへのリモート接続が失敗する問題の解決方法

今日は、Linux でリモート アクセス用に MySQL データベースを構成する方法について質問があ...

MySQLとRedisでセカンダリキャッシュを実装する方法の詳細な説明

Redis の紹介Redis は完全にオープンソースで無料であり、BSD プロトコルに準拠しており、...

MySQLのMERGEストレージエンジンの詳細な説明

MERGE ストレージ エンジンは、MyISAM テーブルのグループを論理ユニットとして扱い、同時に...

MySQL スロークエリログの基本的な使い方チュートリアル

スロークエリログ関連のパラメータMySQL スロー クエリ関連のパラメータの説明: slow_que...

Vue の関連ページへのマルチレベルジャンプ (ページドリルダウン) 機能の完全な例

背景プロジェクト開発プロセスでは、前のページから次のページにジャンプする必要に迫られることがよくあり...

MySQL InnoDB アーキテクチャの概要

目次導入1. MySQLデータベースの全体的なアーキテクチャSQL インターフェースパーサーオプティ...

JavaScript と JQuery フレームワークの基本チュートリアル

目次1. JS オブジェクトDOM –1、機能–2、テスト3. jQuery –1. 概要–2、使用...

Linux サーバー上の hosts ファイル構成の詳細な説明

Linux サーバーのホスト ファイルの構成hosts ファイルは、Linux システム内の IP ...

vsCodeはワンクリックでvueテンプレートを生成します

1. ショートカットCtrl + Shift + Pを使用してコンソールを呼び出します 2、「スニペ...

MySQLがウィンドウ関数で合計関数を実行するときに発生する可能性のあるバグ

MySql のウィンドウ関数を使用して統計データを収集する際に、小さな問題が見つかったので、それにつ...

Dockerイメージ構築原理の分析(Dockerをインストールしなくてもイメージを構築できる)

イメージの構築は、DevOps プロセスにおいて非常に重要なプロセスです。一般的に、イメージの構築と...