Назад | Перейти на главную страницу

В чем разница между контейнерами и виртуальными машинами?

Я хочу понять все, что отличает контейнер от виртуальной машины. Для обоих этих методов виртуализации можно наблюдать файловую систему со всей операционной системой. Но в контейнере 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, работает одна операционная система, и каждый контейнер использует ядро ​​операционной системы совместно с другими контейнерами. Общие части операционной системы доступны только для чтения, в то время как каждый контейнер имеет собственное монтирование (то есть способ доступа к контейнеру) для записи. Это означает, что контейнеры намного легче и потребляют гораздо меньше ресурсов, чем виртуальные машины.

Что еще вы хотите знать? Какие именно детали вам не хватает?