Close

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

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

Фотография: Иэн Бьюкэнэн
Иэн Бьюкэнэн

Главный разработчик решений


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

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

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


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

Плюсы

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

Минусы

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

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


значок: программирование и разработка
Связанные материалы

Сравнение Kubernetes и Docker

Значок: три кольца
СМ. РЕШЕНИЕ

Управление компонентами с помощью Compass

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

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


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

Плюсы

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

Минусы

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

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

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

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


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

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


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

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

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

Ian Buchanan
Ian Buchanan

У Иэна большой опыт разработки на Java и .NET. Но гораздо больше он известен как специалист по применению agile-методик в крупных корпорациях. Сейчас он с головой погрузился в развивающуюся культуру DevOps и инструменты, улучшающие процессы непрерывной интеграции, непрерывной поставки и анализа данных. В течение своей карьеры он с успехом управлял корпоративными инструментами разработки ПО на всех этапах ее жизненного цикла. Он руководил на корпоративном уровне модернизацией процессов, которая приводила к улучшению производительности, качества и повышению удовлетворенности потребителей. Он создал международные команды, в которых ценятся саморегуляция и самоорганизация. Когда Иэн не выступает и не пишет код, он использует свои знания для создания парсеров, использования предметно-ориентированных языков и метапрограммирования. Подписывайтесь на Иэна: @devpartisan.


Поделиться статьей

Рекомендуемые статьи

Добавьте эти ресурсы в закладки, чтобы изучить типы команд DevOps или получать регулярные обновления по DevOps в Atlassian.

Рисунок: DevOps

Сообщество Compass

рисунок: преодоление препятствий

Обучающее руководство: создание компонента

Рисунок: карта

Начните работу с Compass бесплатно

Подпишитесь на информационную рассылку по DevOps

Thank you for signing up