質問: 「簡易オペレーティングシステムAPI」や「読み取り専用のOSイメージ」とはなんのことですか? おそらく「読み取り専用のOSイメージ」は の回答で頂いているDebianかAlpineのことだと思っているのですが合っていますか? 「簡易オペレーティングシステムAPI」というのは文字通り簡易的なAPIの集合であって、OSとしての名前はないのでしょうか? 「コンテナ内のOSの共有」という考え方が出てきていますが、コンテナのOSがもし仮に色々あるとするならば、どのコンテナとどのコンテナが共有しあっているのかはどうすればわかるのでしょうか?(もしかして単なる軽量化の仕組みで、安全性はホスト側のOSが担っているので知る必要はない?)
回答: 質問に答える前に、用語の整理をしておきたいと思います。回答に関係ある部分の説明の都合上厳密な説明でない部分があります。またOSの中でもLinuxに偏った説明になっています。 ここで言うOSというのはカーネル+ユーザランドです。 カーネルは、コンピュータの電源を入れた際にメモリ上に読み込まれて電源を落とすまで存在し続け、OSとしての基本的な作業をするプログラムです。(基本的な作業とは、プロセスやファイルシステムやネットワークなどのハードウェアを操作する機能を提供しその操作要求を受けて必要な処理をし続けます。その操作は後述するユーザランドのコマンドからシステムコールという手続きを踏むことによって行われます。) ユーザランドとは、ファイルシステム上に置かれたコマンド群です。コマンドにはOSを管理するコマンドや基本的な操作コマンド(具体例ではシェルやlsやgrepやテキストエディタなど)が含まれます。(ただ最近のディストリビューションでは基本コマンドに限らず便利なコマンドや応用アプリケーションがユーザランドに最初から入っているような傾向にあります。) ディストリビューションとは、OSとして必要なファイルをまとめてCDやDVDやUSBメモリなどのメディアに収めたものです。ディストリビューションはそれを行う団体ごとに様々なものが作られ、具体的にはRedHat,CentOS,Ubuntu,Debian,Alpineなどがあります。ディストリビューションによってユーザランドが大きく違っています。(カーネルもカスタマイズが異なってはいるのですがその差はあまり大きくありません) > > 「簡易オペレーティングシステムAPI」や「読み取り専用のOSイメージ」とはなんのことですか? > > おそらく「読み取り専用のOSイメージ」は の回答で頂いているDebianかAlpineのことだと思っているのですが合っていますか? > > > 「読み取り専用のOSイメージ」とはディストリビューションのメディアをファイル化したものです。 DockerコンテナではOSイメージの中のユーザランドが使われカーネルは使用されません。代わりにカーネルはホストOSのものが使用されます。(カーネルが違うものが使われて問題ないか?という疑問があるかもしれませんが、違いが問題になるようなケースはほとんどありません。) 「簡易オペレーティングシステムAPI」が具体的に何を指しているかちょっとわかりませんが、ユーザランドにあるカーネルと密接に関わる管理コマンドのようなものを指している気がします。 > > 「簡易オペレーティングシステムAPI」というのは文字通り簡易的なAPIの集合であって、OSとしての名前はないのでしょうか? > > > OSというより〇〇ディストリビューションのユーザランドに含まれる管理コマンドのようなものだと思います。 > > 「コンテナ内のOSの共有」という考え方が出てきていますが、コンテナのOSがもし仮に色々あるとするならば、どのコンテナとどのコンテナが共有しあっているのかはどうすればわかるのでしょうか?(もしかして単なる軽量化の仕組みで、安全性はホスト側のOSが担っているので知る必要はない?) > > > dockerではコンテナを作る際にどのOSイメージを使用するかを明示的に指定するので、同じOSイメージを指定すればOSイメージは共有され、違うOSイメージを指定すれば別のOSイメージが使われます。区別のためにはどのように作ったかを記録しておくのが楽ですが、不明だったとしても一応調べることは出来ます。