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

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

В основе обеих технологий лежит нечто общее – это виртуализация.

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

Но принцип работы в этих решениях разный.

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

Виртуальная машина (ВМ) — это полноценный, изолированный виртуальный компьютер. У каждой ВМ есть собственная операционная система (Windows, Linux и т.д.) и виртуальное оборудование (процессор, оперативная память, жесткий диск).

За виртуализацию в данном случае отвечает гипервизор.

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

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

Представьте, что на одном большом физическом сервере (ваше “офисное здание”) вы создаете несколько полностью отдельных “комнат” (ВМ). Каждая “комната” имеет свою собственную электрику, водопровод и мебель (свою ОС, ядро, драйверы и ресурсы), и вам неважно, что происходит в соседней.

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

Docker

Docker — это платформа с открытым исходным кодом, которая использует технологию контейнеризации. Контейнеры — это легкие, переносимые “коробки”, которые содержат только само приложение и все его зависимости (библиотеки).

Вместо того, чтобы эмулировать железо Docker эмулирует операционную систему.

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

Вместо того чтобы строить новую “комнату” для каждого приложения, вы просто берете уже готовую, стандартизированную “коробку” (образ Docker) и ставите ее в общее пространство. Эта “коробка” уже содержит все, что нужно приложению, и вы можете легко ее перемещать, клонировать и масштабировать.

Что под капотом

Компоненты Docker

За работу Docker отвечают следующие компоненты:

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

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

Контейнеры Docker: экземпляры образов Docker, работающие в Docker Engine и обеспечивающие изолированную и самодостаточную среду для конкретного приложения.

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

Гипервизор: программное обеспечение, отвечающее за создание, управление и запуск ВМ.

Он бывает двух типов:

  • Тип 1 (Bare-metal): работает непосредственно на оборудовании хоста.
  • Тип 2 (Hosted): работает поверх существующей операционной системы.

Виртуальное оборудование: эмулируемые компоненты, такие как виртуальный ЦП, память и хранилище, представляемые гостевой ОС как реальное оборудование.

Гостевая операционная система: отдельная ОС, которая работает внутри каждой ВМ и может отличаться от ОС хоста.

Когда что выбрать?

Выбор не всегда однозначен, поэтому разберем частые use-кейсы.

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

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

Docker:

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

Быстрая разработка и развертывание: позволяет быстро создавать, развертывать и масштабировать контейнеры , что подходит для гибкой разработки и конвейеров CI/CD.

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

Таким образом если вам нужна максимальная надежность и полная изоляция (например, для финансовых сервисов или устаревших приложений), выбирайте ВМ. Если же ваша цель — быстрая разработка, гибкое масштабирование и эффективное использование ресурсов, Docker — ваш выбор. Часто компании используют обе технологии, чтобы получить лучшее из двух миров!

ХарактеристикаВиртуальная машина (ВМ)Docker
ИзоляцияВысокая. Каждая ВМ имеет свою собственную ОС.Средняя. Контейнеры делят ядро хоста.
РесурсыТребует больше ресурсов (ОЗУ, ЦП), так как каждая ВМ имеет свою ОС.Очень эффективен, использует ресурсы хоста.
Скорость запускаЗапуск занимает минуты, так как нужно загрузить всю ОС.Запуск занимает секунды, так как нет лишней ОС.
ПортативностьМенее портативна. Требует “тяжелых” образов.Очень портативна. Контейнеры легко переносить между средами.
РазмерНесколько гигабайт.Несколько мегабайт.

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

Похожие материалы