DockerコンテナにおけるコマンドとARGSのより近い観察
5432 ワード
今日、私たちは、私たちがコンテナを回転させるとき、私たちがどのように我々自身のプロセスを実行するためにDockerのコマンドとARGSを利用できるかを見ています.あなたが自分のイメージを作成することなく、ワンオフタスクを実行する場合は、これは有用かもしれない.
bashコマンドを実行したいと思います.何がこれを行う最も簡単な方法ですか?BusyBox、Ubuntu、Debianのような軽量画像を使用してコンテナを回転させるだけで?例えば、Debianをベースイメージとしましょう.
容器が止まった.コンテナはVMと比較してオペレーティングシステムをホストすることを意味しません.DebianまたはUbuntuのような基本的なコンテナを実行すると、
これらのファイル(Debianを除いて)の上で簡略化されたバージョンであることに注意してください.
これらのファイルの各々は、それらが何らかのコマンドを実行するように指示する下で
あなたはどのように1つのコンテナをスピンするときに実行するコマンドをカスタマイズする方法について疑問に思うだろう.コンテナを起動するときにコマンドを指定する1つの方法は、コンテナーを実行するときに実行可能ファイルの名前を発行することです.例えば、
私たちがDockerfileで
Test1.Dockerfile
あなたが
以下のようにコマンドを渡すことができます.
引数を指定する必要があるように、常に実行するために何かを指定できます.test 2という別のファイルを作りましょう.Dockerfile.
Test2.Dockerfile
クール!我々がパラメータで現在通過するならば、それはピックアップされて、我々が3号線で持っていた
あなたは、それが取り替えられるならば、CMDを持つ目的が何であるかについて考えています?デフォルト値を指定するときに便利です.
複数の引数を指定するとどうなりますか?
ここで何が幸せ?以下のコメントで私に知らせてください😊
この記事では、我々はコマンドとargsを通過するときに我々は、それらをスピンコンテナに見た.次の記事では、これをKubernetesポッド定義と比較し、どのようにして同じことができるかを把握します.
https://docs.docker.com/engine/reference/builder/
bashコマンドを実行したいと思います.何がこれを行う最も簡単な方法ですか?BusyBox、Ubuntu、Debianのような軽量画像を使用してコンテナを回転させるだけで?例えば、Debianをベースイメージとしましょう.
docker run debian echo hello
私たちは“こんにちは”を期待します.もしコンテナが動いているかどうかを確認したらどうなるでしょうか?容器が止まった.コンテナはVMと比較してオペレーティングシステムをホストすることを意味しません.DebianまたはUbuntuのような基本的なコンテナを実行すると、
docker run debian
しかし、nginxやredisのような場合には、シャットダウンしない限り実行し続けるか、何らかの理由でクラッシュします.どうやって起こるの?フードの下で
これらのファイル(Debianを除いて)の上で簡略化されたバージョンであることに注意してください.
これらのファイルの各々は、それらが何らかのコマンドを実行するように指示する下で
Dockerfile
命令を定義します.Debianの場合、それはちょうどシェルではなく、プロセスではないCMD
を発行します.あなたがすでに発見されるならば、両方のbash
とRedis
Dockerfileは、彼らのプロセスを回転させる定義を持ちます- Redis ServerとNGinxウェブサーバ.NGINX命令
あなたはどのように1つのコンテナをスピンするときに実行するコマンドをカスタマイズする方法について疑問に思うだろう.コンテナを起動するときにコマンドを指定する1つの方法は、コンテナーを実行するときに実行可能ファイルの名前を発行することです.例えば、
docker run debian echo hello-world
コンテナの状態をチェックすると、コンテナが停止したことがわかります.これを永久にできますか.そうです、コンテナが動作するとき、我々の望ましい状態を指定するためにDockerfileを持っている必要があります.私たちがDockerfileで
CMD
命令を使うと言います、Docker docsに従ってこれを指定する3つの方法があります.CMD
( exec形式、これは好ましい形式です) CMD ["executable","param1","param2"]
(entrypointへのデフォルトパラメタとして)CMD ["param1","param2"]
(貝殻)💡 There can only be one CMD instruction in a Dockerfile. If you list more than one CMD then only the last CMD will take effect.
Test1.Dockerfile
FROM debian
CMD ["printf", "Hello from Test1"]
どうやって印刷されるのかを動的に定義できますか?ここでの1つの警告は、私たちがコマンドラインARGSを通過するなら、私たちが設定した既存のCMD命令に追加されません.Dockerはコマンドとして実行しようとすると我々のCMD命令が置き換えられます.これをテストしましょう.あなたが
CMD command param1 param2
を実行するならば、それは「開始されたコンテナプロセスを引き起こします:exec :「こんにちは」:実行可能ファイルは$ path : unknownで見つかりません」エラーです.以下のようにコマンドを渡すことができます.
Docker run test 1 hello命令
引数を指定する必要があるように、常に実行するために何かを指定できます.test 2という別のファイルを作りましょう.Dockerfile.
Test2.Dockerfile
FROM debian
ENTRYPOINT ["printf", "Hello from %s\n"]
CMD ["Test2"]
docker run test1 printf hello
の命令は、私たちがそこで指定したものは、コンテナが起動したときに実行する必要があることをDockerに言います.言い換えると、引数を渡すなら、それらはentrypointとしてそこで指定したものに追加されます.docker build -t test -f Test2.Dockerfile .
これを実行するならば、我々は以下を得ます.クール!我々がパラメータで現在通過するならば、それはピックアップされて、我々が3号線で持っていた
ENTRYPOINT
命令に代わります;しかし、私たちがentrypointで定義したように、それはまだ出力を示します.これは、コンテナ当たり1つのCMD命令だけがあるので、意味をなす.あなたは、それが取り替えられるならば、CMDを持つ目的が何であるかについて考えています?デフォルト値を指定するときに便利です.
複数の引数を指定するとどうなりますか?
ここで何が幸せ?以下のコメントで私に知らせてください😊
結論
この記事では、我々はコマンドとargsを通過するときに我々は、それらをスピンコンテナに見た.次の記事では、これをKubernetesポッド定義と比較し、どのようにして同じことができるかを把握します.
参考文献
https://docs.docker.com/engine/reference/builder/
Reference
この問題について(DockerコンテナにおけるコマンドとARGSのより近い観察), 我々は、より多くの情報をここで見つけました https://dev.to/sahan/a-closer-look-at-commands-and-args-in-docker-containers-43n1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol