概要
dockerのコンテナ内に入る際に何とな-itオプションを使っていたが気になったので調べた!
学んだ事をまとめます。
-iについて
docker exec --help で調べる。
「STDINがアタッチされていないときでもSTDINをオープンにし続けるよ!」って事
STDINが分からないのでググってみた
wikipediaによると
「コンピュータプログラミングでは、標準ストリームは、実行開始時にコンピュータプログラムとその環境との間に事前に接続された入出力通信チャネルです。 3つの入出力(I / O)接続は、標準入力(stdin)、標準出力(stdout)、および標準エラー(stderr)と呼ばれます。」
つまりSTDINは"Standard input(標準入力)"の略である。
よって-iオプションをdocker exec "container id or container name" /bin/bashに加える事によって指定したコンテナ内で、標準入力を受け付けられるとゆうことか
docker exec -t "container id or container name" /bin/basを試してみる
試しに-iオプションなし、つまりdocker exec -t "container id or container name" /bin/bashでコンテナの中に入り色々なコマンドを試してみた。

結果、入力に対するレスポンスが何も得られなっかた。
よって-iオプションはコンテナ内で標準入力を受け付けられるようにするオプションであるとわかった。
-tについて
「pseudo-TTYを割り当てるよ。」
pseudo-TTYが分からないのでググってみた。
以下のサイトがわかりやすかった
https://unix.stackexchange.com/questions/21147/what-are-pseudo-terminals-pty-tty
上記サイトによるとpseudo-TTYは「ターミナルのような機能をもつデバイス」とゆう意味らしい
つまり-tオプションは「ターミナルのような機能をもつデバイスを割り当てるよ!」って事
docker exec -i "container id or container name" /bin/bashを試してみる
試しに-tオプションなし、つまりdocker exec -i "container id or container name" /bin/bashでコンテナの中に入り色々コマンド試してみた

結果は上記のように標準入力に対するレスポンスは帰ってくるが,docker exec -it "container id or container name" /bin/bashと入力すれば表示されるはずの"root@コンテナ ID:/フォルダ名#"が表示されなくなった。
なのでコードがかなり読みづらかった。
終わりに
最初は -it の意味が全く分からなかったが、今回の調査でこんなに重要な機能を提供してくれるのか!と感動した。
これからはオプションが出てきた際には曖昧にせずちゃんと調べようと思った。
この記事が誰かの参考になってくれれば幸いです。
何か間違った記述があった場合、指摘していただけたら嬉しいです。🙇♂️
