我在我的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内核从何而来?
答案 0 :(得分:12)
早期版本的Docker使用VirtualBox为Docker运行虚拟机。自2016年6月以来,在Mac和Windows上运行Docker的方式变得更加简单,official release introduction blog for Docker on Mac/Windows还有docker mac website的一些介绍:
Docker for Mac是一个与MacOS Hypervisor框架,网络和文件系统深度集成的完整开发环境。
结构如下:
答案 1 :(得分:5)
虽然其他有关虚拟机管理程序的答案是正确的,但它们并未回答您的特定问题。
答案是“适用于Mac的Docker [Desktop]”确实运行Linux主机VM,并替换了boot2docker-由Docker开发和维护的 LinuxKit ,目的是进行轻量级发行。
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”在内部完成,而VirtualBox被Apple的Hyperkit取代,“ default VM”为多藏些东西。
答案 2 :(得分:3)
Docker正在使用Apple的Hypervisor框架:https://developer.apple.com/reference/hypervisor
有关Docker博客的更多信息,请参阅去年的https://blog.docker.com/2016/05/docker-unikernels-open-source/