Docker за 5 минут: что это и как работает

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 существуют два типа сред выполнения:

  1. Контейнеры Windows Server: изолируют приложение с помощью технологии изоляции процессов и пространств имён. Контейнеры Windows Server используют ядро совместно с узлом контейнеров и всеми остальными контейнерами.
  2. Контейнеры Hyper-V: повышают изоляцию, предоставляемую контейнерами Windows Server, запуская каждый контейнер в оптимизированной виртуальной машине. В этой конфигурации ядро узла контейнера не используется совместно с контейнерами Hyper-V, что улучшает изоляцию.

Образы для этих контейнеров создаются и работают одинаково; различие заключается лишь в том, что для создания контейнера из образа с помощью Hyper-V нужен дополнительный параметр.

Сравнение Docker с виртуальными машинами

Характеристика Виртуальные машины Docker
Уровни Инфраструктурный слой, ОС, гостевая ОС, приложения Инфраструктурный слой, ОС, ядро контейнера, приложения
Ресурсы Высокое потребление Низкое потребление
Развертывание Медленное Быстрое
Изоляция Высокая Низкая (в случае использования одного ядра)

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

Образы Docker и единообразие среды

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

Docker: технология и философия

Docker — это не только технология, но и философия процесса. При работе с Docker разработчики не жалуются, что приложение работает только на локальном компьютере, но не в рабочей среде. Достаточно сказать: «Выполняется в Docker», так как упакованное приложение будет выполняться в любой поддерживаемой среде, одинаково во всех сценариях развёртывания (разработка, контроль качества, промежуточное размещение и рабочая среда).

Аналогия с фотокопировальными устройствами 1950-х годов

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

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

Что будем искать? Например,программа