Я хочу понять все, что отличает контейнер от виртуальной машины. Для обоих этих методов виртуализации можно наблюдать файловую систему со всей операционной системой. Но в контейнере Docker, например centos 5.x, если я выполняю uname -a
в оболочке контейнера вывод показывает мою версию ядра хоста. Как это работает и основные отличия от классической виртуальной машины (vmware, virtualbox, xen и т. Д.)?
Обе формы позволяют запускать несколько операционных систем на одной физической машине.
С контейнерами эти операционные системы изолированы (у них есть свои файловые системы, процессы, библиотеки, включая libc
, IP-адрес и т. Д.), Но они, тем не менее, используют одно и то же ядро. Вот почему uname -a
показал версию ядра вашего хоста.
При традиционной виртуализации в каждой операционной системе работает собственное ядро. Эти несколько ядер работают не на реальном оборудовании, а на виртуализированном оборудовании, предоставляемом программным обеспечением, называемым гипервизором. Это дополнительный уровень по сравнению с виртуализацией на основе контейнеров.
У каждого вида виртуализации есть свои сильные и слабые стороны. Контейнеры более ограничены в выборе операционных систем, контейнерный должен поддерживаться работающим ядром (например: Зоны Solaris в Solaris, LXC в Linux, WPAR в AIX) хотя технически ничто не запрещает разработчикам ядра реализовать поддержку «чужих» пользовательских областей (например: lxbrand = Зоны Linux в Solaris 10 и SmartOS, или совсем недавно Среда выполнения Ubuntu в Windows 10) в то время как с гипервизорами операционная система должна поддерживаться только виртуальным оборудованием, что допускает множество разнородных конфигураций (например: 32-разрядные и 64-разрядные ядра Linux, * BSD, Solaris, Windows, Mac OS X, ...)
Основное преимущество контейнеров в том, что они намного легче, а производительность приложений практически такая же, как и при установке операционной системы на «голое железо». Создание нового контейнера происходит намного быстрее, потому что нет дополнительного ядра для загрузки, а плотность виртуальной среды может быть намного выше, потому что нет дополнительных ядер для запуска.
Обратите внимание, что Докер является не реализация контейнера. Docker - это стандарт сборки / упаковки / распространения приложений, работающих в контейнеры и включать двигатель для их запуска и недавно добавил оркестратор слишком. Этот движок играет роль, аналогичную гипервизору, но для приложений в контейнерах.
Хорошей отправной точкой будет чтение Википедии. статья:
Виртуализация на уровне операционной системы - это метод виртуализации серверов, при котором ядро операционной системы допускает существование нескольких изолированных экземпляры пользовательского пространствавместо одного. Такие экземпляры, которые иногда называют контейнерами, программными контейнерами, движки виртуализации (VE) или тюрьмы (FreeBSD тюрьма или chroot jail), может выглядеть и ощущаться как настоящий сервер с точки зрения его владельцев и пользователей.
В Unix-подобных операционных системах эту технологию можно рассматривать как расширенную реализацию стандарта. chroot механизм. Помимо механизмов изоляции, ядро часто предоставляет Управление ресурсами функции, чтобы ограничить влияние действий одного контейнера на другие контейнеры. [...]
Я хочу понять все, что отличает контейнер от виртуальной машины.
При использовании технологии виртуализации пакет, который может быть передан, представляет собой виртуальную машину и включает в себя всю операционную систему, а также приложение. На физическом сервере с тремя виртуальными машинами должен быть гипервизор и три отдельные операционные системы, работающие поверх него.
Напротив, на сервере, на котором запущены три контейнерных приложения, как в случае с Docker, работает одна операционная система, и каждый контейнер использует ядро операционной системы совместно с другими контейнерами. Общие части операционной системы доступны только для чтения, в то время как каждый контейнер имеет собственное монтирование (то есть способ доступа к контейнеру) для записи. Это означает, что контейнеры намного легче и потребляют гораздо меньше ресурсов, чем виртуальные машины.
Что еще вы хотите знать? Какие именно детали вам не хватает?