質問: DockerとVMと何が違うのかを調べていたところ、VMはOSを含めて動作する一方でDockerコンテナはホストOSのカーネルを使うことができ、それ以外に必要となるライブラリやアプリがDockerコンテナに含まれるという風に把握しました。 そこでタイトルのような疑問が浮かんできました。 OSのカーネルはOSごとに違うはずです、ホストOSがWindowsでDockerコンテナ上でLinuxを動かす場合に、Windowsのカーネルを使ってLinuxを動かすということになります。 WindowsのカーネルでLinuxを動かすことができるのでしょうか? これがどうしてこういうことができるのかをぐぐったのですが、答えが得られませんでした。 DockerコンテナがホストOSのカーネルを使える理由をおしえて下さい。 この質問の目的としては、DockerとVMの違いを把握することなので、 もしこの質問の意図がとんちんかんであれば、そちらを汲み取って案内いただけると助かります。 よろしくお願いします。
回答: 専門用語の詳細は忘れてしまっていますが、以下の通りだったと記憶しています。 Linux には、カーネルの部分をそのままに、実行されているプロセス環境・ファイルシステムをまるっといれかえて実行する、みたいな機能があったと記憶しています。それに、レイヤー型仮想ファイルシステムなど、いろいろなライブラリを付け加えていって完成するのが docker だったはずです。 docker はなので、 OS カーネルとして Linux の上でないと動作しません。 Linux のカーネル(とそれを含んだ OS) を動かすために、 docker for {Mac, Windows} は、 Linux VM を内部で動かしていたと記憶しています。 例えば、上記ページなどが、公式ドキュメントでこの周辺ツールがどう動作しているのか記述してあると思います。ネイティブインストーラでインストールした docker for Mac である場合には、おそらく、内部で virtualbox を動かしているのではないか、と思っています。