почему виртуализация докеров быстрее виртуальной машины - PullRequest
0 голосов
/ 02 ноября 2018

Насколько я понимаю, виртуальные машины используют аппаратную виртуализацию, тогда как докеры используют виртуализацию программного обеспечения и, следовательно, имеют более высокую производительность (в случае, скажем, я запускаю Dockerized Linux на компьютере с Windows). Но что именно является причиной того, что виртуализация ОС быстрее, чем аппаратная виртуализация?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Docker - это не виртуализация . Речь идет о контейнеризации (как запустить процесс в изолированной среде).

Это означает, что вы не можете запустить контейнер Linux на Windows или контейнер Windows на Linux без использования какой-либо виртуализации (Virtualbox, Hyper-v ...) Это нормально делать на ноутбуке во время разработки, но в производстве вы бы выбрали архитектуру, подходящую для ваших контейнеров.

Что такое контейнер?

из Руководство системного администратора по контейнерам :

Традиционные контейнеры Linux - это всего лишь обычных процессов в системе Linux. Эти группы процессов изолированы от других групп процессов, использующих ограничения ресурсов:

  • (контрольные группы [ cgroups ]),
  • Ограничения безопасности Linux (разрешения Unix, возможности, SELinux, AppArmor, seccomp и т. Д.) И
  • пространства имен (PID, сеть, монтирование и т. Д.).

Задать все это вручную (пространства имен сети, правила iptable-ов и т. Д.) С помощью команд linux было бы непросто, поэтому задача docker-daemon - выполнять их при вводе команд docker ..., и все это происходит под капотом. .

О скорости ...

Прежде всего, контейнеры могут быть менее быстрыми, чем запуск процесса непосредственно в сетевом стеке хоста, из-за сложности, которая вводится. См., Например, это: Проблемы с производительностью при запуске nginx в контейнере Docker

Но они предложат вам скорость . Как:

  • контейнеры не являются полными ОС ( базовые образы имеют небольшой размер )
  • следуют концепциям микроуслуг и «делай одно, делай это хорошо». Это означает, что вы не помещаете все в контейнер так, как вы делаете с виртуальными машинами (это называется разделение задач , и это приводит к более легким компонентам приложения. Это также дает разработчикам скорость, потому что разные команды могут работать над своим компонентом отдельно).
  • слои изображения : в Docker есть внутренний способ разделения изображения на слои, и при создании нового изображения слои можно повторно использовать . Это дает вам хорошую скорость развертывания (подумайте, насколько это полезно в случае отката)

О контейнерах Windows

Контейнеры были «linux», но эта волна контейнеризации также повлияла на Windows. В начале docker-toolbox использовал Virtualbox для запуска контейнеров на виртуальной машине Linux. Позже, docker-for-windows был представлен и дает возможность запускать контейнеры непосредственно на хосте или на hyper-v. Если вы посетите Типы контейнеров Windows , вы можете найти больше.

0 голосов
/ 02 ноября 2018

Docker не выполняет виртуализацию. Он использует пространства имен ядра для достижения эффекта, похожего на chroot, не только для корневой файловой системы, но и для информации о процессе (пространство имен PID), точек монтирования, сети, IPC (разделяемая память), информации UTS (имя хоста) и идентификаторов пользователей .

Контейнеры делят ядро ​​с хостом. В целях безопасности Docker использует AppArmor / SELinux, возможности Linux и seccomp для фильтрации системных вызовов. Контрольные группы (известные как cgroups ] используются для учета процессов и для ограничения ресурсов.

...