こんにちは。まゆみです。
Dockerについての記事をシリーズで書いています
今回は第2回目になります
Dockerを使っていると必ず使うことになる『-it』フラッグについて今回の記事では解説していこうと思います
ではさっそく始めていきますね。
-it の正体とは?
docker exec <container id> redis-cli
と-itなしで実行しても、別にエラーを出るわけではない。
一体 -itってなんのためにつけるの?
-it をきちんと理解することで、色々応用をきかせて、いろんな場面で使えるようになると思います。
-it は二つのオプションが組み合わさってできています(-it と書くことも -i -t と書くこともできるという意味です)
-i
-t
になります
まず、これらがDockerのドキュメントでどのように定義されているか見てみます。
-i (--interactiveでも可)は、STDINを開いておく
-t はpseudo TTYを割り当てる
と書いています。
具体的に一つづつ解説していきますね
-i について
-i がドキュメントでどのように説明されているかは、上記のセクションでみましたが、では一体STDIN とは何でしょうか?
STDIN とはstandard input のことでして、日本語では『標準入力』と訳されています。
標準入力のデフォルトはキーボードからの入力です。
注意!
ただ、Docker Container はデフォルトでは、標準入力を受け取ることができません。
そこで、
あなたのターミナルと、現在実行中のContainer をつないであげる必要があるのです。
実際、Redisを使って、『-i』がどのような効果を持つのかを -itを付けた時と何もつけなかった時を比べてみます。
(redisはredis-cliというコマンドラインインターフェースを通じて対話しなければならないので exec redis-cliというコードになります)
『myvalueを5にセットする』という対話をあなたのターミナルを通してできるようになりました。
ただ、もし『-it』をなしでコードを実行してみると、結果は下記のようになります
あなたのターミナルを通して、redis-cliとつながることができません。
このように、『-i』を書くことによって、STDINをあなたのターミナルに対してオープンにすることができます
もしくは、あなたのターミナルと実行中のContainerを一方通行ではなく、双方向に可能なコミュニケーションを可能にさせると表現する事もできると思います
#-t は?
-t は綺麗にフォーマットするために書くと言われています
例えば、
docker exec -i <container id> redis-cli
と、『t』なしで実行してみましょう
-it で実行した時はオートコンプリート機能があったけど、-iでtがない時はその機能はありません。
#まとめ
今回の記事は少し短いですが、ここで終わりにさせていただきます。
次回も引き続きDocker についての記事を書いていきますね。