違いについて調べたら、あるサイトに
shell形式: コマンド 引数1 引数2..
Dockerデフォルトのシェル/bin/shでコマンド実行。つまり、/bin/sh -c “コマンド 引数1 引数2..”として実行される。exec形式: [“コマンド”, “引数1”, “引数2”..]
コマンド直接(シェルを通さず)実行。コマンドや引数を囲むときシングルクォート’は使えない。
みたいに書かれていた。
shell形式の方はわかったんだけど
exec形式の「コマンド直接(シェルを通さず)実行。」の意味が分からなかった。
え?直接実行ってどゆこと?シェルを通さずにコマンドって実行できるものなの?
って思ったんだけど、たぶんこれは
- shell形式:
→新しくシェルを立ち上げてそのシェルの中で実行する - exec形式:
→新しくシェルを立ち上げてそのシェルの中でexecコマンドの引数として実行する
(なので実行後はシェルのPIDがそのまま実行したコマンドのPIDとなる)
みたいな意味なんだろう。たぶん。
それしかないよね・・・?
もしかすると
- exec形式:Dockerデーモンがカーネルに直接「このコマンド実行してよ」みたいに命令できる
みたいな意味なのかもだけど、
まぁDockerはexec形式を推奨しているらしいので、exec形式使っとけば良いよねって話なので、深くは考えないことにする。。
おわり
コメント