В чем смысл использования ОС в контейнере докеров?
В репозитории докеров вы найдете образ докера Ubuntu: https://registry.hub.docker.com/_/ubuntu/ Я думал, что Docker больше на уровне «приложений».
В чем же тогда разница между докер-контейнером Ubuntu и виртуальной машиной Ubuntu? Если у вас есть вся ОС в контейнере докера, разве тогда не бессмысленно использовать Docker?
Спасибо
Вам не хватает базовых концепций Docker. Это совсем другое дело.
Первое, что вам нужно знать, это философия Докера: запускать один процесс изолирован в контейнере. Вы не будете запускать ОС в контейнере Docker, вы будете запускать процесс внутри контейнера с содержимым корневой файловой системы на основе выбранного вами дистрибутива Linux. Ubuntu - это выбор среди других.
Теперь вы должны задаться вопросом, как можно заставить процесс, выполняющийся внутри базового образа Linux, отличаться от дистрибутива Linux, с которым работает ваш хост. Для запуска ОС вам в основном необходимы:
Docker использует UnionFS для управления слоями дисковых блоков внутри контейнера, чтобы вы могли их складывать.
За кулисами он использует объединенное монтирование, которое позволяет одновременно монтировать несколько файловых систем, выглядя как целая виртуальная. Фактически он отбрасывает уровень базового образа в режиме чтения-записи поверх базовой корневой файловой системы в режиме только для чтения.
Здесь у вас есть куча дисковых блоков, расположенных слоями таким образом, что дистрибутив Linux, из которого исходит базовый образ, будет содержать ту же файловую систему, когда она установлена на реальном хосте, но на этот раз она находится внутри контейнера.
Последнее, чего сейчас не хватает, - это как запустить эту штуку изолированно?
Ответ: пространства имен. Я не буду вдаваться в подробности здесь, потому что это немного отклонится от исходного вопроса. Но что вам нужно знать, так это то, что, начиная с ядра 2.4.19, с годами появились пространства имен различных типов. В настоящее время доступны следующие пространства имен:
Пространства имен - это изолированные структуры внутри ядра, которые позволяют процессам работать в определенной среде. Например, пространство имен MNT будет ключевой функцией для запуска процесса в особенностях корневой файловой системы базового образа. NET будет еще одной ключевой особенностью контейнера, который будет иметь определенные сетевые интерфейсы для связи с мостом докеров и т. Д.
Итак, да, основная цель всего этого - запустить изолированное приложение, легко отправить его из вашей локальной среды в производственную среду с помощью контейнера, который называется контейнером.
Было бы неплохо прочитать документация докера прежде чем копаться дальше.