exec形式とshell形式の違い【Docker】

違いについて調べたら、あるサイトに

shell形式: コマンド 引数1 引数2..
Dockerデフォルトのシェル/bin/shでコマンド実行。つまり、/bin/sh -c “コマンド 引数1 引数2..”として実行される。

exec形式: [“コマンド”, “引数1”, “引数2”..]
コマンド直接(シェルを通さず)実行。コマンドや引数を囲むときシングルクォート’は使えない。

引用:https://docker.open-code.club/shell%E5%BD%A2%E5%BC%8F%E3%81%A8exec%E5%BD%A2%E5%BC%8F%E3%81%AE%E9%81%95%E3%81%84.html

みたいに書かれていた。

 

shell形式の方はわかったんだけど

exec形式の「コマンド直接(シェルを通さず)実行。」の意味が分からなかった。

 

え?直接実行ってどゆこと?シェルを通さずにコマンドって実行できるものなの?

って思ったんだけど、たぶんこれは

  • shell形式:
    →新しくシェルを立ち上げてそのシェルの中で実行する
  • exec形式:
    →新しくシェルを立ち上げてそのシェルの中でexecコマンドの引数として実行する
    (なので実行後はシェルのPIDがそのまま実行したコマンドのPIDとなる)

みたいな意味なんだろう。たぶん。

それしかないよね・・・?

 

もしかすると

  • exec形式:Dockerデーモンがカーネルに直接「このコマンド実行してよ」みたいに命令できる

みたいな意味なのかもだけど、

まぁDockerはexec形式を推奨しているらしいので、exec形式使っとけば良いよねって話なので、深くは考えないことにする。。

 

おわり

仮想環境
スポンサーリンク
この記事を書いた人
penpen

1991生まれ。WEBエンジニア。

技術スタック:TypeScript/Next.js/Express/Docker/AWS

フォローする
フォローする

コメント

タイトルとURLをコピーしました