はじめに
Docker上でLaravelを使う度に打つコマンドでしたので調べてみました
execコマンド
execコマンドとは?
docker --helpをするとこう書いてあります
exec Run a command in a running container
「ある稼働中のコンテナにてあるコマンドを実行する」
execコマンドの使い方
% docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
さて問題のコマンドを上の文脈で翻訳すると
「◯◯◯コンテナにて△△△オプションの元bashコマンドを実行する」
itオプション
これはiオプションとtオプションに分けられます
iオプションとは
-i, --interactive Keep STDIN open even if not attached
STDINって何?
標準入力 【standard input】 stdin
標準入力とはIT用語辞典曰く
コンピュータの入力装置やOSが提供するデータ入力機能・経路などを指す
つまりかなり大まかに言えばキーボードのことです
(この記事読むともっと理解が深まります)
直訳するなら
「例えアタッチしてなくても標準入力は開き続けて」
attachという新しい概念が出てきましたが、
これはexecではない方法でコンテナに入るもう1つのコマンドになります
今回はexecを調べることが主眼ですので違いが気になる方はこちらのQiitaを参照してみてください
僕なりの言葉でiオプションをまとめると
「キーボード入力できるようにしといて」
tオプションとは
-t, --tty Allocate a pseudo-TTY
"pseudo"とは「偽りの」という意味です
pseudo-TTYって何?
以下はIBMのDocumentationから引用
Pseudoterminals (pseudo-TTYs) are used by users and applications to gain access to the shell
これは「シェルにアクセスする時にユーザーやアプリケーションが使うもの」という風に翻訳できます
例えばMacユーザーの場合はターミナルのことです
ということは--helpの参照が返してくれた文章は
「シェルにアクセスするための窓口を割り当てといて」みたいなイメージになります
ですので"-it"の2つのオプションをまとめると
「キーボードの入力によってシェルを操作できるようにして」
bashコマンド
このコマンドはbashを起動する時に使うもの
bashもコマンドなので、あれやこれやオプションをさらにつけることはできますが
ほとんどのケースでオプションは指定されないので今回は特に気にしなくてよいようです
まとめ
コンテナの中に入る時に使うコマンドが
% docker exec -it [コンテナ名] bash
でしたが、こちらは
コンテナに入る=コンテナでbashを起動しキーボードを元にシェルに命令を出せるように設定する
という意味になります