Является ли контейнерный движок целым слоем между ОС и приложениями или просто другим приложением, работающим рядом с другими приложениями поверх ОС? - PullRequest
3 голосов
/ 05 июня 2019

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

Но правда в том, что приложения работают на операционной системе напрямую, и все они используют одно и то же ядро.Контейнерный движок не интерпретирует и не переводит какой-либо код для запуска в базовой ОС.

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

Правильно ли иллюстрировать контейнерный движок как целый слой между ОС и приложениями (рисунок 1) или его следует рассматривать как процесс, выполняющийся рядом с другими приложениями поверх ОС (рисунок 2)?

container architecture

Ответы [ 3 ]

1 голос
/ 05 июня 2019

Является ли механизм контейнера целым слоем между ОС и приложениями?

номер

Является ли контейнерный движок другим приложением, работающим рядом с другими приложениями поверх ОС?

Это определение лучше.

Скотт Маккарти имеет следующий слайд в одной из своих презентаций:

enter image description here

ссылка на этот слайд


Следует немного истории, которая может помочь с такими терминами, как docker daemon, containerd, runc, rkt ...

от: Документация CoreOS :

enter image description here

До Docker версии 1.11 демон Docker Engine загружал образы контейнеров, запускал процессы контейнеров, представлял удаленный API и действовал как демон сбора журналов, все в централизованном процессе , работающем от имени root .

Хотя такая централизованная архитектура удобна для развертывания, она не соответствует передовым методам разделения процессов и привилегий в Unix; кроме того, это затрудняет правильную интеграцию Docker с системами инициализации Linux, такими как upstart и systemd.

Начиная с версии 1.11, демон Docker больше не обрабатывает выполнение самих контейнеров. Вместо этого это теперь обрабатывается containerd . Точнее, демон Docker подготавливает образ как Open Container Image (OCI) и выполняет API-вызов для containerd для запуска OCI-пакета. Затем containerd запускает контейнер, используя runC

Дальнейшее чтение:

0 голосов
/ 06 июня 2019

Отвечая на ваш вопрос, образы контейнеров становятся контейнерами во время выполнения, а в случае контейнеров Docker - образы становятся контейнерами при запуске в Docker Engine.Но, как и на большинстве рисунков архитектуры контейнеров, механизм докера разворачивается на всем уровне между операционной системой хоста и конденерируемым приложением, потому что цель конденсированной архитектуры состоит в том, чтобы построить только конденсированное приложение поверх.

Таким образом, если вы не хотите развертывать только конденсированное приложение поверх операционной системы, вам не нужно использовать Docker Engine, а это означает, что Docker Engine не должен бытьиспользуется и развернут на всем уровне архитектуры докеров.При создании такой архитектуры вам решать, хотите ли вы выделить целый слой в механизме докера и предположить, что все каждое приложение в вашей среде будет контеризованным.

Мы можем определить Docker Engine как время выполнения (это клиент-серверное приложение) и инструментарий, который позволяет контейнерным приложениям, определенным в Dockerfile, запускаться поверх операционной системы хоста в изолированном разделе «контейнер».

Надеюсь, это поможет.

0 голосов
/ 05 июня 2019

Это зависит от того, как вы хотите на это смотреть.

В Docker контейнеры - это, в основном, дочерние процессы процессов Docker, и они дополнительно настроены так, чтобы их ограничивал misc.Функции ядра, такие как пространства имен или cgroups.

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

ИКто-то думает, что иллюзия считается отдельным слоем «Контейнерного движка» - это личное дело каждого.(ИМХО, это в основном проблема типа "vim vs Emacs".)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...