Перейти к основному содержимому

Docker: Краткое описание и подборка материалов

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

Основные понятия

  • Контейнер — изолированная среда, в которой запускаются приложения вместе со всеми зависимостями, включая библиотеки и компоненты, необходимые для работы приложения.
  • Image (образ) — шаблон для создания контейнера, описывающий, что именно должно быть в контейнере. Образы можно создавать самостоятельно или загружать из репозиториев, таких как Docker Hub.
  • Dockerfile — текстовый файл с инструкцией для создания образа (что должно находиться в образе, какие команды, зависимости и процессы он будет содержать).
  • Registry (реестр/репозиторий) — удалённое (открытое/закрытое) хранилище образов. Docker Hub – публичное хранилище образов.
  • Host — ОС, на которой работает Docker.
  • Platform — программа, которая упаковывает и запускает приложения в контейнере. Собирает код и зависимости.
  • Volumes — хранилище данных для приложения.
  • Docker Compose — инструмент для определения и запуска многоконтейнерных приложений с помощью YAML-файла. Docker Compose позволяет настроить параметры, такие как имя сервиса, образ, порты, тома, сети и зависимости между сервисами.
  • Docker Swarm — режим работы Docker, в котором несколько хостов объединяются в кластер для управления и масштабирования контейнеров. Docker Swarm обеспечивает высокую доступность, балансировку нагрузки и обнаружение сервисов.

Архитектура Docker

Docker построен на клиент-серверной архитектуре. Docker-Client общается с Docker-Daemon, который создает, запускает, распределяет контейнеры. Клиент и сервер могут работать как на одной машине, так и удаленно. Интерфейс общения: Socket или REST API.

Примеры использования

  • Работа с веб-приложением. Например, веб-приложение на PHP. Вместо установки PHP и других зависимостей напрямую, можно использовать Docker для создания контейнера, в который упаковывается всё необходимое.

  • Контейнеризация БД. Например, компания использует MongoDB. Чтобы облегчить управление и развертывание, администратор использует Docker для создания контейнера с MongoDB, который содержит необходимую версию и все конфигурационные файлы.

  • Работа с микросервисами. Например, веб-приложение, состоящее из нескольких микросервисов: сервис авторизации, обработки заказов и управления пользователями. Каждый микросервис может быть упакован в свой собственный Docker-контейнер: один с Node.js, другой с Python и так далее.

Преимущества

  • Изоляция и безопасность: Docker помогает создавать изолированные среды для разработки и тестирования ПО без влияния на основную систему.
  • Ускорение разработки: Docker позволяет быстро создавать и уничтожать контейнеры. Разработчики могут работать над приложением независимо от ОС.
  • Масштабируемость и отказоустойчивость: позволяет запускать одно приложение в нескольких контейнерах для повышения производительности. Для масштабирования используются платформы оркестрации: OpenShift, Kubernetes, Docker Swarm, Nomad и т.д.

Недостатки

  • Повышенная потребность в вычислительных ресурсах.
  • Необходимость оркестрации для крупных приложений.
  • Сложности на Windows и macOS, так как изначально разработан для Linux.

Подборка материалов по изучению Docker

Теория по Docker доступна в предыдущем посте тут.

🌐 Официальная документация Docker

📎 Статьи

  1. О Докер с примером на пицце + серия статей
  2. Кратко про Docker
  3. Термины и концепции
  4. Как работает Docker
  5. Подробнее о компонентах
  6. Руководство по Docker: с нуля до кластера на AWS — для тех, кто хочет попробовать сам
  7. Всегда ли нужны Docker, микросервисы и реактивное программирование?
  8. Руководство по Docker Compose для начинающих
  9. Про Docker Swarm

⏯ Видео

  1. Пример. Экосистема контейнеров в Yandex.Cloud
  2. Зачем нужен и как работает Docker
  3. Практический курс Docker и Kubernetes
  4. Коротко о Docker
  5. Docker образы. Микросервисы — Демо-занятие курса «DevOps практики и инструменты»
  6. Курс по Docker