docker runコマンドの-i -t -dオプションでできること
私が初めてdockerに出会ったとき、チュートリアルにこう書いてあったのを覚えています。
docker run -it
とかいうのがよくわからなくて、この
-it
のオプションは半分理解されているとして、この記事では3つのオプションを分析し、私のブログの目的である、できるだけわかりやすくすることを目指します。
I. オプションの説明
公式のドキュメントです。 https://docs.docker.com/engine/reference/commandline/run/
<テーブル オプション オプションの略語 説明 -デタッチ -d コンテナをバックグラウンドで実行し、コンテナIDを表示する。 -インタラクティブ -i 接続がない場合でも、標準入力を開き続けます。一般に、-t と一緒に使用します。 -tty -t 擬似ttyを割り当てます。通常、-iと一緒に使用します。
と"-"の違いについては、こちらをご覧ください。
Linuxのプログラミング。コマンドラインオプションの一重水平線 "-" と二重水平線 "-" の違いについて。
II. it オプション
を使用します。
ubuntu:19.10
という名前の新しいマシンを作成し、実行します。
ubuntu1910
という名前のコンテナ
-i
オプションは、コンテナ上で標準入力インターフェイスを開くよう docker に指示します。
-t
は、コンテナの標準入力インターフェースに接続する擬似 tty 端末を作成するよう docker に指示し、その後ユーザーはその端末を通じて文字を入力できるようになります。そのため
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
コマンドのデフォルトの
COMMAND
は
/bin/bash
ということで、ユーザーの入力は
bash shell
が実行されます。
この例では、端末に入力されるのは
exit 13
キャリッジリターンでコマンドを実行し、ターミナルを終了します。コマンドは
docker run
の呼び出し元でログが記録され、コンテナの
metadata
をコンテナ内で実行する。
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]# docker run --name ubuntu1910 -it ubuntu:19.10
root@cd83bc3b0d3b:/# exit 13
exit
を渡す。
docker ps -a
コマンドを使用すると、コンテナを表示するために
Exited (13) 35 seconds ago
は書き戻されたものです。
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]# docker ps -a | grep ubuntu1910
cd83bc3b0d3b ubuntu:19.10 "/bin/bash" 46 seconds ago Exited (13) 35 seconds ago ubuntu1910
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]#
のコンテナです。
metadata
を /var/lib/docker/containers/containerId/ ディレクトリに配置し、ここで
containerId-json.log
ファイルには、ライトバックのログが記録されます。
[root@iZ2ze6ogddtzz4dzyy00xwZ cd83bc3b0d3bb76fc9fc5df326235b3554c15455891d3b3aa0921fb16796322d]# cat cd83bc3b0d3bb76fc9fc5df326235b3554c15455891d3b3aa0921fb16796322d-json.log
{"log":"\u001b]0;root@cd83bc3b0d3b: /\u0007root@cd83bc3b0d3b:/# exit 13\r\n","stream":"stdout" ;,"time":"2020-02-08T14:35:22.509224333Z"}
{"log":"exit\r\n","stream":"stdout","time":"2020-02-08T14:35:22.509286061Z& quot;}
[root@iZ2ze6ogddtzz4dzyy00xwZ cd83bc3b0d3bb76fc9fc5df326235b3554c15455891d3b3aa0921fb16796322d]#
iii. -d オプション
を使用します。
docker run -d
という名前でバックエンドを作成し、起動します。
ubuntu1
という名前のコンテナ
docker ps
コマンドで実行状態のコンテナが見つからなかった場合は
docker ps -a
コマンドを使用して、実行されなくなったコンテナを検索します。
ubuntu1
のコンテナです。
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]# docker run -d --name ubuntu1 ubuntu:19.10
315cc38afc2f06abb5a2fbb075ebca16455367b2de685cf0c5ba828ab62dd5a1
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c04afe750081 mysql:5.7 "docker-entrypoint.s..." 26 hours ago Up 26 hours 0.0.0.0:3306->3306/tcp, 33060/tcp mysql5.7
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]# docker ps -a | grep ubuntu1
315cc38afc2f ubuntu:19.10 "/bin/bash" 35 seconds ago Exited (0) 34 seconds ago ubuntu1
cd83bc3b0d3b ubuntu:19.10 "/bin/bash" 18 minutes ago Exited (13) 18 minutes ago ubuntu1910
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]#
という疑念が生じるわけです。
-d
は、コンテナがバックグラウンドで実行されていることを確認しています。では、なぜ私のコンテナは実行を停止したのでしょうか?
前述したように
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
そこには
COMMAND
パラメータを指定すると、コンテナは起動し
COMMAND
コマンドで、デフォルトは
/bin/bash
. これは、コンテナがバックグラウンドで正常に起動された後に
COMMAND
コマンドを実行した後、直接シャットダウンします。
dockerのコマンドは、以下を参照してください。 https://blog.csdn.net/claram/article/details/103301942
この原理を理解した上で、問題の真相を知るために、新しいコードを
docker run -d
その後、長時間プロセスに常駐するコマンドを追加することで、コンテナがシャットダウンしないようにします。
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]# docker run -d --name ubuntu2 ubuntu:19.10 tail -f /dev/null
a0d3c58fc68b139f63355594dd91c2d047b84a3d56880418eedcd8fedb6307b6
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a0d3c58fc68b ubuntu:19.10 "tail -f /dev/null" 5 seconds ago Up 4 seconds ubuntu2
c04afe750081 mysql:5.7 "docker-entrypoint.s..." 26 hours ago Up 26 hours 0.0.0.0:3306->3306/tcp, 33060/tcp mysql5.7
[root@iZ2ze6ogddtzz4dzyy00xwZ ~]#
この記事の内容は、あくまでも私個人の意見です。もし間違っているところがあれば、遠慮なく批判や訂正をしてください、ありがとうございます。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例