Запустить различные ОС Linux в контейнере Docker?

Мы пытались изучить Docker, и одна вещь, которая меня озадачивает, заключается в том, что в контейнере Docker на самом деле работает другой вкус Linux (к ОС хоста).

Если мы предположим, что на моем хосте Docker запущен RedHat, и я запускаю контейнер из образа Ubuntu, то это следующие истины?:

  • логически говоря, если размер изображения Ubuntu составляет около 550 МБ, то Docker Daemon фактически загрузит (из реестра изображений) 550 МБ ценность изображения Ubuntu для создания контейнера?
  • является экземпляром Ubuntu, запущенным в контейнере, по существу не отличающимся, чем если бы я загрузил и установил ту же версию вручную?

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

Ответ 1

Я думаю, что этот предыдущий пост может помочь вам понять это немного больше - Изоляция контейнера Docker, не заботится ли о базовой ОС Linux?.

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

Это позволяет понять, какая разница между Linux ОС и Linux Изображение. Вы не будете запускать полную Ubuntu OS внутри контейнера Docker, а образ Ubuntu.

В целях вашего вопроса подумайте: -

ОС= kernel + файловая система/библиотеки
Изображение= файловая система/библиотеки

Изображение Ubuntu, запущенное внутри вашего контейнера Docker, представляет собой только файловую систему/библиотеки Ubuntu (а не ядро, поставляемое с ОС Ubuntu). Изображение Ubuntu, запущенное внутри контейнера, будет использовать ядро ​​Redhat. Это отчасти объясняет эффективность, которую вы получаете от контейнера Docker, который использует ядро ​​(между прочим) основного хоста.