в чем разница между виртуальной машиной и контейнеризацией
Сравнение контейнеров и виртуальных машин
Узнайте о различиях между контейнерами и виртуальными машинами (ВМ), их популярных поставщиках и способах их совместного применения.
Контейнеры и виртуальные машины — очень похожие между собой технологии виртуализации ресурсов. Виртуализация — это процесс, при котором единичный системный ресурс, такой как оперативная память, ЦП, диск или сеть, может быть «виртуализирован» и представлен в виде множества ресурсов. Основное отличие контейнеров и виртуальных машин заключается в том, что виртуальные машины виртуализируют весь компьютер вплоть до аппаратных уровней, а контейнеры — только программные уровни выше уровня операционной системы.
Что такое контейнер?
Контейнеры — это легкие программные пакеты, содержащие все зависимости, необходимые для запуска автономного программного приложения. К этим зависимостям относятся системные библиотеки, сторонние пакеты кода и другие приложения уровня операционной системы. Зависимости, входящие в контейнер, находятся на уровнях стека выше уровня операционной системы.
Плюсы
Минусы
Популярные поставщики контейнеров
Что такое виртуальная машина?
ВМ — это тяжелые программные пакеты, которые обеспечивают полную эмуляцию низкоуровневых аппаратных устройств, таких как ЦП, дисковые и сетевые устройства. ВМ также могут включать дополнительный программный стек для запуска на эмулируемых аппаратных средствах. Эти аппаратные и программные пакеты позволяют получить полнофункциональный снимок вычислительной системы.
Плюсы
Минусы
Популярные поставщики виртуальных машин
Какой вариант подходит для вас?
Если вы выставляете определенные требования к оборудованию для вашего проекта или ведете разработку на одной аппаратной платформе, но целевой является другая платформа, например Windows или macOS, используйте виртуальную машину. Большинство других требований, предъявляемых только к программному обеспечению, можно удовлетворить с помощью контейнеров.
Как использовать контейнеры в связке с виртуальными машинами?
Ничто не мешает использовать контейнеры и виртуальные машины вместе, хотя практические примеры такого использования могут быть ограничены. Можно создать виртуальную машину, которая эмулировала бы уникальную аппаратную конфигурацию. Затем на оборудовании этой виртуальной машины можно установить операционную систему. После того как виртуальная машина будет готова и способна загружать операционную систему, поверх нее можно установить контейнерную среду выполнения. В результате получится функциональная вычислительная система с эмулированным оборудованием, на котором можно устанавливать контейнеры.
Одним из практических примеров использования такой конфигурации являются эксперименты с развертыванием в системах на микросхеме. Популярные вычислительные устройства с системой на микросхеме, такие как Raspberry Pi или макетные платы BeagleBone, можно эмулировать как виртуальные машины, чтобы экспериментировать с запуском на них контейнеров до тестирования на реальном аппаратном обеспечении.
Но в большинстве случаев для конкретной виртуализации достаточно использовать что-то одно: ВМ или контейнеры. Чтобы сделать правильный выбор, важно понимать потребности в ресурсах и то, на какие компромиссы вы готовы пойти.
Что такое контейнер и контейнерная виртуализация
В свое время контейнерная перевозка грузов стала настоящим прорывом в логистике товаров, что в дальнейшем повлияло на экономику всего мира. Такой способ позволил удобно и без потерь перевозить товар. В IT похожий способ комплектации переняли для работы с программами и приложениями в виртуальной среде. Теперь большое количество комплектующих приложения можно поместить в виртуальный контейнер.
В этой статье мы разберём, что такое контейнеризация и для чего её используют.
Прародителем контейнеризации была технология виртуализации. Это возможность запуска нескольких операционных систем на одном физическом устройстве. Виртуализация использует ресурсы устройства (память, процессор, устройство ввода и вывода), но при этом работает как отдельный компьютер со своей операционной системой. Чтобы создать на компьютере или сервере виртуальную среду, нужно установить программу — виртуальную машину. Примерами таких программ являются VirtualBox, Parallels Desktop, Microsoft Hyper-V.
Созданием виртуальной машины и её управлением занимается гипервизор. Он обеспечивает изоляцию операционных систем друг от друга и разделение ресурсов между ОС. Виртуализация может пригодиться, например, при тестировании новой программы. При создании новых продуктов сложно сразу продумать все возможные конфликты с архитектурой ОС компьютера. Для выявления всех проблем программы проводят множество тестов и доработок. Чтобы не повредить основную операционную систему, в виртуальной среде можно создать новую (дополнительную) и протестировать программу на ней. Так как обе системы изолированы друг от друга, в случае ошибки основная ОС не пострадает.
Подобную функцию выполняет контейнеризация. Это виртуализация, которая работает на уровне операционной системы, в ядре. Ядро — центральная часть ОС, которая координирует ресурсы компьютера (процессорное время, память, внешнее аппаратное обеспечение, внешнее устройство ввода и вывода информации) для приложений. Также ядро предоставляет файловую систему и сетевые протоколы. При контейнеризации ядро операционной системы поддерживает несколько изолированных экземпляров пространства вместо одного. Эти экземпляры пространств называют контейнерами.
Контейнер ― это помещенный на виртуальный диск файл, в который упаковывается приложение со всеми необходимыми для его работы зависимостями: кодом приложения, средой запуска, системными инструментами, библиотеками и настройками. Он запускается при помощи контейнерного движка (Docker, CRI-O, Railcar, RKT, LXC).
Контейнерный движок ― это программное обеспечение, которое принимает запросы пользователя, скачивает контейнеры и запускает их. Запуск контейнера происходит при помощи API-обращений.
Отличие виртуальной машины от контейнера
Главное отличие ― способ работы. При виртуализации создается полностью отдельная операционная система. При контейнеризации используется ядро операционной системы той машины, на которой открывается контейнер.
Ещё одно значимое отличие ― размер и скорость работы. Размер виртуальной машины может составлять несколько гигабайт. Также для загрузки операционной системы и запуска приложений, которые в них размещены, требуется много времени. Контейнеры более лёгкие — их размер измеряется в мегабайтах. По сравнению с виртуальными машинами, контейнеры могут запускаться намного быстрее.
Для чего используют контейнерные системы
Удобная работа с кодом при создании нового продукта. Некоторые разработчики работают удалённо на локальных компьютерах. Нередко им приходится пересылать код программы. Чтобы упростить процесс, весь код можно собрать в один контейнер. Далее из этого контейнера будет не только легко получить программу, но и протестировать её на компьютере без ущерба для основной ОС.
Быстрая передача продукта пользователям. Часто при работе со сложными программами приходится устанавливать дополнительные настройки, скачивать библиотеки и другие вспомогательные элементы. При использовании контейнера можно сэкономить время — всё, что нужно для установки, уже содержится в нём. Пользователю достаточно ввести только одну команду для запуска. Это удобно и для разработчиков, так как пользователи меньше обращаются в техническую поддержку.
Преимущества контейнерной виртуализации
Скорость работы. Как говорилось раньше, контейнеры «весят» меньше, чем виртуальные машины, что позволяет устанавливать и запускать их быстрее, чем машины.
Защита от ошибок. Так как контейнеры изолированы один от другого, ошибки, обновления и изменения в одном контейнере не влияют на другой.
Стандартность. Большинство контейнеров основаны на стандартах, что позволяет им работать в Linux, Microsoft и других системах.
Возможности транспортировки среды. Контейнер упаковывает абсолютно все необходимые данные (сведения о приложениях, операционной системе), которые нужны для запуска. Благодаря этому контейнеры можно легко переносить из одних рабочих сред в другие.
Недостатки контейнерной виртуализации
Ограниченность архитектуры. Можно использовать только те контейнеры, которые созданы для конкретной архитектуры. Например, если контейнер создан для Linux, то его нельзя будет использовать для Windows. Также стоит отметить, что контейнеризация Linux более распространена среди разработчиков, поэтому найти контейнеры программ для других операционных систем сложнее.
Низкая безопасность. Контейнерная виртуализация распространяется в основном при помощи публичных репозиториев. Злоумышленники могут вставить свои библиотеки, которые позволят им заразить сервер пользователя. На уязвимость также влияет более низкая изоляция в отличие от виртуальных машин. Из-за этого зараженный контейнер может атаковать основную операционную систему компьютера и повредить её.
Новизна технологии. Этот вид виртуализации только начал свой путь, поэтому при работе с контейнерами могут возникать трудности. Для решения проблем можно задавать вопросы на форумах или обращаться к технической поддержке сервиса, который предоставляет услугу контейнеризации.
Мы рассмотрели, что такое технологии контейнеризации и виртуализации, для чего используются контейнеры и какие у них преимущества и недостатки. Надеемся, что статья помогла определиться, подойдет ли контейнеризация для ваших целей.
Контейнеры и виртуализация: быстрее, эффективнее, надежнее
Современные технологии виртуализации все без исключения стремятся найти золотую середину: помочь в максимальной быстрой работе систем, эффективном использовании оборудования и безопасности. Сегодня мы хотим поделиться своим видением истории развития виртуализации и ее ближайших перспектив.
Как известно, виртуализация в привычном ее формате (то есть подразумевающая запуск полноценной операционной системы внутри другой операционной системы) не всегда была такой «бодрой» и эффективной, как сейчас. Первые версии гипервизоров отличались относительной медлительностью и действительно приводили к серьезному снижению производительности по сравнению с тем, как операционные системы и запущенные в них приложения работали на «реальном железе».
Именно поэтому, когда наша компания только начинала работать над продуктом, который называется сегодня Virtuozzo, мы выбрали направление, которое называют сегодня «Контейнерами ОС» или «Легкими ВМ». В чем разница? А разница в том, что наши легкие ВМ не требовали и не требуют запуска отдельного ядра для каждой «сущности», работающей на сервере. Вместо этого мы берем готовое ядро Linux и предлагаем ему разделить все ресурсы между разными пользователями. Речь, конечно, шла не совсем о стандартном дистрибутиве Linux, а о модифицированной версии, которая могла изолировать пользователей между собой, предоставляя им доступ, например, только к отдельным частям дерева процессов, к отдельным сетевым адаптерам и так далее. Все это было очень востребовано, так как работала в десятки раз быстрее, чем полная виртуализация.
Но а пользователь фактически получал свой изолированный дистрибутив Linux: при доступе через SSH он видит определенные ресурсы, разрешенные процессы и не может влиять на других пользователей. Именно так и сложилась модель предоставления виртуального хостинга на базе контейнеров ОС (или «Легких ВМ») – максимум эффективности при минимальной нагрузке на серверы.
Прогресс неизбежен
С тех пор, как первая версия Virtuozzo была представлена в далеком 1999 году, прошло много времени, за которое технологии виртуализации – как контейнерной, так и полной – претерпели серьезные изменения, и наметились основные вектора поиска «Святого Грааля» — оптимального по своим характеристикам решения для современных cloud-native задач.
На протяжении всего этого времени к контейнерной виртуализации предъявлялись в основном требования в сфере безопасности, а схемы полной виртуализации критиковались за недостаточную производительность и плотность размещения ресурсов.
Что же, за это время средства виртуализации, позволяющие запускать полные версии гостевых ОС, сильно шагнули вперед, что в частности, видно на продуктах VMware. Благодаря тому, что современные процессоры поддерживают ряд оптимизаций для работы с виртуальными средами, количество процессов, которые приходится эмулировать, намного уменьшилось. В результате гостевое ядро все чаще обращается напрямую к оборудованию и лишь по требованию запросы проходят через гипервизор.
Зачем эмулировать простейшие инструкции? Например, арифметика или перемещение байтов могут выполняться процессором непосредственно. То же самое можно сказать и про функцию ret (возврат результата выполнения процедуры). Благодаря тому, что за данными не нужно каждый раз обращаться к гипервизору, виртуальные среды стали работать быстрее. И сегодня производители процессоров продолжают добавлять виртуальный контекст в свои продукты, делая системы виртуализации еще эффективнее.
Контейнерные технологии тоже становились все совершеннее. Например, в нашей собственной версии Virtuozzo Linux была реализована технология ReadyKernel, которая позволяет устанавливать обновления безопасности без перезагрузки сервисов, а значит – делать это в любое время, в том числе, моментально после их анонса. Или другой пример – шифрование дисков контейнеров, чтобы избежать возможности кражи данных, когда «Легкая ВМ» находится в неактивном состоянии. Так что пока средства полной виртуализации становились быстрее, их альтернатива в виде контейнеров ОС становилась более защищенной.
Паравиртуализация
С другой стороны, сами производители операционных систем стали помогать в осуществлении виртуальных инициатив. Сегодня и Linux и Windows являются паравиртуализированными системами. Это значит, что, работая в гостевом режиме, ОС «осознанно» обращаются не к реальному оборудованию, а к гипервизору. Таким образом, они могут один раз заявить гипервизору о серии привилегированных операций и сэкономить массу времени, которое раньше уходило на эмуляцию. В частности, управление памятью и работа с системами ввода/вывода стали на порядок лучше и быстрее, ведь фактически из системы был исключен слой «виртуального железа».
Проксирование
Другая интересная технология, которая сегодня только набирает обороты и может дать большой толчок в развитии именно «Легких ВМ» — это проксирование. Первыми о данном решении заявили в компании Apporeto. Разработчики предложили следующую идею: они проанализировали базу данных уязвимостей и сделали вывод, что уязвимости в файловых системах и сетевом стеке находят всего 1-2 раза в год. Но в интерфейсной части это происходит намного чаще. В результате было предложено использовать всем клиентам один и тот же слой работы с сетью, файлами и другими «глубокими» сервисами ОС, но при этом вынести в гостевые системы все, что связано с интерфейсами. Таким образом, даже если злоумышленник сможет использовать свежую уязвимость, он не сможет пробраться дальше конкретной «Легкой ВМ». На данный момент для реализации подхода необходимо использовать специальный дистрибутив Linux, но учитывая перспективность подхода, в скором времени мы увидим реализацию этого принципа в большинстве стандартных дистрибутивов.
С прицелом на приложения
Впрочем, победоносное шествие Docker определило еще один очень интересный тренд: многим хочется запускать готовые микросервисы – отдельные приложения. И затевать для этого целую виртуальную машину, вроде бы, не имеет смысла. В этом случае можно предоставить владельцу возможность выбирать, какие функции доступны приложению. И этот подход стал весьма популярен за неимением иных готовых решений. Но он подходит только для тех приложений, которым не нужно много функций. В противном случае приходится чем-то жертвовать, а это – не интересно.
Вместо этого стали появляться возможности запустить приложение в гипервизоре без ядра, но снабдить его нужными библиотеками. Такие решения называются Unikernel. Они включают в себя модифицированные системные библиотеки, которые изначально знают, что работают в гипервизоре. Для гипервизора гостевая ОС представляет собой 1 процесс. Так какая разница? Почему не запустить в виде этого 1 процесса наше приложение?
Отличие состоит лишь в том, что приложение вместе с библиотеками формируется как «монолит», который включает в себя нужные модули. Впрочем, сегодня уже создано достаточно автоматизированных инструментов, которые помогают собирать такие комплекты и запускать их прямо в гипервизоре, обеспечивая одновременно и высокую степень изоляции процессов друг от друга, и высокую производительность.
Контейнеры и виртуальные машины: В чем ключевые различия?
Виртуализация изменила облик современных вычислений благодаря повышению эффективности использования ресурсов, отделению приложений от базового оборудования и повышению мобильности и защиты рабочих нагрузок. Но гипервизоры и виртуальные машины — это лишь один из подходов к развертыванию виртуальных рабочих нагрузок. Виртуализация контейнеров стала эффективной и надежной альтернативой традиционной виртуализации, предоставляя новые возможности и новые проблемы для специалистов центров обработки данных.
Разница между контейнерами и виртуальными машинами заключается в основном в расположении слоя виртуализации и способе использования ресурсов ОС. Контейнеры и виртуальные машины — это просто разные способы предоставления и использования вычислительных ресурсов — процессоров, памяти и ввода-вывода — которые уже присутствуют в физическом компьютере. Хотя цель виртуализации, по сути, та же, что и у контейнеров, подход существенно отличается, и каждый подход предлагает уникальные характеристики и компромиссы для корпоративных рабочих нагрузок.
Что такое виртуальные машины?
Виртуальные машины полагаются на гипервизор, который представляет собой программный слой, установленный поверх аппаратного обеспечения системы. Такие гипервизоры называются гипервизорами типа 1. Гипервизоры первого типа, такие как VMware vSphere ESXi и Microsoft Hyper-V, воспринимаются как самостоятельные ОС. После установки уровня гипервизора администраторы могут создавать экземпляры виртуальных машин из доступных вычислительных ресурсов системы. Затем каждая ВМ может получить свою уникальную ОС и рабочую нагрузку. Таким образом, ВМ полностью изолированы друг от друга — ни одна ВМ не знает о присутствии другой ВМ в той же системе и не полагается на нее, а вредоносное ПО, сбои приложений и другие проблемы влияют только на эту ВМ. Администраторы могут переносить виртуальные машины из одной виртуализированной системы в другую, не обращая внимания на аппаратное обеспечение или ОС системы.
В системе может быть создано множество виртуальных машин. Часто первой ВМ является хост-ВМ, используемая для рабочих нагрузок управления системой, таких как Microsoft System Center. Последующие ВМ содержат другие рабочие нагрузки предприятия, такие как база данных, ERP, CRM, сервер электронной почты, медиа-сервер, веб-сервер или другие бизнес-приложения. ВМ отличаются несколькими общими чертами или характеристиками:
Преимущества виртуальных машин
За последние 20 лет виртуальные машины стали стандартом де-факто для корпоративной виртуализации, и они дают бизнесу множество преимуществ, включая:
Недостатки виртуальных машин
Несмотря на значительные преимущества, виртуальные машины также имеют ряд недостатков:
Что такое контейнеры?
Виртуализированная контейнерная среда устроена по-другому. При использовании контейнеров сначала на систему устанавливается ОС хоста, например Linux, а затем поверх нее устанавливается слой контейнеров — как правило, менеджер контейнеров, например Docker. Менеджер контейнеров, по сути, обеспечивает функцию гипервизора для контейнеров. Этот подход практически идентичен гипервизорам типа 2.
После установки слоя для контейнеров администраторы могут создавать экземпляры контейнеров из доступных вычислительных ресурсов системы и развертывать компоненты корпоративных приложений в контейнерах. Однако каждое контейнерное приложение использует одну и ту же базовую ОС: единую ОС хоста. Хотя слой контейнеров обеспечивает уровень логической изоляции между контейнерами, общая ОС может представлять собой единую точку отказа для всех контейнеров в системе. Как и в случае с ВМ, контейнеры также легко переносятся между физическими системами при наличии подходящей ОС и среды контейнерного уровня.
Преимущества контейнеров
Контейнеры обладают своими уникальными свойствами и характеристиками:
Недостатки контейнеров
Контейнеры обеспечили огромную масштабируемость и гибкость для корпоративных организаций, но есть и несколько недостатков:
Сравнение контейнеров и виртуальных машин
Контейнеры и виртуальные машины обладают уникальными характеристиками, но при выборе технологии виртуализации необходимо учитывать множество аспектов. В следующем списке приведены некоторые из наиболее распространенных сравнений:
Контейнеры в сравнении с виртуальными машинами: Вопросы безопасности
Не секрет, что безопасность рабочих нагрузок и данных является критически важным вопросом практически для каждого предприятия. Простое поддержание работоспособности рабочей нагрузки часто является вопросом непрерывности бизнеса и соблюдения корпоративных норм. А постоянно присутствующая угроза хакеров, вредоносных программ, вторжений и других злонамеренных действий делает жизненно важным выбор защищенных сред для корпоративных приложений, как для предотвращения, так и для локализации любых недостатков безопасности или проблем, которые могут возникнуть.
ВМ обычно считаются наиболее безопасной и устойчивой платформой для рабочих нагрузок. Технологии гипервизоров хорошо отработаны, а логическая изоляция, которую гипервизоры обеспечивают между ВМ, гарантирует, что каждая ВМ существует как отдельный логический сервер со своей ОС и драйверами. Однако все элементы, работающие в ВМ и вокруг нее — ОС, приложения, драйверы, авторизация и аутентификация, а также сетевой трафик — подвержены недостаткам безопасности, которые необходимо постоянно устранять, как и в любом традиционном физическом развертывании. Когда для обеспечения безопасности требуется наивысший уровень изоляции, виртуальные машины, как правило, имеют преимущество.
Контейнеры являются гибкими и быстрыми, но все контейнеры работают на базе общей ОС. Технически это нормально, но любые ошибки или недостатки в системе безопасности ОС могут потенциально подвергнуть опасности все контейнеры, работающие на общем ядре ОС. Базовое ядро ОС представляет собой единую точку уязвимости. Как минимум, системы, используемые для контейнеров, обычно используют надежную и проверенную ОС. Администраторы применяют обновления и исправления безопасности ОС только после тщательного тестирования и проверки. Для защиты сервера обычно применяются такие тактики безопасности, как обнаружение и предотвращение вторжений. Безопасность может быть усилена путем запуска групп контейнеров в виртуальных машинах, сочетая преимущества контейнеров с повышенной изоляцией виртуальных машин.