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

推薦する

image/x-png の ContentType について

これにより、png ファイルのアップロードも不可能になりました (後で情報を調べたところ、レジストリ...

Linux サーバーに Python3 をインストールする 2 つの方法

最初の方法Alibaba Cloud および Baidu Cloud サーバーが利用可能です。 ! ...

Ubuntu 20.04 LTSの詳細なインストール履歴

この記事では、USB ブート ディスクの作成とシステムのインストールについて説明します。システム構成...

Dockerに関するよくある質問

Docker はポートを IPv6 にのみマッピングし、IPv4 にはマッピングしません。 dock...

Linux サービス管理の 2 つの方法、service と systemctl の詳細な説明

1.サービスコマンドサービスコマンドは実際には/etc/init.dディレクトリに移動し、関連プログ...

Windows Server 2008R2 ファイル サーバーを Windows Server 2016 にアップグレードする

ユーザー組織には、ドメインに参加している 2 台の Windows Server 2008 R2 フ...

FTP、FTPS、SFTPの違いについて簡単に説明します

目次FTP、FTPS、SFTP の概要FTP FTPS FTPサーバーFTPソフトウェアのアクティブ...

docker compose を使用して FastDfs ファイル サーバーをインストールする詳細な例

ドッカーの作成 バージョン: '2' サービス: fastdfsトラッカー: ホスト...

CSSの固定位置属性の詳細な説明

モバイル アプリを開発する場合、Web サイトが特定の高さまでスクロールしたときにコンテンツの一部を...

Nginx で複数のドメイン名がドメインをまたいでアクセスできるようにマップを使用する方法

一般的なNginx構成ではクロスドメインが可能 サーバー{ 11111 を聞いてください。 serv...

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

MySQLは私がとても気に入っているデータベースです。今日はWindows 8システムでインストール...

MySQL 5.7.22 バイナリパッケージのインストールとインストール不要版 Windows 設定方法

次のコードは、MySQL 5.7.22 バイナリ パッケージのインストール方法を紹介しています。具体...

Dockerコンテナでは、イメージを簡素化してサイズを縮小する方法を詳しく説明しています

目次1.画像レイヤーの数を減らす1. 命令の統合2. 多段階ビルド3. スクワッシュ機能を有効にする...

VMware Workstation のインストール Linux システム

始める段階から初心者になるまで、Linux オペレーティング システムは不可欠です。最初のステップは...

Javascript 操作メカニズム イベントループ

目次1. 4つのコンセプト1. JavaScriptはシングルスレッドです2. タスクキュー3. 同...