Docker — проект с открытым исходным кодом, предназначенный для автоматизации развёртывания приложений в виде переносимых, автономных контейнеров. Эти контейнеры могут выполняться как в облаке, так и в локальной среде. Docker — также название компании, разрабатывающей и предоставляющей эту технологию в сотрудничестве с поставщиками облачных служб и решениями для Linux и Windows, включая Microsoft.
Контейнеры Docker: работа и совместимость
Контейнеры Docker могут работать в любой среде: локальном центре обработки данных, службе стороннего поставщика или в облаке. Образы Docker работают в исходном формате в Linux и Windows, но образы Windows будут выполняться только на узлах Windows, тогда как образы Linux — на узлах Linux или Windows (с помощью виртуальной машины Linux). «Узлы» — это физические серверы и виртуальные машины.
Разработчики могут использовать среды разработки на базе Windows, Linux или macOS. На компьютере разработчика выполняется узел Docker, где развёртываются образы Docker, созданные приложением и всеми его зависимостями. Разработчики, работающие в Linux или macOS, могут использовать узел Docker на базе Linux и создавать образы только для контейнеров Linux. Разработчики macOS могут изменять код приложения и запускать интерфейс командной строки Docker, но на момент написания статьи запуск контейнеров напрямую в macOS не поддерживался. Windows-разработчики могут создавать образы для контейнеров Linux или Windows.
Docker предоставляет Docker Community Edition (CE) для Windows или macOS, позволяющую размещать контейнеры в среде разработки и предоставляющую дополнительные средства разработки. Оба продукта устанавливают необходимую виртуальную машину, узел Docker и обеспечивают размещение контейнеров. Docker также предлагает Docker Enterprise Edition (EE), предназначенную для корпоративных разработчиков и ИТ-отделов, создающих, распространяющих и выполняющих крупные критически важные приложения в рабочей среде.
Типы контейнеров Windows
Для выполнения контейнеров Windows существуют два типа сред выполнения:
- Контейнеры Windows Server: изолируют приложение с помощью технологии изоляции процессов и пространств имён. Контейнеры Windows Server используют ядро совместно с узлом контейнеров и всеми остальными контейнерами.
- Контейнеры Hyper-V: повышают изоляцию, предоставляемую контейнерами Windows Server, запуская каждый контейнер в оптимизированной виртуальной машине. В этой конфигурации ядро узла контейнера не используется совместно с контейнерами Hyper-V, что улучшает изоляцию.
Образы для этих контейнеров создаются и работают одинаково; различие заключается лишь в том, что для создания контейнера из образа с помощью Hyper-V нужен дополнительный параметр.
Сравнение Docker с виртуальными машинами
Характеристика | Виртуальные машины | Docker |
---|---|---|
Уровни | Инфраструктурный слой, ОС, гостевая ОС, приложения | Инфраструктурный слой, ОС, ядро контейнера, приложения |
Ресурсы | Высокое потребление | Низкое потребление |
Развертывание | Медленное | Быстрое |
Изоляция | Высокая | Низкая (в случае использования одного ядра) |
Виртуальные машины требуют создания трёх базовых уровней на сервере/узле: инфраструктурный слой, операционную систему и, поверх этого, каждая виртуальная машина использует собственную операционную систему и все необходимые библиотеки. Сервер узла Docker предоставляет только инфраструктурный слой, операционную систему и ядро контейнеров, которые изолируют контейнер с использованием базовых служб операционной системы. Так как контейнеры требуют гораздо меньше ресурсов, чем полная операционная система, их проще развёртывать и они быстрее запускаются. Это позволяет повысить плотность развёртывания и запустить на одной единице оборудования больше служб, сократив затраты.
Образы Docker и единообразие среды
Основная цель образов — привести среду зависимостей к единообразию в различных развёртываниях. Это означает, что вы можете отладить образ на одном компьютере, а затем развёрнуть его на другом и получить ту же среду. Образ контейнера — это способ упаковки приложения или службы для надёжного и воспроизводимого развёртывания.
Docker: технология и философия
Docker — это не только технология, но и философия процесса. При работе с Docker разработчики не жалуются, что приложение работает только на локальном компьютере, но не в рабочей среде. Достаточно сказать: «Выполняется в Docker», так как упакованное приложение будет выполняться в любой поддерживаемой среде, одинаково во всех сценариях развёртывания (разработка, контроль качества, промежуточное размещение и рабочая среда).
Аналогия с фотокопировальными устройствами 1950-х годов
Представьте себе подготовку наборов писем для рассылки обычной почтой в 1950-х годах. Каждый лист содержит один абзац текста. Для создания письма отбираются нужные листы, собираются в стопку и отправляются на фотокопировальное устройство. Каждый слой в Docker подобен одному абзацу, а готовая стопка — образу контейнера.
В Docker каждый слой представляет некоторый набор изменений, применяемый к файловой системе после выполнения команды (например, установки программы). Образ можно рассматривать как дополнительный жёсткий диск, доступный только для чтения, готовый к установке на компьютер (контейнер). Контейнер, как компьютер, можно включать и отключать.