[解決済み] DockerfileのCMDとENTRYPOINTの違いは何ですか?
質問
Dockerfilesの中で、私には似たようなコマンドが2つあります。
CMD
と
ENTRYPOINT
. しかし、この2つの間には(微妙な)違いがあるのでしょう。そうでなければ、まったく同じものに対して2つのコマンドを用意する意味がありません。
ドキュメントでは
CMD
CMDの主な目的は、実行中のコンテナにデフォルトを提供することです。
と
ENTRYPOINT
:
ENTRYPOINTは、実行ファイルとして実行可能なコンテナを設定するのに役立ちます。
では、この2つのコマンドは何が違うのでしょうか?
解決方法は?
Dockerは、デフォルトのエントリーポイントとして
/bin/sh -c
が、デフォルトのコマンドはありません。
このようにdockerを実行すると
docker run -i -t ubuntu bash
は、エントリーポイントがデフォルトの
/bin/sh -c
の場合、画像は
ubuntu
で、コマンドは
bash
.
コマンドはエントリーポイント経由で実行されます。つまり、実際に実行されるのは
/bin/sh -c bash
. これによってDockerは
RUN
シェルのパーサーに依存することで、素早く
その後、これをカスタマイズできるようにしたいという要望があり、そのため
ENTRYPOINT
と
--entrypoint
が紹介されました。
画像名以降の全て。
ubuntu
はコマンドで、エントリーポイントに渡されます。を使用する場合は
CMD
を実行しているのと全く同じです。
docker run -i -t ubuntu <cmd>
エントリーポイントのパラメータは
<cmd>
.
また、次のコマンドを入力しても、同じ結果になります。
docker run -i -t ubuntu
: コンテナ内で bash シェルが起動します。
ubuntu Dockerfile
デフォルトの
CMD
が指定されます。
CMD ["bash"]
.
すべてがエントリポイントに渡されるため、画像から非常に優れた動作をさせることができます。Jiriの例はよくできていて、画像を"binary"として使用する方法を示しています。この例では、画像をバイナリとして使用する方法を示しています。
["/bin/cat"]
をエントリーポイントとして使用し
docker run img /etc/passwd
は、それを得ることができます。
/etc/passwd
はコマンドで、エントリポイントに渡されるため、最終的な実行は単純に
/bin/cat /etc/passwd
.
もう一つの例は、任意のcliをエントリポイントにすることである。たとえば、redis イメージがある場合、代わりに
docker run redisimg redis -H something -u toto get key
を使えば、単純に
ENTRYPOINT ["redis", "-H", "something", "-u", "toto"]
というように実行しても、同じ結果になります。
docker run redisimg get key
.
関連
-
[解決済み] ansibleでdocker-composeのコマンドを実行するには?
-
[解決済み] Dockerの初期化に失敗しました
-
[解決済み] 複数のディレクトリを1つのコマンドでコピーする
-
minttyを使用している場合は、コマンドの前に'winpty'を付けてみてください。
-
[解決済み] Dockerfileの'COPY'と'ADD'コマンドの違いは何ですか?
-
[解決済み] Dockerの「expose」と「publish」の違いは何ですか?
-
[解決済み] DockerfileのRUNとCMDの違いについて
-
[解決済み] Docker ComposeとKubernetesの違いとは?
-
[解決済み] docker_compose.yml の links と depends_on の違いについて
-
[解決済み】Dockerイメージとコンテナの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】FrontEnd DockerFIle.v0との解決に失敗しました。
-
[解決済み] 接続するには、Dockerクライアントを昇格して実行する必要があります。
-
[解決済み] コード 0 で終了 docker
-
docker共通コマンドのまとめ
-
docker: デーモンからのエラー応答。コンテナ名 "/mysql" は既にコンテナによって使用されています。
-
接続中にDocker useエラーが発生しました。このエラーは、Docker デーモンが実行されていないことを示す可能性があります。
-
docker-composeの使い方ガイド
-
Docker mount host directory Docker access Permission denied 解決策
-
ドッカーコンテナの状態がExitと表示される(1)
-
[解決済み] Dockerfileの'COPY'と'ADD'コマンドの違いは何ですか?