Сравнение контейнеров и виртуальных машин

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

Ian Buchanan Ian Buchanan

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

Контейнер, демонстрирующий различия между виртуальными машинами и контейнерами.

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

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

Плюсы

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

Минусы

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

Популярные поставщики контейнеров

  • Docker
    Это самая популярная и широко используемая контейнерная среда выполнения. Docker Hub — это гигантский общедоступный репозиторий популярных программных приложений в контейнерах. Контейнеры Docker Hub можно мгновенно загружать и развертывать в локальных средах выполнения Docker.
  • Rkt
    Rkt (читается как «рокет») — это контейнерная система, ориентированная прежде всего на безопасность. Контейнеры rkt не допускают выполнения небезопасных функций, пока пользователь не отключает настройки безопасности явным образом. Контейнеры rkt нацелены на решение проблем безопасности, связанных с перекрестными зависимостями, от которых страдают другие системы контейнерных сред.
  • Контейнеры Linux — LXC
    LXC является одним из компонентов системы контейнерных сред выполнения Linux с открытым исходным кодом. LXC используется для изоляции процессов уровня операционной системы друг от друга. В основе Docker фактически лежит технология LXC. Контейнеры Linux обеспечивают независимую от поставщика контейнерную среду выполнения с открытым исходным кодом.
  • CRI-O
    CRI-O — это недавно возникший стандарт контейнерной среды выполнения с открытым исходным кодом, разработка которого ведется совместно многими крупными компаниями. Спецификация CRI-O оптимизирована для системы управления контейнерами Kubernetes.

Что такое виртуальная машина?

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

Плюсы

  • Полная защита изоляции
    Виртуальные машины работают изолированно как полностью автономные системы. Это означает, что виртуальные машины защищены от любого вредоносного кода или помех со стороны других виртуальных машин на общем узле. Отдельные виртуальные машины могут быть захвачены вредоносным кодом, но пораженная ВМ будет изолирована и не сможет повредить другие виртуальные машины, расположенные рядом.
  • Интерактивная разработка
    Контейнеры обычно представляют собой статические определения ожидаемых зависимостей и конфигурации, необходимых для запуска контейнера. ВМ более динамичны и могут разрабатываться в интерактивном режиме. После указания базовых аппаратных характеристик виртуальную машину можно рассматривать как компьютер без операционной среды. Программное обеспечение можно установить на ВМ вручную; можно сделать снимок состояния для фиксации текущей конфигурации ВМ. Снимки состояния ВМ можно использовать для восстановления ВМ на определенный момент времени или для запуска дополнительных виртуальных машин с такой же конфигурацией.

Минусы

  • Скорость итерации
    Создание и воспроизведение виртуальных машин занимает много времени, поскольку они охватывают полный системный стек. Любые изменения снимка состояния виртуальной машины могут потребовать значительного времени на воспроизведение и проверку того, что они работают должным образом.
  • Стоимость занимаемого хранилища
    ВМ могут занимать много места в хранилище. Они могут быстро вырастать до нескольких гигабайтов в объеме. Это может привести к нехватке дискового пространства на компьютере, где размещаются виртуальные машины.

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

  • VirtualBox
    Это бесплатная система эмуляции архитектуры x86 с открытым исходным кодом, принадлежащая Oracle. VirtualBox — одна из самых популярных и известных платформ виртуальных машин с экосистемой дополнительных инструментов для разработки и распространения образов виртуальных машин.
  • VMware
    VMware — это публичная компания, которая построила свой бизнес на основе одной из первых технологий аппаратной виртуализации x86. Решения VMware поставляются в комплекте с гипервизором — утилитой для развертывания нескольких виртуальных машин и управления ими. Решения VMware обладают надежным пользовательским интерфейсом для управления виртуальными машинами. Это отличный вариант для корпоративного использования виртуальных машин, который включает поддержку.
  • QEMU
    QEMU — это самый надежный вариант виртуальной машины для эмуляции аппаратного обеспечения. Он поддерживает любую стандартную аппаратную архитектуру. QEMU — это утилита командной строки без графического пользовательского интерфейса для настройки или выполнения. Эта особенность делает QEMU одним из самых быстрых вариантов виртуальных машин.

Какой вариант подходит для вас?

Если вы выставляете определенные требования к оборудованию для вашего проекта или ведете разработку на одной аппаратной платформе, но целевой является другая платформа, например Windows или macOS, используйте виртуальную машину. Большинство других требований, предъявляемых только к программному обеспечению, можно удовлетворить с помощью контейнеров.

Как использовать контейнеры в связке с виртуальными машинами?

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

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

Но в большинстве случаев для конкретной виртуализации достаточно использовать что-то одно: ВМ или контейнеры. Чтобы сделать правильный выбор, важно понимать потребности в ресурсах и то, на какие компромиссы вы готовы пойти.