Я пытаюсь изучить основы контейнеров (в этом случае Docker). Насколько я узнал из документа Docker и нескольких чтений, Docker в основном обеспечивает изоляцию, запуская контейнер с помощью runc (ранее использующего LXC). В любом случае он использует то же ядро, что и хост-компьютер. Таким образом, изображение контейнера должно быть совместимо с ядром хоста. Я нахожу это очень похожим на то, что делает chroot. Может ли кто-нибудь объяснить мне какие-либо различия и/или преимущества использования Docker, а не chroot? (помимо дополнительных услуг, предоставляемых Docker в качестве упаковки, докер-хаба и всех приятных функций, предоставляемых Docker)
Chroot vs Docker
Ответ 1
Докер позволяет изолировать процесс на нескольких уровнях через пространства имен:
- mnt namespace предоставляет корневую файловую систему (это можно сравнить с chroot, я думаю)
- pid, поэтому процесс видит только себя и своих детей
- сетевое пространство имен, которое позволяет контейнеру иметь выделенный сетевой стек
- пользовательское пространство имен (совершенно новое), которое позволяет пользователю не root на хосте сопоставляться с пользователем root в контейнере
- uts предоставляет выделенное имя хоста
- ipc обеспечивает выделенную общую память
Все это добавляет больше изоляции, чем chroot обеспечивает