【问题标题】:How does Docker run a Linux kernel under macOS host?Docker 如何在 macOS 主机下运行 Linux 内核?
【发布时间】:2017-09-09 01:05:15
【问题描述】:

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

【问题讨论】:

    标签: linux macos docker linux-kernel


    【解决方案1】:

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

    答案是“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没有太大区别,

    对于新的日子,它只是 provisioning is done internally 来自“Docker [Desktop] for Mac” and VirtualBox is replaced by Apple's Hyperkit, 和the "default VM" is a bit more tucked away

    【讨论】:

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

    早期版本的 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 框架、网络和文件系统深度集成的完整开发环境。

    结构如下:

    【讨论】:

      【解决方案3】:

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

      更多关于 Docker 博客的阅读信息,了解去年何时发布:https://blog.docker.com/2016/05/docker-unikernels-open-source/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-26
        • 1970-01-01
        • 2017-08-07
        • 2017-03-05
        • 1970-01-01
        相关资源
        最近更新 更多