docker run コマンドの-iオプションについて調べてみた

docker初学者です。間違えなどありましたら、ご指摘いただければ幸いです。

docker runのiオプションについて少し調べてみたました。

# オプションiについて
docker公式では、以下のように書かれている。

> -i, --interactive             アタッチしていなくても STDIN を開き続ける

STDINは標準入力のことらしい。キーボードからの入力を可能にするとのこと。いつもお世話になっているわかりそうでわからないサイトには以下のように記載されていました。

>キーボードからの入力だよ
「特に指定をしていないときは、ここから入力されたデータが来るはず！」なデータの通り道だよ
https://wa3.i-3-i.info/word11636.html

つまり、アタッチしなくても標準入力を開き続けるということだと思うが、よくわからないので実際にコマンドを打ってみました。！！

# ubuntuイメージを使用して挙動を調べる
オプションありとなしのパターンで挙動を調べてみた！コンテナを起動してコンテナに入り、入力したコマンドが実行されるかを確認する。

##①まずdocker runで-iありで起動して挙動を確認

```
MacBook-Pro:~ $  docker run -it -d --name test ubuntu /bin/bash
d43a339cc5ca000850c680ddfe757２１３２１d58f8ff45145bb504f4be95c3854f234
MacBook-Pro:~ $ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
d43a339cc5ca        ubuntu              "/bin/bash"         4 seconds ago       Up 3 seconds                            test
```

STATUSの項目がUp 3 secondsになっていることから、上手くubuntuイメージの起動している。次にアタッチしてコンテナ内に入ってみる。

※コマンドについて
docker attach \<image-name> : このコマンドを実行することでコンテナ内に入ることができる。コンテナ内ですでに実行しているシェルを使ってコンテナとのやりとりをする。また、コンテナから抜ける時は、`exit`または`Ctl+p からのCtl+q`を実行する。
`exit`の場合は、コンテナから抜けるとともに、コンテナが停止してしまう。
`Ctl+p からのCtl+q`の場合は、コンテナから抜けるだけで、コンテナを停止することはない。
今回はexitを使用してコンテナから抜けることにする。

```
MacBook-Pro:~ $ docker attach test
root@d43a339cc5ca:/# ls
bin  boot  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@d43a339cc5ca:/# exit
MacBook-Pro:~ $  docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS                     PORTS               NAMES
d43a339cc5ca        ubuntu                "/bin/bash"              26 seconds ago      Exited (0) 7 seconds ago                       test
```

lsコマンドが実行されコンテナ内の情報が出力された。
exitを実行したため、コンテナ自体も停止しているのがわかる。

##②次に-iなしで起動してみる。
先ほどのコンテナは削除して、-iオプションなしで起動してみる。

```
MacBook-Pro:~ $ docker run -t -d --name test ubuntu /bin/bash
40b1356e365135c8c1df8514e64２３9156de4216927dec2bfdd0571972d11147d
MacBook-Pro:~ $ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
40b1356e3651        ubuntu              "/bin/bash"         9 seconds ago       Up 8 seconds                            test
```

問題なく起動している。次にattachして、コンテナ内で「ls」コマンドを入力して出力が返ってくるかを確認。

```
MacBook-Pro:~ $ docker attach test
root@40b1356e3651:/# ls

```

何も反応が返ってこない。
標準入力（キーバードからの入力情報など）ができない状態のため、出力はされていない。
コンテナから出る。

```
root@40b1356e3651:/# exit
MacBook-Pro:~ $ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
40b1356e3651        ubuntu              "/bin/bash"         3 minutes ago       Up 3 minutes                            test
```

exitで抜けたのに、コンテナが停止していない。。
STATUSの項目がUp 3 minutesとなっている。。
attachコマンドでコンテナ内に入った場合、exitコマンドを入力するとコンテナから抜けるかつコンテナが停止してしまうのだが、今回のケースではコンテナが起動したままであった。。

これは、-iオプションを付けない場合、標準入力ができないため、ubuntuイメージから起動したコンテナに対しては、exitコマンドを実行した情報すら伝わらないため、コンテナが終了せず起動しっぱなしのままであるのだと思う。

# 結論
以上-iオプションを付けずにコンテナを起動してしまうと、コマンドなどの入力情報がコンテナまで伝わらないということがわかった。（公式ドキュメント通りの挙動を確認できた！）