web-dev-qa-db-ja.com

DockerはmacOSホストでLinuxカーネルをどのように実行しますか?

次のように、macOS SierraにDockerをインストールしました。注VirtualBoxをインストールしていません。

brew cask uninstall virtualbox
brew cask install docker

MacOSの詳細。

$ uname -a
Darwin m-C02QG7TRG8WN.local 16.5.0 Darwin Kernel Version 16.5.0: Fri Mar  3 16:52:33 PST 2017; root:xnu-3789.51.2~3/RELEASE_X86_64 x86_64

$ docker version
Client:
 Version:      17.03.1-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Tue Mar 28 00:40:02 2017
 OS/Arch:      darwin/AMD64

Server:
 Version:      17.03.1-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Fri Mar 24 00:00:50 2017
 OS/Arch:      linux/AMD64
 Experimental: true

ランチパッドからDockerを実行すると、Dockerコンテナーを実行できます。

$ docker run -it ubuntu
root@2351d4222a4e:/# uname -a
Linux 2351d4222a4e 4.9.13-moby #1 SMP Sat Mar 25 02:48:44 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

私の質問は、DockerがmacOS内でLinuxカーネルをどのように実行するかです。 Dockerは、boot2dockerまたはその他のそのようなLinuxカーネルの実行を少なくとも必要とし、それによってUbuntuのファイルシステムを作成できると考えました。しかし、上記の出力はそうではないことを示しているようです。それからLinuxカーネルはどこから来たのですか?

21
Lone Learner

初期バージョンのDockerはVirtualBoxを使用してDockerの仮想マシンを実行していました。 2016年6月以降、MacおよびWindowsでDockerを実行する方法がはるかに簡単になりました。 Mac/WindowsでのDockerの公式リリース紹介ブログ 、および docker mac website からの紹介もあります:

Docker for Macは、MacOS Hypervisorフレームワーク、ネットワーク、およびファイルシステムと緊密に統合された完全な開発環境です。

そして、構造は次のようになります。

enter image description here

16
shizhz

ハイパーバイザーに関する他の回答は正しいものの、特定の質問には答えません。

答えは、「Docker [デスクトップ] for Mac」はLinuxホストを実行しますVM boot2dockerの代わりに-LinuxKit軽量ディストリビューションを作成する目的でDockerによって開発および保守されています。

https://blog.docker.com/2017/04/introducing-linuxkit-container-os-toolkit/

あなたが見たウナメにはキーワードがありませんでしたが、今では含まれているようです、例えばDocker for Mac 18.03.1から:

Linux a8e079429a51 4.9.87-linuxkit-aufs #1 SMP Wed Mar 14 15:12:16 UTC 2018 x86_64 Linux

リリースページに含まれているバージョンへのリンクを確認できます。 https://docs.docker.com/docker-for-mac/release-notes/

したがって、古いDocker Machine + VirtualBox + boot2dockerの時代とそれほど違いはありません。プロビジョニングは「MacのDocker [デスクトップ]」で内部的に行われ、VirtualBoxはAppleのHyperkitに置き換えられ、「デフォルトVM」はもう少し隠れています。

12
scipilot

DockerはAppleのHypervisor Frameworkを使用しています: https://developer.Apple.com/reference/hypervisor

昨年発表されたDockerブログの詳細: https://blog.docker.com/2016/05/docker-unikernels-open-source/

4
Digicoder