53

Я вижу, что многие образы докеров в хранилище докеров создаются на основе Ubuntu.

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

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

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

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

2 ответа2

29

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

Википедия говорит, что http://en.wikipedia.org/wiki/Docker_(software) что

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

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

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

http://boot2docker.io/

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

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

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

10

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .