В чем разница между Docker и виртуальной машиной?
Docker и виртуальные машины (VM) – это две технологии, используемые при развертывании приложений. В жизненном цикле разработки программного обеспечения фаза развертывания подготавливает код приложения к запуску для конечных пользователей. 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, создав аккаунт уже сегодня.