Если вы когда-нибудь выполняли команду docker exec <образ> bash, то наверняка знаете, что контейнер изнутри очень похож на виртуальную машину. Если при наличии доступа к контейнеру через командную оболочку выполнить команду ps, то будут видны только работающие внутри него процессы. У контейнера свой сетевой стек и, на первый взгляд, собственная файловая система с корневым каталогом, никак не связанным с корневым каталогом хост-компьютера. Можно выполнять контейнеры с ограничением ресурсов, например объема оперативной памяти или доступных ресурсов CPU. Однако, как бы ни были похожи на первый взгляд эти два типа изоляции, важно отдавать себе отчет, что контейнеры — это не виртуальные машины. Lля контейнеров используются такие конструктивные элементы Linux, как пространства имен и chroot, а также контрольные группы. Изнутри контейнера не видна вся файловая система хоста, а только ее подмножество, поскольку при создании контейнера корневой каталог изменяется. Изменить корневой каталог в Linux можно с помощью команды chroot. Фактически она делает так, что корневой каталог текущего процесса начинает указывать на другую точку файловой системы. После того как команда chroot будет выполнена, теряется доступ ко всему, что располагается в иерархии файлов выше нового корневого каталога, поскольку подняться выше корня файловой системы невозможно. После изменение корневого каталога процессу становится видна лишь часть файловой системы Команда chroot буквально меняет корневой каталог процесса. После чегопроцесс (и его дочерние процессы) сможет обращаться только к файлам и каталогам, расположенным ниже в иерархии, чем этот новый корневой каталог. Настоятельно рекомендуется запускать контейнерные приложения на выделенных хост-компьютерах (неважно, виртуальных машинах или реальных), в основном из соображений безопасности.