Что ж, лишние навороты называются изоляцией процесса, контейнер получает свое собственное пространство имен от ядра хоста, что означает, что программа в контейнере не может пытаться прочитать память ядра или использовать больше оперативной памяти, чем позволено.
Он также изолирует сетевые стеки, поэтому два процесса могут прослушивать порт 8080, например, вам придется обрабатывать маршрутизацию на уровне хоста, здесь нет никакой магии, но это позволяет обрабатывать маршрутизацию в одном месте и избегать изменения конфигурации процесса в слушать свободный порт.
Во-вторых, chroot по-прежнему доступен для чтения / записи, любое изменение является постоянным, использование контейнера Docker aufs
будет запускаться из чистой файловой системы каждый раз, когда вы запускаете контейнер (изменения сохраняются, если вы остановите / запустите его IIRC).
Таким образом, хотя контейнер можно рассматривать как process namespace
+ chroot
, реальность немного сложнее.