これらの意味が全く分からないため、より分かりやすい説明をしていただきたいです。
話は長くなりますし、後半は少し難しい内容になります。
-i (--interactive) オプションは、コンテナプロセスの標準入力を開いたままにします。
一般的に、コマンドラインからプログラムを起動すると、その標準入力ではキーボードからの入力を受け付け、その標準出力と標準エラー出力は端末に表示されます。ここで標準入力、標準出力というのはプログラムが入出力を行う際のデフォルトの入力元、出力先だと思ってください。
しかし、 Web サーバやデータベースサーバのようなデーモン型のプログラムを起動したときは、キーボードから入力を読み取ったり、端末に出力を表示されても困ります。デーモン型のプログラムはキーボードからの入力は受け取らず、出力はログファイルに吐きます。
前者をファオグラウンド起動、後者をバックグラウンド起動と呼ぶことにします。
docker はその設計思想からバックグラウンド起動がデフォルトとなっています。これに対して、-i オプションを指定するとフォアグラウンド起動になるわけです。
シェルなどのような会話的なプログラムを操作する場合はフォアグラウンド起動することになります。
-t (--tty) オプションは、コンテナプロセスに擬似TTYを割り当てます。
フォアグラウンドのプログラムの中には単純に文字列の入出力をするだけでなく、複雑なキーボード操作を受け付けるものがあります。たとえば、エディタなどは入力がバックスペースや矢印キーが場合は入力されたキーの内容を表示するのでなく、カーソルを移動したり、画面を書き換えたたりします。これを端末制御機能と呼びます。
端末制御機能を実現するためには標準入力、標準出力で表示可能な文字だけでなく、制御コードを処理する必要があります。しかし、相手が端末でなければ、それを実現することはできません。また、標準出力がファイルとかネットワークにつながっている場合は制御コードを送ってはいけない場合もあります。
そこで、端末制御機能を実現するプログラムは標準入力、標準出力が端末かどうかを調べてから端末制御機能を実現するのが常套手段となっています。これには ioctl という特殊なシステムコールが使われます。この ioctl に対して、「私は端末ですよー」と答えたり、プログラムと端末との入出力をそれとして仲介するのが擬似TTYという仕組みです。擬似TTYを挟むことで、プログラムは標準入出力を端末としてあつかい、 docker はそれをそのまま端末に受け渡すことができるわけです。
実は、この ioctl は Unix の大きな発明の一つなのです。ファイルディスクリプタという一種類のオブジェクトでファイル、ネットワーク、端末、プリンタなどのデバイスを同じように操作できる多様性(ポルモフィズム)を実装しています。オブジェクト指向が流行る前に多様性を発明していたのです。ファイルディスクリプタは相手がファイルか、ネットワークか、端末か、プリンタかに関係なく read, write, close というシステムコールが使えます。
docker を使える環境があれば、以下を試してください。
$ docker run -i --rm centos:7 /bin/tty
not a tty
$ docker run -it --rm centos:7 /bin/tty
/dev/pts/0
このtty というプログラムは単純に ioctl で標準入力が端末がどうかを調べるプログラムです。
-t オプションがなければ、「not a tty」と表示されて、端末ではないことを認識していることがわかります。
bash や vi を -t なしで起動すると極端に動作が変わり、ほとんど使い物になりません。
で、短く言うと、フォアグラウンドプログラムを起動するときは何も考えずに -it オプションを付けるのがいいでしょう。