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

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

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

Виртуализация: Docker или виртуальная машина

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

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

Виртуальные машины

Как следует из названия, виртуальные машины (VM) обеспечивают виртуализацию всей машины (сервера). Виртуальная машина имитирует аппаратные компоненты физической машины, такие как ЦПУ, память, USB-контроллеры, а также сетевые интерфейсные и звуковые карты. В виртуальной среде можно запускать гостевую операционную систему и несколько приложений. 

Виртуальные машины сделали облачные технологии возможными. В Amazon Web Services (AWS) виртуальная машина называется инстансом. Эти облачные инстансы принадлежат и обслуживаются AWS, и их можно использовать с помощью API.

Подробнее об облачных инстансах »

Docker

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

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

Каковы другие сходства между Docker и виртуальными машинами?

Как технологии виртуализации, Docker и виртуальные машины (VM) имеют некоторые сходства.

Образы

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

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

Управление версиями

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

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

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

Портативность

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

Ключевые отличия: Docker и виртуальная машина

И виртуальные машины (VM), и Docker решают проблему запуска приложений в разных средах. Но делают они это по несколько иным причинам и с разными подходами.

Цель

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

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

Конечный продукт

Docker – это название контейнерной платформы с открытым исходным кодом, которой владеет и управляет компания Docker. Существуют альтернативные платформы, такие как Podman, хотя они гораздо менее популярны; Docker является синонимом контейнеризации. Контейнер – это артефакт, часть, которую может использовать конечный пользователь.

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

Архитектура

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

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

Для более продвинутого управления виртуализацией с помощью Docker используйте Kubernetes. Для получения дополнительной информации ознакомьтесь со статьей Чем отличаются Kubernetes и Docker?

Совместное использование ресурсов

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

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

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

Безопасность

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

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

Когда использовать Docker, а когда – виртуальную машину

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

Например, вы можете развернуть инстанс в AWS и сразу же загрузить его с помощью Образа машины Amazon (AMI), предварительно настроенного в Docker. 

 

Однако если вы принимаете решение об использовании виртуальной машины (VM) или платформы Docker для развертывания приложений в конкретном случае, это зависит от требований по работе приложения.

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

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

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

Когда рекомендуется использовать Docker

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

  • облегченные требования к ресурсам или микросервисная архитектура;
  • среда распределенной физической инфраструктуры, включая облачные серверы;
  • быстрые циклы развертывания (поскольку Dockerfiles легче управлять, чем конфигурациями виртуальных машин)
  • требование к быстрой масштабируемости.

Краткое описание различий платформы Docker и Виртуальная машина

 

Контейнер Docker

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

Что это

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

Эмуляция физической машины, в том числе виртуализированного аппаратного обеспечения, управляющая операционной системой.

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

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

Виртуальная машина извлекает сведения об аппаратном обеспечении из кода приложения.

Цель

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

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

Управление

Движок Docker координирует работу операционной системы и контейнеров Docker.

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

Архитектура

Использует ресурсы совместно с базовым ядром хоста.

Работает на собственном ядре и операционной системе.

Совместное использование ресурсов

По мере необходимости.

Фиксированный объем, установленный в требованиях конфигурации образа виртуальной машины.

Как AWS может удовлетворить ваши требования по развертыванию приложений?

Amazon Web Services (AWS) имеет ряд сервисов, разработанных специально для виртуальных машин (VM) и управления платформой Docker.

  • Эластичное вычислительное облако Amazon (Amazon EC2) предлагает более 600 различных типов безопасных, надежных и масштабируемых инстансов. Загрузив шаблон Образа машины Amazon (AMI), вы за считанные минуты получите полностью настроенный на работу сервер разработки, тестирования или рабочей среды.
  • Эластичный контейнерный сервис Amazon (Amazon ECS) – это полностью управляемый сервис оркестрации контейнеров, который обеспечивает удобное развертывание и масштабирование упакованных в контейнер приложений. Клиенты могут настроить свои инстансы контейнеров для доступа к частному реестру образов Docker в виртуальном частном облаке (VPC) или к реестру за пределами VPC.
  • Реестр эластичных контейнеров Amazon (Amazon ECR) позволяет легко хранить, передавать и развертывать контейнеры в любом месте. Amazon ECR интегрируется с интерфейсом командной строки Docker (CLI) для упрощения разработки и рабочих процессов. Например, вы можете отправить образы контейнеров в Amazon ECR со своей машины для разработки с помощью интерфейса CLI Docker, а оркестраторы контейнеров Amazon могут их напрямую использовать для развертывания в рабочей среде.
  • AWS Fargate – это бессерверный сервис, который позволяет развертывать контейнеры и управлять ими, не используя физический сервер или виртуальные машины.

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