Docker如何在macOS主机下运行Linux内核?

80

我按照以下步骤在我的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内核从哪里来?

3个回答

89

虽然其他答案关于虚拟机监控器的内容是正确的,但它们没有回答你的具体问题。

答案是,“Docker [Desktop] for Mac”确实运行了一个Linux主机VM,并使用由Docker开发和维护的LinuxKit替换了boot2docker,以制作轻量级分发版。

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

您看到的uname命令没有包含关键字,但现在似乎已被包含了,例如从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 并没有太大区别, 对于新时代,只是通过“Docker [Desktop] for Mac”内部完成了“配置”, 并且用苹果的 Hyperkit 替换了 VirtualBox, 而“默认 VM”则更加隐蔽。

4
感谢你详尽的回答。 - eel ghEEz
9
很好的回答。我认为许多人,包括我自己,都对“新版本”变体被宣传为“Mac本机Docker支持”或“Win本机Docker支持”感到困惑。我一直在想他们到底是什么意思,这怎么可能实现。好吧,这里没有魔法,你仍然需要以某种方式模拟Linux内核,正如你指出的那样,现在预配只是在内部透明地完成了。 - Aleksandr Ivannikov

29
早期版本的Docker使用VirtualBox来运行Docker的虚拟机。自2016年6月起,在Mac和Windows上运行Docker的方式变得更加简单,有Docker在Mac/Windows上的官方发布介绍博客,还有docker mac网站上的一些介绍:

Docker for Mac是一个完整的开发环境,与MacOS Hypervisor框架、网络和文件系统深度集成。

并且结构看起来像:

enter image description here


12

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接