Разница между chroot и Docker

15

Я не понимаю разницу между докером и chroot. Да, это приятно с точки зрения упаковки реестра. Но почему-то я чувствую, что это просто гул с дополнительными прибамбасами.

Я знаю, что что-то упустил. Было бы здорово узнать, чем они отличаются, и необходимость докера, если chroot может сделать что-то подобное.

Я не мог найти этот Chroot Vs Docker достаточно ясным либо.

Випин Менон
источник
Ну, да, Docker не делает ничего, что ядро ​​уже не сделает для вас. Он просто упаковывает его в более-менее понятный и довольно простой в использовании инструмент. Вы можете создать свой собственный Docker, если вам самим придется выполнять chroot, пространства имен, квоты, NAT и все остальное.
Гай

Ответы:

8

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

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

Во-вторых, chroot по-прежнему доступен для чтения / записи, любое изменение является постоянным, использование контейнера Docker aufsбудет запускаться из чистой файловой системы каждый раз, когда вы запускаете контейнер (изменения сохраняются, если вы остановите / запустите его IIRC).

Таким образом, хотя контейнер можно рассматривать как process namespace+ chroot, реальность немного сложнее.

Tensibai
источник
Обратите внимание, что aufsпо умолчанию больше не используется. Теперь этоoverlay2
Виталий Витренко
Правда, но я думаю, что на данный момент есть больше образовательных материалов, ссылающихся на aufs, чем на overlay2 :)
Tensibai
Нормальный процесс не может прочитать память, которую он не должен. Если вы полагаетесь на Docker для обеспечения безопасности, вы делаете это неправильно ...
Гай
@ Гай, ты неправильно меня читаешь, я просто пытаюсь дать подсказки для поиска ОП ... Добавление докера в конвейере доставки со всей свободой, которую он дает разработчику тому, что они используют внутри, абсолютно не является точкой безопасности. Тем не менее пространства имен защищают от переполнения стека и переполнения буфера по своей природе.
Тенсибай
5

Да, в этом есть нечто большее, чем chrootто, что у них мало общего.

  • Стандартизированный формат файла сценария, включая семантику, относящуюся к задаче.
  • Изображения (включая анонимные промежуточные изображения), кэширование, присвоение имен, загрузка и т. Д., Включая мощное управление ( docker image prune...)
  • Контейнеры (включая их собственные временные файловые системы, присвоение имен, возможность docker execв них входить и т. Д.)
  • Управление процессами ( docker container ...)
  • Сеть с простой опцией, включая внутри-докер-контейнер-сеть и т. Д.
  • Тома (включая специальные управляемые тома)
  • docker-compose или рой как низкопрофильные обновления до гораздо большего.
  • Большой зоопарк других решений на основе докеризованных контейнеров (OpenShift и т. Д.).
Anoe
источник