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

标签 linux macos docker linux-kernel

我在我的 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内核从何而来?

最佳答案

虽然关于虚拟机管理程序的其他答案是正确的,但它们不能回答您的具体问题。

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

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取代, 并且“默认虚拟机”更隐蔽

关于linux - Docker 如何在 macOS 主机下运行 Linux 内核?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43383276/

相关文章:

linux -/proc/<pid>/stat 的“eip”字段似乎没有更新

java - 如何在 Centos 5 上编译 Java 代码?

objective-c - 检索 iTunes 轨道图稿图像时出现错误。有时它说这不是图像

java - 在 Java 中解码 Mail.app 电子邮件附件文件名

docker - 阻止到其中一个 docker 服务任务(容器)的流量

mysql - mysql 大页面选项的问题

linux - Perl 5.8 : possible to get any return code from backticks when SIGCHLD in use

c - 使用 Mach 信号量代替进程间匿名信号量

docker - 在 docker 镜像中编译时的 mtune 和 march

docker - PHP 无法在 docker 容器中写入