Ответ 1
когда мы тянем образ Ubuntu, то у него другое ядро
Нет, это не так: у него нет части ядра: оно опирается на ядро хоста (одно запущенное средство докера) для всех системных вызовов.
Как упоминалось в " Docker vs Virtualization ":
Изначально Docker создавался как уровень абстракции поверх контейнеров Linux (LXC). Сам LXC - это просто API для функций локализации Linux.
Начиная с Docker 0.9, LXC больше не используется по умолчанию и был заменен пользовательской библиотекой (libcontainer), написанной на Go. Общее преимущество libcontainers - более согласованный интерфейс с ядром в различных дистрибутивах Linux. Единственное, что нужно, это то, что он требует Linux 3.8 и выше.
См. Больше в разделе " Почему понимание пространства пользователя и вопросов пространства ядра ".
Также " Контейнеры операционной системы и контейнеры приложений ":
Контейнеры - это продукты виртуализации операционной системы. Они предоставляют легкую виртуальную среду, которая группирует и изолирует набор процессов и ресурсов, таких как память, процессор, диск и т.д., От хоста и любых других контейнеров.
Изоляция гарантирует, что любые процессы внутри контейнера не смогут увидеть какие-либо процессы или ресурсы вне контейнера.
Контейнеры ОС - это виртуальные среды, которые совместно используют ядро операционной системы хоста, но обеспечивают изоляцию пространства пользователя
Как упомянуто в "Все ли дистрибутивы Linux используют одно и то же ядро? ", Ядро может быть общим для всех дистрибутивов, даже если каждый дистрибутив имеет свою собственную конфигурацию ядра.
Если вам нужна дополнительная изоляция, рассмотрите gVisor (https://github.com/google/gvisor), среду выполнения песочницы контейнера, сфокусированную на безопасности, эффективности и простоте использования. (2018).
Смотрите Архитектура:
gVisor перехватывает системные вызовы приложения и действует как гостевое ядро без необходимости трансляции через виртуализированное оборудование.
gVisor может рассматриваться как объединенное гостевое ядро и VMM, или как seccomp на стероидах.
Эта архитектура позволяет ей обеспечивать гибкое использование ресурсов (т.е. Основанное на потоках и отображениях памяти, а не на фиксированных гостевых физических ресурсах), а также снижает фиксированные затраты на виртуализацию.
Однако это происходит за счет снижения совместимости приложений и увеличения накладных расходов на системные вызовы.