Dockerの-itオプションの解説 ttyとinteractiveとは?

docker run又は、docker createのオプションで「-it」とすることで、コンテナをフォアグラウンドで実行状態とし、シェル接続した際にコマンドの入出力ができるようになる。

このオプションの「-it」はなにをしているか?

「-t」とは

「-t」は、ttyのこと。

ttyとは、標準入出力ができる接続先端末(デバイス)情報のこと。

例えば、サーバーへsshでリモート接続などしている時、

今、自分がなんの端末(デバイス)を使っているを表示するには、ttyコマンドをうつ。

$ tty
/dev/pts/0

出力された「/dev/pts/0」が自分の端末(デバイス)情報になる。

試しに、開いているターミナルはそのままにして、別ターミナルを開きssh接続してttyコマンドをうつ。

$ tty
/dev/pts/1

出力された「/dev/pts/1」となり、さっきとは別の端末(デバイス)情報が割り当てられていることが分かる。

また、wコマンドで接続している端末(デバイス)を一覧で確認できる。

はじめに立ち上げたターミナルから以下のコマンドから、以下のコマンドうってみる。

echo test > /dev/pts/1

別ターミナルを開いてssh接続したコンソールへtestと出力されたことが分かる。

$ test

docker runのオプションである「-t」はttyをコンテナに割り当てるオプション。

つまり、コンテナの標準出力をホスト側の標準出力につなげることをしている。

こうすることで、コンテナの標準出力をホスト側のコンソールで表示させることができる。

逆に「-t」オプションを付けないでコンテナを起動して操作しても、コンソール上になにも表示されてないことになる。

「-i」とは

「-i」はinteractiveのこと。

ホスト側の標準出力をコンテナの標準出力につなげることをする。

「-i」がない場合は、コンテナへ出力を送ることができなくなるので、コンテナ内で何も実行がされなくなる。

「-i」と「-t」を組みわせると

以上の説明より

「-i」と「-t」を組みわせて「-it」オプションつけることで、コンテナのコマンド入出力を可能となる。

つまり、コンテナ内での操作が自由にできるようになる。

「-it」がない場合は?

以下のような「-it」オプションがない場合、シェルがすぐに終了するためコンテナが停止する。

docker run --name ubuntu-test -d ubuntu

コメント