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

Lon*_*ner 27 linux macos linux-kernel docker

我在我的macOS Sierra上安装了Docker,如下所示.注意我没有安装VirtualBox.

brew cask uninstall virtualbox
brew cask install docker
Run Code Online (Sandbox Code Playgroud)

我的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
Run Code Online (Sandbox Code Playgroud)

一旦我从启动板运行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
Run Code Online (Sandbox Code Playgroud)

我的问题是Docker如何设法在macOS中运行Linux内核?我认为Docker至少需要运行boot2docker或其他一些这样的Linux内核,这样它才能在它的帮助下创建Ubuntu的文件系统.但上述输出似乎表明情况并非如此.Linux内核从何而来?

sci*_*lot 21

尽管其他有关hypervisor的答案是正确的,但它们并未回答您的特定问题。

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

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

您所看到的uname中没有关键字,但是现在似乎已包含该关键字,例如从Mac的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
Run Code Online (Sandbox Code Playgroud)

您可以在发行页面上看到包含版本的链接。 https://docs.docker.com/docker-for-mac/release-notes/

所以它不是从这样不同的Docker Machine + VirtualBox + boot2docker

在新的日子里,它只是provisioning is done internally“ Docker [Desktop] for Mac” and VirtualBox is replaced by Apple's Hyperkitthe "default VM" is a bit more tucked away

  • 感谢您详尽的回答。 (2认同)
  • 很好的答案。我认为包括我自己在内的许多人都对“新时代”变体被宣传为“Mac 的本机 docker 支持”或“Win 的本机 docker 支持”这一事实感到困惑。我一直在想他们的意思是什么以及这怎么可能。好吧,这并不神奇,您仍然需要以某种方式模拟 Linux 内核,正如您所指出的,配置现在只是在内部完成并且对用户透明。 (2认同)

shi*_*zhz 20

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

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

并且结构看起来像:

在此输入图像描述


Dig*_*der 5

Docker正在使用Apple的Hypervisor框架:https//developer.apple.com/reference/hypervisor

有关Docker博客何时发布的更多信息,请参见:https//blog.docker.com/2016/05/docker-unikernels-open-source/