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

Docker

DockerБыстрое развитие последних нескольких лет сделало контейнеры снова популярными, но очень важно представитьDockerвсегда говори да«Старое вино в новой бутылке». В дополнение к контейнерам виртуальные машины также являются технологиями виртуализации, которые мы более или менее подвержены. Как виртуальные машины, так и контейнеры используются для создания изолированных виртуальных сред, но существуют значительные различия между двумя технологиями виртуализации, а сегодняшняя статья обсудит различия между ними.

виртуальная машина

Виртуальная машина (ВМ) — это операционная система, которая совместно использует физические ресурсы сервера. это на хост-железеGuest, поэтому его еще называютGuestвиртуальная машина.

Виртуальная машина состоит из нескольких слоев. Уровни, поддерживающие виртуализацию,hypervisor.hypervisorЭто программное обеспечение для серверов виртуализации.

Как работают виртуальные машины

Все необходимое для запуска приложения содержится в виртуальной машине — виртуализированное оборудование, операционная система и все необходимые двоичные файлы и библиотеки. Поэтому виртуальная машина имеет свою независимую инфраструктуру.

虚拟机架构图
Схема архитектуры виртуальной машины

Преимущества виртуальных машин

Виртуальные машины могут сократить расходы на серверное оборудование и могут использовать ресурс физического сервера, который можно разделить на несколько независимых виртуальных машин для выполнения большого объема работы.

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

Самое главное, виртуальная машина и изоляция операционной системы хоста, - это безопасное место для разработки и тестирования приложений.

Недостатки виртуальных машин

Виртуальная машина может потреблять много системных ресурсов хоста, а размер виртуальной машины составляет несколько гигабайт. Запуск одного приложения на виртуальном сервере означает запускGuest OSа такжеGuest OSВиртуальная копия всего оборудования, необходимого для работы. Это быстро увеличило многоRAMиCPUЛФ.

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

контейнер

Контейнер — это независимая от операционной системы среда для запуска приложений. это через линуксNamespacesиCgroupsтехнология изоляции и ограничения прикладных процессов,Namespaceрольизолировать, что позволяет процессу приложения видеть толькоNamespaceВ мире; иCgroupsрольограничениеРесурсы хоста, выделенные процессу. Но для хоста эти «изолированные» процессы мало чем отличаются от других процессов.

Контейнер — это просто специальный процесс, работающий на хосте, а между несколькими контейнерами используется ядро ​​операционной системы одного и того же хоста.

оNamespacesиCgroupsПодробнее позже, здесь вы просто знаете, что они начинают изолировать и ограничивать процесс приложения.

Как работает контейнер?

Namespaceрольизолировать, что позволяет процессу приложения видеть толькоNamespaceвнутриМирCgroupsрольограничение, это дает этоМирОкруженный невидимой стеной. пройти черезMount NamespaceМожет изменить процесс контейнера на собственную файловую систему."точка крепления"познание. Перемонтируйте весь корневой каталог процесса-контейнера перед его запуском."/"(пройти черезpivot_rootСистемный вызов изменяет файловую систему процесса, если система ее не поддерживает, используйтеchroot), а из-заMount NamespaceСуществование этого маунта невидимо для хозяина. Эта файловая система, смонтированная в корневом каталоге контейнера и используемая для обеспечения изолированной среды выполнения процесса контейнера, называется так называемым «образом контейнера». У него также есть более профессиональное название:rootfs(корневая файловая система).rootfsЭто только файлы, конфигурации и каталоги, содержащиеся в операционной системе, не включая ядро ​​операционной системы.

так,rootfsВключает только операционную систему"оболочка", и не включает ядро ​​операционной системы. Все контейнеры на одном компьютере совместно используют ядро ​​операционной системы хоста.

Это значит, что если приложению в контейнере нужно настраивать параметры ядра и взаимодействовать напрямую с ядром, то это ядра операционной хост-системы, которая является "глобальной переменной для всех контейнеров на машине"", дёргая за волосы и двигаться всем телом. Это также один из основных недостатков контейнеров по сравнению с виртуальными машинами: в конце концов, виртуальные машины имитируют аппаратные машины, которые действуют как песочницы, и каждая виртуальная машина также запускает полнуюGuest OSПусть приложение бросить свободно. Однако из-заrootfsУпаковывается не только приложение, но и файлы и каталоги всей операционной системы, а это означает, что приложение и все зависимости, необходимые для его запуска, упаковываются вместе. Это придает контейнеру так называемую согласованность: будь то локально, в облаке или на компьютере в любом месте, пользователю нужно только распаковать упакованный образ контейнера, после чего будет восстановлена ​​полная среда выполнения, необходимая для запуска приложения. .

Преимущества контейнера

Размер, занимаемый контейнером, намного меньше размера виртуальной машины, даже всего 10 МБ, что может легко ограничить использование памяти и ЦП контейнером. Контейнеры очень легкие и быстро запускаются по сравнению с виртуальными машинами, где для развертывания приложения требуется развертывание всей операционной системы. Это позволяет нам быстро расширять контейнер и добавлять такой же контейнер.

Точно так же контейнеры — отличный выбор для реализации непрерывной интеграции и непрерывного развертывания (CI/CD). Они облегчают совместную разработку, распространяя и объединяя изображения между разработчиками.

Недостатки контейнеров.

Контейнеры по-прежнему не обеспечивают такой же безопасности и стабильности, как виртуальные машины. Поскольку они совместно используют ядро ​​хоста, их нельзя полностью изолировать, как виртуальные машины.

Контейнеры являются изоляцией на уровне процесса, и контейнер может влиять на другие контейнеры, влияя на стабильность ядра хоста.

Как только контейнер выполнит свою задачу, он выключится и удалит все данные в нем. Если вы хотите, чтобы данные сохранялись, вы должны использовать «том данных» для их сохранения, что требует ручной настройки на хосте.

Контейнер или виртуальная машина

Выше мы перечислили преимущества и недостатки контейнеров и виртуальных машин.После того, как мы выберем один из преимуществ, мы должны терпеть побочные эффекты, вызванные недостатками по умолчанию.Все имеет две стороны и ничто не может иметь только преимущества и недостатки. В случае контейнеров и виртуальных машин из-за их полной изоляции и безопасности виртуальные машины часто используются для ресурсоемких приложений, сетевой инфраструктуры и приложений, которые будут потреблять большую часть ресурсов виртуальной машины. А контейнеры обычно используются для веб-приложений, микросервисов.

В этой статье используетсяmdniceнабор текста