Приложения "Dockerized" часто создаются поверх контейнеров OS. Почему это не побеждает цель?

Возник вопрос, когда я давал презентацию о Докере своей команде, что я не знал, как ответить.

Многие из предварительно сконфигурированных контейнеров на Docker Hub для всего лишь одного примера контейнера jboss/wildfly построены поверх контейнеров для конкретной ОС (Ubuntu, CentOS, и т.д.). Некоторые из этих контейнеров на самом деле не являются контейнерами для этих ОС.

Тем не менее Docker main raison d'etre, претендует на славу, в основе его утверждения о том, что он лучше технологий Virtual Machine, является то, что он легче потому что он не должен быть построен поверх ОС. Но если это так, и большинство контейнеров включают ОС, это ли это не приведет к нарушению цели и недействительной претензии?

Так что же такое в этих изображениях Docker для ОС и как еще можно претендовать на более легкий вес? Это какая-то урезанная версия ОС?

Можно ли сделать изображение Docker, которое не построено поверх ОС? Что определяет, когда приложение получает ОС-службы из ОС, встроенной в контейнер, в отличие от получения услуг ОС от хоста?

Ответ 1

Изображение Docker (которое, скорее всего, будет содержать базовую систему из дистрибутива Linux), доступно только для чтения и дополнено несколькими уровнями, которые включены при записи в местоположение. Таким образом, вы можете поделиться базовым изображением и иметь "надстройки", если хотите. Это называется файловой системой union. Документация docker предоставляет дополнительную информацию здесь. Такой обмен позволяет Docker потреблять меньше ресурсов (в этом случае пространство fs) по сравнению с виртуальными машинами, где вам нужно будет установить новый дистрибутив для каждого.

Обратите внимание, что вам не нужно иметь полную установку Ubuntu (в общем, ядро ​​совместно используется с хост-системой), просто большинство из них обычно требуется приложениям, которые вы хотите запустить в своем контейнере. Вы можете легко найти удаленные изображения, опуская файлы, которые не нужны для запуска большинства приложений, при этом сохраняя свою жизнеспособность для многих целей (так что вы все равно можете поделиться базовым изображением, см. Выше).