У Docker-контейнеров есть собственное ядро ​​или нет?

У Docker-контейнеров есть собственное ядро ​​или нет?

Я вижу, что многие образы Docker в репозитории Docker созданы на базе Ubuntu.

Что это значит? Содержит ли каждый контейнер урезанную версию ядра Linux?

Контейнеры располагаются поверх собственных ядер? Но я думал, что контейнеры используют общее ядро ​​хоста (которым в некоторых случаях является boot2docker, пользовательский Tiny Core Linux build, а в других — что-то вроде CoreOS).

РЕДАКТИРОВАТЬ:Немного проясняю вопрос. Да, я знаю, что docker — это контейнер процесса, а не полноценная виртуальная машина. Но поскольку в официальном реестре docker hub и других ОС, таких как CentOS, есть контейнеры «Ubuntu», что значит запустить Ubuntu в контейнере?

Отвечать:Ах, меня только что осенило. Это процессы пользовательского пространства Ubuntu, содержащие apt-get и другие процессы конфигурации для конкретной сборки Ubuntu. Аналогично для CentOS. Docker — это не один процесс, а просто одна запись. Так что для этих дистрибутивов точкой входа является некий процесс init, который порождает другие процессы.

решение1

Docker использует ядро ​​хостовой ОС, внутри контейнера нет пользовательского или дополнительного ядра. Все контейнеры, которые работают на машине, совместно используют это "хостовое" ядро.

Википедия говоритhttp://en.wikipedia.org/wiki/Docker_(программное обеспечение)что

Docker использует функции изоляции ресурсов ядра Linux, такие как контрольные группы и пространства имен ядра, чтобы позволить независимым «контейнерам» работать в одном экземпляре Linux, избегая накладных расходов на запуск виртуальных машин.

cgroups, пространства имен и LXC — это функции ядра Linux, позволяющие изолировать группы процессов; по-прежнему существует одно ядро, один планировщик и один экземпляр менеджера памяти ядра.

Boot2docker и CoreOS — это всего лишь облегченные дистрибутивы Linux с некоторым ядром хоста; их можно использовать для загрузки контейнеров Docker.

http://boot2docker.io/

boot2docker — это легкий дистрибутив Linux на основе Tiny Core Linux, созданный специально для запуска контейнеров Docker. Он работает полностью из RAM, весит ~27 МБ и загружается за ~5 с (YMMV).

http://en.wikipedia.org/wiki/CoreOS

Один управляющий хост (экземпляр CoreOS) запускает несколько изолированных систем Linux (контейнеров), используя Docker в качестве дополнительного уровня абстракции и интерфейса[14] к базовым функциям виртуализации уровня операционной системы ядра Linux. ... Этот подход основан на функциональности cgroups ядра Linux, которая обеспечивает изоляцию пространства имен и возможности ограничивать, учитывать и изолировать использование ресурсов (ЦП, память, дисковый ввод-вывод и т. д.) для наборов процессов.

решение2

Почти во всех случаях ядро ​​хостовой ОС является общим. Для запуска другого ядра необходимо использовать виртуализацию. Это встречается редко и используется только при необходимости из-за снижения производительности.

«Контейнер Docker Engine включает в себя только приложение и его зависимости. Он работает как изолированный процесс в пользовательском пространстве на хостовой операционной системе, разделяя ядро ​​с другими контейнерами. Таким образом, он пользуется преимуществами изоляции и распределения ресурсов виртуальных машин, но при этом гораздо более портативен и эффективен».

Это может помочь объяснить, как это работает: введите описание изображения здесь

Источник:https://www.docker.com/whatisdocker/

решение3

Все контейнеры Docker используют ядро ​​хоста.

Это также означало бы, что некоторая несовместимость между ядром хоста и дистрибутивом контейнера может вызвать проблемы. Теоретически. Например, если контейнеризированное программное обеспечение захочет использовать какую-то функцию ядра, которая не была скомпилирована в ядро ​​хоста, то это не сработает.

Практика такова, что этого не происходит. Основной источник проблем контейнеров docker — это (часто необъяснимые) ограничения самого docker, а не какая-то несовместимость ядра хост-гость.

(P.S. Это потому, что практически все дистрибутивы Linux работают с любым ядром Linux.)

Связанный контент