Chroot vs Docker

Я пытаюсь изучить основы контейнеров (в этом случае Docker). Насколько я узнал из документа Docker и нескольких чтений, Docker в основном обеспечивает изоляцию, запуская контейнер с помощью runc (ранее использующего LXC). В любом случае он использует то же ядро, что и хост-компьютер. Таким образом, изображение контейнера должно быть совместимо с ядром хоста. Я нахожу это очень похожим на то, что делает chroot. Может ли кто-нибудь объяснить мне какие-либо различия и/или преимущества использования Docker, а не chroot? (помимо дополнительных услуг, предоставляемых Docker в качестве упаковки, докер-хаба и всех приятных функций, предоставляемых Docker)

Ответ 1

Докер позволяет изолировать процесс на нескольких уровнях через пространства имен:

  • mnt namespace предоставляет корневую файловую систему (это можно сравнить с chroot, я думаю)
  • pid, поэтому процесс видит только себя и своих детей
  • сетевое пространство имен, которое позволяет контейнеру иметь выделенный сетевой стек
  • пользовательское пространство имен (совершенно новое), которое позволяет пользователю не root на хосте сопоставляться с пользователем root в контейнере
  • uts предоставляет выделенное имя хоста
  • ipc обеспечивает выделенную общую память

Все это добавляет больше изоляции, чем chroot обеспечивает