Какая связь между ОС узла докеров и ОС базового образа контейнера?

122

Я не уверен, что задаю правильный вопрос ... но пока я читал все докеры, которые я мог достать, я вижу, что могу установить Docker на Ubuntu 12.04 (например), а затем я могу установить контейнер Fedora или другая версия ubuntu? (есть пример, когда пользователь установил busybox в контейнер.)

И, конечно, могу ошибаться.

Но я ожидал, что между базовой системой и контейнером существует эфемерная связь.

переформулировано: какова связь между ОС хоста и ОС базового образа контейнера?

Ричард
источник

Ответы:

100

Как упоминает BraveNewCurrency, единственная связь между ОС хоста и контейнером - это ядро.

Это одно из основных различий между докерами и «обычными» виртуальными машинами, отсутствие накладных расходов, все происходит непосредственно в ядре хоста.

Вот почему вы можете запускать в контейнере только дистрибутив / двоичные файлы на основе Linux. Если вы хотите запустить что-то еще, это возможно, но вам понадобится какая-то виртуализация внутри контейнера (qemu, kvm и т. Д.)

Docker управляет образами, представляющими файловую систему. Вы можете установить любой дистрибутив Linux или просто поставить двоичные файлы.

Действительно, для удобства примера мы часто полагаемся на базовые образы, но вы также можете создать свой образ без каких-либо библиотек / двоичных файлов дистрибутива. Таким образом, у вас будет действительно крошечный, но функциональный контейнер.

Еще один момент относительно дистрибутивов: поскольку ядро ​​по-прежнему является ядром хоста, у вас не будет какого-либо конкретного модуля ядра / патчей, предоставляемых дистрибутивом.

creack
источник
2
так что, если ОС хоста - Ubuntu, то контейнер тоже будет Ubuntu?
Ричард
21
Ядро контейнера будет ядром от ubuntu, но не более того. Вы можете легко запускать centos, archlinux, debian или любой другой дистрибутив на основе Linux в качестве контейнеров.
скрип
37
Хотя эта информация может быть прямо / косвенно указана на веб-сайте докеров, я действительно считаю, что они должны сделать это немного яснее. Я прошел через домашнюю страницу, обзор, интерактивное руководство и большинство базовых заданий. Несмотря на это, я был сбит с толку этой темой и начинал предполагать, что для обеспечения максимальной производительности докера (на основе архитектурных диаграмм с сайта) потребуется соответствие ОС хоста и контейнера. Я новичок в концепции «ядра linux», поэтому мне это не сразу было очевидно. Понимание этого мгновенно делает докера еще и крутым.
ctrlplusb
2
Docker - довольно сложный проект, в котором используются расширенные функции. В какой-то момент мы предполагаем, что у пользователя есть некоторые знания, например, о разнице между операционной системой и дистрибутивом. Если вы думаете, что это добавит ценности, документация имеет открытый исходный код, и вы можете отправить запрос на перенос.
скрип
3
Это, по-видимому, указывает на то, что только части пользовательского пространства ОС (библиотеки, команды, приложения) могут быть контейнерными. Если приложению требуется другая версия ядра (например, 3.10 или 4.9), оно может не работать в контейнере. Это правильно?
Дэвид С.
23

Буквально единственное, что у них общего - это ядро. Весь их мир (файловая система) находится в контейнере докера.

BraveNewCurrency
источник
1

Есть еще одно соображение - даже если оба ядра одинаковы, проблема возникает, если ОС хоста не поддерживает Docker, например RHEL 6: https://access.redhat.com/solutions/1378023

Таким образом, вы не сможете развернуть контейнер на RHEL 6, даже если это образ Linux.

flow2k
источник