dockerシリーズのDockerfileにおけるcmdコマンドとentrypointコマンドの違い

1.cmd:

cmd が提供するのは、コンテナーのデフォルトの実行可能ファイルです。つまり、コンテナーの起動後、コマンドがデフォルトで実行されます。ポイントはこの「デフォルト」です。これは、docker run で実行コマンドが指定されていない場合、または dockerfile にエントリポイントがない場合、cmd で指定されたデフォルトの実行コマンドが実行に使用されることを意味します。同時に、コンテナ起動後に実際に実行するコマンドであるエントリポイントの意味も側面から説明します。

The CMD instruction has three forms:
 
CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)

使用法 1: 角括弧を使用したフォーム

角括弧で囲んだ形式。この時点では、コマンドはシェル端末環境にありません。シェルを実行したい場合は、角括弧内のパラメータにシェルを追加する必要があります。この使い方は C 言語の exec 関数に似ており、プロセスを実行したいことを意味します。非シェル メソッドを使用する場合は、上記の例を次のように変更する必要があります。

FROM centos
 
CMD ["/bin/bash", "-c", "echo 'hello cmd!'"]

注: 角括弧の形式を使用する場合、最初のパラメータはコマンドのフルパスである必要があります。さらに、dockerfile には最大でも 1 つの cmd しか含めることができません。複数ある場合は、最後のものだけが有効になります。公式サイトではこの方法を推奨しています。

もちろん、上記はすべて cmd の「デフォルト」動作を反映しています。実行時にコマンドを指定するかエントリポイントがある場合、cmd は上書きされます。まだ上の画像です。run コマンドが変更されました:
ここに画像の説明を挿入
ご覧のとおり、最後のコンテナーは cmd で定義されたコマンドではなく、run コマンドの後にコマンドを実行します。

使用法 2: シェル形式、つまり角括弧のない形式

その後、コマンドはデフォルトで「/bin/sh -c」の下で実行されます。たとえば、次の dockerfile です。

FROM centos
 
CMD echo "hello cmd!"

走る:
ここに画像の説明を挿入

注: 角括弧の形式を使用する場合、最初のパラメータはコマンドのフルパスである必要があります。さらに、dockerfile には最大でも 1 つの cmd しか含めることができません。複数ある場合は、最後のものだけが有効になります。

2、エントリーポイント:

エントリポイントはオーソドックスにコンテナ起動後の実行本体を定義するために使われますが、実はこれがコンテナの「エントリ」であることは名前からも分かります。
コマンドラインとシェルの 2 つの使用法があります。

ENTRYPOINT has two forms:
 
ENTRYPOINT ["executable", "param1", "param2"] (exec form, preferred)
ENTRYPOINT command param1 param2 (shell form)

最初のタイプ: コマンド ライン モード、つまり角かっこを使用する

cmd の角括弧形式と一致していますが、ここでは cmd とは異なるシェル環境で実行されるようです。run コマンドの後に何かがある場合、後者はすべてエントリポイントのパラメータとして使用されます。実行後に余分なものがなく、cmd には余分なものがある場合、cmd の内容全体がエントリポイントのパラメーターとして使用されます。これは cmd の 2 番目の使用法でもあります。これは、インターネット上でカバーされないと言われている入り口でもあります。もちろん、実行時に上書きしたい場合は、–entrypoint を使用するだけの方法があります。

例:
dockerfile は次のとおりです。

FROM centos
 
CMD ["p in cmd"]
ENTRYPOINT ["echo"]

run がパラメータを取らない場合:
ここに画像の説明を挿入
run がパラメータを取る場合:
ここに画像の説明を挿入
さらに、括弧形式のエントリポイントでは、コマンドはシェル環境で実行されます。それ以外の場合、ここでのエコーは実行できません。

2 番目のタイプ: シェルモード

このモードでは、run および cmd のパラメータをエントリポイントに渡すことはできません。公式サイトでは初回使用を推奨しています。
例えば:

FROM centos
 
CMD ["p in cmd"]
ENTRYPOINT echo

ここに画像の説明を挿入

3. 概要:

通常、Dockerコンテナ起動後のデフォルトの実行コマンドとして角かっこ形式のエントリポイントが使用され、その中に不変部分が配置されますが、コマンドパラメータなどの可変部分はcmd形式で提供することができます。デフォルトのバージョン。つまり、実行時にパラメータがありません。 の場合に使用されるデフォルトのパラメータ。デフォルトのパラメータを使用したい場合は、直接実行します。そうでない場合は、他のパラメータを使用したい場合は、実行時にパラメータを追加します。

おすすめ

転載: blog.csdn.net/u014212540/article/details/130621158