Открыть сервис

Docker

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

История

Идея контейнеризации приложений существовала задолго до появления Docker. В 1979 году в Unix V7 была введена системная команда chroot, которая изолировала процессы от основной файловой системы. В 2000-х годах появились технологии, такие как FreeBSD Jails, Solaris Zones и Linux Containers (LXC), которые предоставляли более продвинутые механизмы изоляции.

Docker был создан американским разработчиком Соломоном Хайксом (Solomon Hykes) в 2013 году как внутренний проект компании dotCloud (позднее переименованной в Docker Inc.). Первая публичная версия была выпущена 13 марта 2013 года на конференции PyCon. Ключевым нововведением Docker стало упрощение работы с контейнерами: вместо сложных команд LXC или ручной настройки изоляции пользователи получили единый интерфейс командной строки и систему образов для быстрого развёртывания.

В 2014 году Docker Inc. представила Docker Hub — облачный реестр образов, позволяющий разработчикам публиковать и скачивать готовые контейнеры. В том же году был выпущен проект Docker Compose для оркестрации многоконтейнерных приложений. В 2015 году компания основала проект Open Container Initiative (OCI) для стандартизации форматов контейнеров и сред выполнения. В 2017 году Docker Inc. объявила о поддержке Kubernetes — системы оркестрации контейнеров, разработанной компанией Google. С 2019 года Docker Desktop стал платным для коммерческого использования в крупных организациях, хотя версия Community Edition остаётся бесплатной.

В 2021 году Docker Inc. изменила лицензию на Docker Desktop, требуя платной подписки для предприятий с числом сотрудников более 250. В ответ на это сообщество разработчиков активизировало использование альтернативных решений, таких как Podman (от Red Hat) и containerd (от CNCF).

Архитектура и основные компоненты

Docker использует клиент-серверную архитектуру. Основные компоненты включают:

Docker Daemon (dockerd)

Фоновый процесс, который управляет контейнерами, образами, сетями и томами. Демон прослушивает запросы от Docker API и выполняет операции с использованием механизмов ядра Linux, таких как cgroups (control groups) и namespaces. В Windows и macOS Docker работает через виртуальную машину с Linux.

Docker Client (docker)

Интерфейс командной строки (CLI), который позволяет пользователям взаимодействовать с демоном. Клиент отправляет команды (например, docker run, docker build, docker ps) демону через REST API. Один клиент может подключаться к нескольким демонам, в том числе удалённым.

Docker Images (образы)

Шаблоны только для чтения, содержащие инструкции для создания контейнера. Образ состоит из набора слоёв, каждый из которых представляет собой файловую систему или изменения, внесённые в предыдущий слой. Слои кэшируются и переиспользуются, что ускоряет сборку и уменьшает занимаемое место. Образы создаются на основе Dockerfile — текстового файла с инструкциями (FROM, RUN, COPY, CMD и др.).

Docker Containers (контейнеры)

Запускаемые экземпляры образов. Каждый контейнер изолирован от других и от хост-системы с помощью namespaces (изоляция процессов, сети, пользователей и т.д.) и cgroups (ограничение ресурсов). Контейнеры могут быть запущены, остановлены, удалены и перемещены между хостами. При остановке контейнера его данные по умолчанию теряются, если не использовались тома (volumes).

Docker Registries (реестры)

Хранилища образов. По умолчанию используется Docker Hub — публичный реестр, содержащий миллионы образов (как официальные, так и созданные сообществом). Организации могут разворачивать частные реестры (например, с помощью Docker Registry, Harbour или Amazon ECR). Команда docker pull загружает образ из реестра, docker push — загружает.

Docker Compose

Инструмент для определения и запуска многоконтейнерных приложений. Конфигурация описывается в YAML-файле (docker-compose.yml), где указываются образы, порты, тома, сети и зависимости между сервисами. Одна команда docker compose up запускает все сервисы одновременно.

Docker Swarm (устаревший)

Встроенный в Docker инструмент для оркестрации кластеров контейнеров. Позволяет объединять несколько хостов в единый кластер и управлять развёртыванием сервисов. Начиная с середины 2010-х годов уступил популярность Kubernetes, хотя продолжает использоваться в некоторых проектах.

Принцип работы

Docker использует механизмы ядра Linux для изоляции процессов. Основные технологии:

При выполнении команды docker run Docker daemon:

  1. Проверяет наличие образа локально; если нет — загружает из реестра.
  2. Создаёт новый контейнер на основе образа.
  3. Настраивает сеть (по умолчанию bridge-сеть) и тома.
  4. Запускает процесс, указанный в команде или в CMD образа.
  5. Отслеживает состояние контейнера до его остановки.

Основные команды

Docker CLI предоставляет десятки команд. Наиболее часто используемые:

КомандаОписание
docker pull <образ>Загрузить образ из реестра
docker push <образ>Отправить образ в реестр
docker build -t <имя> <путь>Собрать образ из Dockerfile
docker run <образ>Запустить контейнер из образа
docker psПоказать запущенные контейнеры
docker stop <контейнер>Остановить контейнер
docker rm <контейнер>Удалить контейнер
docker imagesПоказать локальные образы
docker exec -it <контейнер> <команда>Выполнить команду внутри работающего контейнера
docker logs <контейнер>Показать логи контейнера
docker compose upЗапустить сервисы из docker-compose.yml
docker compose downОстановить и удалить сервисы

Преимущества и недостатки

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

Недостатки

Применение

Docker широко используется в различных областях:

Альтернативы

Основные альтернативы Docker:

Интересные факты

Критика

Основные направления критики Docker:

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →