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

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

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

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

Проблемы развертывания программного обеспечения

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

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

Назначение виртуальных машин

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

Назначение контейнеров

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

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

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

Основные различия между контейнерами и виртуальными машинами

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

Принцип работы

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

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

Базовая технология

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

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

Размер

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

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

Ниже приведено несколько аспектов, на которые следует обратить внимание при выборе между виртуальной машиной и контейнером для разработки приложения.

Конфигурация среды

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

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

Скорость разработки ПО

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

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

Масштабируемость

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

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

Подробнее о микросервисах »

Подробнее об API »

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

Характеристики

Контейнер

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

Определение

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

Цифровая копия физической машины. Разделение физического оборудования на несколько сред.

Виртуализация

Виртуализация операционной системы.

Виртуализация базовой физической инфраструктуры.

Инкапсуляция

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

Операционная система, все программные уровни поверх нее, множество приложений.

Технологии

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

Гипервизор координирует работу с базовой операционной системой или оборудованием. 

Размер

Малый размер (в пересчете на мегабайты).

Значительно больший размер (в пересчете на гигабайты).

Контроль

Меньше контроля над окружающей средой вне контейнера.

Больше контроля над окружающей средой.

Гибкость

Больше гибкости. Вы можете быстро мигрировать между локальными и облачными средами.

Меньше гибкости. Миграция связана с определенными трудностями.

Возможности масштабирования

Высокая масштабируемость. Возможности комплексного масштабирования с помощью микросервисов.

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

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

 

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

В AWS есть несколько сервисов для поддержки всех ваших потребностей в развертывании приложений. Ниже приведено несколько примеров.

  • AWS App2Container – это инструмент контейнеризации, который позволяет разработчикам программного обеспечения модернизировать устаревшие приложения. Разработчики используют AWS App2Container для превращения приложений Java и .NET в контейнерные приложения.
  • Реестр эластичных контейнеров Amazon (Amazon ECR) – это высокодоступный защищенный частный репозиторий, который упрощает хранение образов контейнеров Docker и управление ими.
  • Эластичный контейнерный сервис Amazon (Amazon ECS) – это высокопроизводительный сервис оркестрации для запуска контейнеров Docker в облаке AWS с широкими возможностями масштабирования.
  • Эластичное вычислительное облако Amazon (Amazon EC2) позволяет осуществлять детальный контроль над облачными инстансами и выбирать необходимые процессоры, хранилища и сети. 
  • AWS Fargate – это технология для Amazon ECS, которая позволяет запускать контейнеры Docker в рабочей среде без необходимости развертывания соответствующей инфраструктуры или управления ею.
  • VMWare Cloud на AWS позволяет упростить и ускорить миграцию критически важных производственных рабочих нагрузок с локальных виртуальных машин в облако AWS.

Начните работу с виртуализацией и контейнеризацией, создав бесплатный аккаунт AWS уже сегодня.

AWS: дальнейшие шаги

Начало разработки с контейнерами

Узнайте, как начать работу с контейнерами в AWS

Подробнее 
Начало разработки с виртуальными машинами

Узнайте, как начать работу с виртуальными машинами на базе AWS

Подробнее