Как Docker запускает ядро ​​Linux под хостом macOS?

Я установил Docker на свой macOS Sierra следующим образом. Примечание. У меня нет установленного 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
[email protected]:/# 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 удается запустить ядро ​​Linux в macOS? Я думал, что Docker, по крайней мере, потребует boot2docker или другого такого ядра Linux, чтобы он мог создать файловую систему Ubuntu с ее помощью. Но вышеупомянутый вывод, похоже, указывает на то, что это не так. Откуда появляется ядро ​​Linux?

Ответ 1

Ранняя версия Docker использовала VirtualBox для запуска виртуальной машины для Docker. С июня 2016 года способ запуска Docker на Mac и Windows стал намного проще, появился официальный блог о выпуске Docker для Mac/Windows, а также некоторое введение с веб-сайта docker mac:

Docker для Mac - это полноценная среда разработки, глубоко интегрированная с платформой MacOS Hypervisor, сетью и файловой системой.

И со структурой выглядит так:

enter image description here

Ответ 2

Хотя другие ответы о гипервизоре верны, они не отвечают на ваш конкретный вопрос.

Ответ таков: "Docker [Desktop] для Mac" действительно запускает виртуальную машину Linux с заменой на boot2docker - LinuxKit, разработанный и поддерживаемый Docker для создания легких дистрибутивов.

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

У uname, который вы видели, не было ключевого слова, но оно, кажется, включено сейчас, например. из Docker для 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] для Mac" and VirtualBox is replaced by Apple Hyperkit, и the "default VM" is a bit more tucked away.