Медиаблог /

Docker — что это такое: контейнеры, образы и архитектура

13 августа 2026

Docker — что это такое: контейнеры, образы и архитектура

Docker — платформа контейнеризации, которая упаковывает приложение вместе со всеми зависимостями в изолированный контейнер. Выпущен в 2013 году компанией Docker, Inc., написан на языке Go, распространяется под лицензией Apache 2.0. По данным Stack Overflow Developer Survey 2023, инструмент используют 52% профессиональных разработчиков. В этой статье разберём, что такое Docker, как устроены контейнеры и образы, зачем нужны Dockerfile и Compose и чем контейнеры отличаются от виртуальных машин.

Docker — что это такое: контейнеры, образы и архитектура

image

Учитесь бесплатно за счёт государства

Экономия до 100 000 ₽ на любой программе

Выбрать курс

Что такое Docker простыми словами

Представьте, что приложение — не просто набор файлов, а целая «коробка»: внутри лежат код, нужные библиотеки, конфигурация и рабочая среда. Именно такую коробку создаёт Docker. Её называют контейнером. Контейнер запускается одинаково на ноутбуке разработчика, облачном сервере и в системе непрерывной интеграции — окружение всегда одинаковое.

Проблема «работает только у меня»

Классический сценарий: разработчик пишет код на Python 3.10 с определёнными версиями библиотек. Коллега запускает тот же код на Python 3.8 — и получает ошибки. На продакшн-сервере — другие версии, другое поведение. Различия в окружениях порождают проблему «у меня работает», которая съедает часы на отладку.

Docker решает её радикально: приложение и все зависимости упакованы в единый контейнер. Где бы он ни запускался, внутри — одно и то же окружение. Конфликты версий остаются в прошлом, а среда разработки воспроизводимо совпадает с продакшном.

Разработчик радуется, сисадмин у сервера видит ошибку — проблема «у меня работает»

Docker как платформа: определение и ключевые факты

Docker — платформа контейнеризации, выпущенная в 2013 году компанией Docker, Inc. Написана на Go, Community Edition распространяется под лицензией Apache 2.0. По данным Stack Overflow Developer Survey 2023, инструмент используют 52% профессиональных разработчиков.

Две редакции:

  • Community Edition (CE) — бесплатная версия с открытым исходным кодом.
  • Enterprise Edition (EE) — платная, от $5 в месяц, с расширенной поддержкой и корпоративными инструментами безопасности.

Платформа работает на Linux, Windows (с 2015 года) и macOS. Открытые стандарты контейнеров определяет организация OCI (Open Container Initiative — Открытая инициатива по контейнерам), участником которой является Docker.

Ключевые компоненты экосистемы Docker

Экосистема Docker строится на четырёх взаимосвязанных компонентах. Логика такая: Dockerfile описывает, как собрать образ → образ (Image) служит шаблоном → из образа создаётся контейнер → готовые образы хранятся в Registry. Разберём каждый элемент отдельно.

Контейнер — изолированная среда запуска приложения

Контейнер — это запущенный экземпляр образа. Удобная аналогия из объектно-ориентированного программирования: образ — класс, контейнер — объект-экземпляр. Из одного образа можно одновременно запустить десятки контейнеров.

Ключевые характеристики:

  • Старт занимает 1–3 секунды — против 1–5 минут у виртуальных машин.
  • Размер — 50–500 МБ в зависимости от базового образа.
  • Ядро операционной системы — общее с хостом: контейнер не несёт с собой отдельную ОС.

Жизненный цикл контейнера проходит четыре состояния: Created (создан) → Running (запущен) → Stopped (остановлен) → Removed (удалён). Важно: без подключения тома (Volume) данные уничтожаются при переходе в Removed — их нужно сохранять в постоянное хранилище заранее.

Docker-образ как шаблон-класс и три контейнера-экземпляра — аналогия ООП

Образ (Image) — неизменяемый шаблон

Образ Docker (Docker Image) — неизменяемый (readonly) шаблон, из которого создаются контейнеры. Уже собранный образ изменить нельзя — только пересобрать.

Внутри образ устроен как стопка слоёв: каждая инструкция в Dockerfile добавляет один слой поверх предыдущего. Файловая система строится поверх механизма overlay2. Благодаря слоистой структуре повторная сборка работает быстро: неизменённые слои Docker берёт из кэша, а не пересчитывает. Поэтому редко меняющиеся инструкции — например, установку зависимостей — лучше помещать выше в файле.

Каждый образ идентифицируется уникальным sha256-хэшем и может получить человекочитаемый тег: latest, v1.0, dev.

Dockerfile — инструкция по сборке образа

Dockerfile — текстовый файл с инструкциями на специальном языке разметки (DSL, предметно-ориентированный язык). Каждая инструкция соответствует одному слою образа. Для сборки используется команда docker build -t.

ИнструкцияНазначениеСоздаёт слой
FROMБазовый образ — отправная точка сборкида
WORKDIRРабочая директория внутри контейнерада
COPYКопирует файлы с хоста в образда
RUNВыполняет команду при сборкеда
CMDКоманда по умолчанию при запуске контейнеранет
ENTRYPOINTТочка входа, выполняется всегданет
USERПользователь для запуска процессовнет

Таблица 1. Основные инструкции Dockerfile и их назначение.

Ключевое различие CMD и ENTRYPOINT: аргументы, переданные в docker run, полностью заменяют CMD, но лишь дополняют ENTRYPOINT. Если контейнер должен всегда запускать конкретную программу — используйте ENTRYPOINT. Для продакшн-среды добавляйте инструкцию USER с непривилегированным пользователем: запуск от имени root повышает риски безопасности.

Docker Hub и Registry — где хранятся образы

Docker Hub — публичный реестр образов. В нём хранятся образы более 100 000 проектов: nginx, Python, PostgreSQL, Redis и другие официальные решения. Основные команды: docker pull (скачать образ), docker push (загрузить в реестр), docker tag (добавить метку версии).

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

Архитектура Docker: как платформа устроена изнутри

Docker построен по клиент-серверной модели. Пользователь работает с командной строкой (CLI) — это клиент. За кулисами запросы обрабатывает цепочка компонентов. На Windows и macOS эта цепочка работает внутри лёгкой Linux-виртуальной машины — именно потому на этих системах нужен Docker Desktop.

Цепочка: CLI → Daemon → containerd → runc

Когда вы вводите команду docker run, запускается следующая последовательность:

  1. Docker CLI отправляет команду через Unix-сокет к фоновому процессу dockerd.
  2. dockerd (Docker Daemon) — основной фоновый процесс. Принимает команды, управляет образами, сетями и томами, оркестрирует создание и удаление контейнеров.
  3. containerd — управляет жизненным циклом контейнеров независимо от dockerd. Именно поэтому контейнеры продолжают работать даже при перезапуске Docker Daemon — containerd держит их активными.
  4. runc — создаёт изолированный процесс, активируя механизмы ядра Linux: namespaces (пространства имён) и cgroups (контрольные группы).
  5. Контейнер — изолированная среда запускается и принимает нагрузку.
Схема архитектуры Docker: CLI — Daemon — containerd — runc — контейнер

Такое разделение ответственности — намеренное архитектурное решение: каждый компонент цепочки можно обновить независимо от остальных.

Docker Desktop — запуск Docker на Windows и macOS

Docker Desktop объединяет в одном установщике Docker Engine, интерфейс командной строки, Docker Compose и графический интерфейс управления.

Контейнеры используют ядро Linux — на Windows и macOS его нет. Docker Desktop решает задачу через лёгкую виртуализацию:

  • Windows: Docker запускается внутри подсистемы WSL 2 (Windows Subsystem for Linux — подсистема Windows для Linux).
  • macOS: используется HyperKit или Apple Virtualization Framework (AVF).

Ценообразование: бесплатно для личного использования и организаций до 250 сотрудников с выручкой до $10 млн в год. Крупные компании переходят на платную подписку от $5 в месяц.

Для начинающих Docker Desktop — самый быстрый старт: устанавливаешь один пакет и сразу переходишь к практике.

Docker против виртуальных машин: принципиальные отличия

И контейнеры, и виртуальные машины (VM) изолируют приложения, но делают это принципиально разными способами.

Виртуальная машина работает поверх гипервизора — программного слоя (VMware, VirtualBox, KVM), который эмулирует полноценное железо и запускает гостевую операционную систему со своим ядром. Полная изоляция обходится дорого: 5–20 ГБ дискового пространства и 1–5 минут на запуск.

Контейнер Docker использует ядро хоста напрямую: изолирует только процессы, файловую систему и сеть, не создавая отдельной операционной системы. Результат — 50–500 МБ и старт за 1–3 секунды. Контейнер легче виртуальной машины — именно это делает его стандартом для микросервисной архитектуры и массовых развёртываний.

ПараметрКонтейнер DockerВиртуальная машина
Уровень изоляцииПроцесс и пространство имёнГипервизор + полноценная ОС
Ядро ОСОбщее с хостомСобственное
ГипервизорНе требуетсяОбязателен
Размер50–500 МБ5–20 ГБ
Время запуска1–3 с1–5 мин
Потребление ресурсовНизкоеВысокое
Совместимость ОСТолько Linux-ядроЛюбая ОС

Таблица 2. Сравнение контейнера Docker и виртуальной машины по 7 параметрам.

VM выбирают, когда требуется полная изоляция на уровне операционной системы или запуск другой ОС поверх хоста. В остальных случаях контейнер выигрывает по скорости и плотности размещения.

Docker Compose: управление многосервисными приложениями

Реальные приложения редко состоят из одного компонента. Типичный стек — веб-приложение, база данных и кеш — это уже три сервиса. Запускать каждый вручную неудобно и чревато ошибками. Docker Compose решает задачу: все сервисы описываются в одном YAML-файле и стартуют единой командой — это основа микросервисной архитектуры на локальной машине.

Структура docker-compose.yml и пример трёх сервисов

Конфигурация хранится в файле docker-compose.yml (или compose.yml). Блок services перечисляет контейнеры проекта с их параметрами: образ, порты, переменные окружения, зависимости.

Классический пример трёх сервисов: web (приложение), db (PostgreSQL) и cache (Redis). Docker Compose автоматически создаёт для них общую bridge-сеть (сеть-мост). Контейнеры видят друг друга по имени сервиса: приложение обращается к базе данных через db:5432, а не через IP-адрес, который меняется при каждом перезапуске.

Docker Compose: три сервиса — веб-сервер, база данных и кеш в одной сети

Команды: docker compose up, up -d, down

  • docker compose up — запускает все сервисы из docker-compose.yml в переднем плане. Логи всех контейнеров идут в один терминал.
  • docker compose up -d — флаг -d (detached, фоновый режим) освобождает терминал немедленно: сервисы продолжают работать в фоне.
  • docker compose down — останавливает и удаляет контейнеры, созданные сети и временные ресурсы.

При 50 и более контейнерах Docker Compose уступает место полноценному оркестратору — Kubernetes или Docker Swarm.

Установка Docker и базовые команды

Docker доступен на Linux, Windows и macOS. Для серверов под управлением Linux рекомендуется пакет docker-ce из официального репозитория. На Windows и macOS самый быстрый старт — Docker Desktop.

Официальный сайт и проверка установки

Дистрибутив для Windows и macOS скачивается с официального сайта Docker. На Linux пакет docker-ce устанавливается из репозитория через пакетный менеджер системы.

После установки проверьте корректность командой docker version: в ответе появятся два блока — Client и Server. Затем запустите первый контейнер:

Хотите сменить профессию или повысить квалификацию?

Федеральный проект «Активные меры содействия занятости» даёт возможность пройти обучение бесплатно за счёт государства

  • Программы от ведущих вузов России — от 2 месяцев
  • Удостоверение или диплом установленного образца
  • Центр карьеры: 7 500+ вакансий, помощь с трудоустройством
Оставить заявку
image
docker run hello-world

В терминале появится надпись «Hello from Docker!» — платформа работает. Контейнер скачивает образ, выполняет задачу и завершается.

docker run -d: запуск контейнера в фоновом режиме

Для долгоживущих сервисов — веб-серверов, баз данных — используется флаг -d:

docker run -d -p 8080:80 nginx

Флаг -d (detached) запускает контейнер в фоне: терминал освобождается немедленно, в ответ выводится только ID контейнера — длинная строка символов. Флаг -p 8080:80 пробрасывает порт: запросы на порт 8080 хоста перенаправляются на порт 80 внутри контейнера.

Команда docker ps показывает список запущенных контейнеров со статусом Up.

Терминал с командой docker run -d и выводом ID запущенного контейнера

docker build -t: сборка образа с именем и тегом

Для создания собственного образа из Dockerfile используется:

docker build -t myapp:1.0 .

Флаг -t (tag) задаёт имя и версию образа: myapp — имя, 1.0 — тег. Точка в конце — контекст сборки: директория, где Docker ищет Dockerfile и файлы для копирования внутрь образа.

Без флага -t образ получит только sha256-хэш без удобного имени для запуска. Популярные соглашения для тегов: latest (текущая версия), v1.0 (стабильный релиз), dev (ветка разработки). Кэширование слоёв значительно ускоряет повторные сборки: неизменённые шаги Docker не пересчитывает заново.

Безопасность Docker-контейнеров

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

namespaces и cgroups: основа изоляции

Два механизма ядра Linux обеспечивают фундамент изоляции процессов в контейнере.

namespaces (пространства имён) делают ресурсы хоста невидимыми изнутри контейнера: изолируются PID (процессы), сеть, файловая система и пользователи. PID 1 внутри контейнера — не PID 1 хоста: они живут в разных пространствах имён и не видят друг друга.

cgroups (контрольные группы) ограничивают потребление ресурсов — CPU, оперативной памяти и дискового ввода-вывода. «Жадный» контейнер не сможет перегрузить соседей: квота задаётся при запуске. Оба механизма активируются компонентом runc в момент создания контейнера.

Rootless mode и дополнительные механизмы защиты

Помимо namespaces и cgroups, Docker поддерживает несколько дополнительных уровней защиты:

  • AppArmor / SELinux — политики управления доступом к файлам и операциям контейнера на уровне ядра.
  • seccomp — фильтрует системные вызовы: блокирует обращения к ядру, которые контейнеру не нужны и потенциально опасны.
  • Linux Capabilities (точечные привилегии ядра) — ограничивает права root внутри контейнера, не давая полного доступа к ядру хоста.
  • Rootless mode (режим без суперпользователя) — Docker запускается от имени обычного пользователя. При компрометации контейнера злоумышленник не получает root-доступ к хост-системе.

Оркестрация контейнеров: Docker Swarm и Kubernetes

Когда приложение состоит из десятков контейнеров на нескольких серверах, управлять ими вручную невозможно. Нужен оркестратор — система, которая автоматически распределяет контейнеры по узлам, перезапускает упавшие сервисы и масштабирует нагрузку. У Docker есть два пути: встроенный Docker Swarm и промышленный Kubernetes.

Docker Swarm — встроенный оркестратор

Docker Swarm — встроенный оркестратор для мультихостовых развёртываний. Активируется командой docker swarm init без отдельной установки.

Swarm подходит для небольших кластеров средней сложности: настраивается быстрее и проще Kubernetes. При высоких нагрузках и сложных требованиях к отказоустойчивости возможностей Swarm начинает не хватать — тогда переходят на K8s.

Kubernetes и таблица сравнения оркестраторов

Kubernetes (K8s) — система оркестрации, созданная в Google. Управляет сотнями и тысячами контейнеров в продакшене: Netflix, Spotify и PayPal строят на нём критическую инфраструктуру.

Docker и Kubernetes — не конкуренты. Docker создаёт контейнеры, Kubernetes управляет ими. Вместе они образуют стандартный стек непрерывной поставки.

ПараметрDocker (одиночный)Docker SwarmKubernetes
НазначениеЗапуск контейнеровВстроенная оркестрацияПромышленная оркестрация
Сложность настройкиНизкаяСредняяВысокая
Масштаб1 хостДесятки узловСотни узлов
АвтомасштабированиеНетОграниченноеПолное
ЭкосистемаБогатаяОграниченнаяОгромная
Когда использоватьРазработка, тестыСредние кластерыКрупный продакшн

Таблица 3. Сравнение Docker, Docker Swarm и Kubernetes по 6 параметрам.

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

Docker — не единственный инструмент контейнеризации. Три основных альтернативы:

Podman (Red Hat) — совместим с Docker CLI: большинство команд работают без изменений. Ключевое отличие — работает без демона с правами суперпользователя. В режиме rootless by default контейнеры запускаются от имени обычного пользователя прямо из коробки.

containerd — низкоуровневый контейнерный runtime (среда выполнения). Это тот самый компонент, который Docker использует внутри своей архитектуры. Kubernetes работает с containerd напрямую через интерфейс CRI (Container Runtime Interface — интерфейс среды выполнения контейнеров), минуя Docker.

LXC (Linux Containers — Linux-контейнеры) — контейнеры уровня операционной системы. По модели изоляции они ближе к виртуальным машинам: каждый LXC-контейнер ведёт себя как полноценная система со своим init-процессом.

Для большинства задач Docker остаётся оптимальным выбором: зрелая экосистема, огромный реестр образов на Docker Hub и широкое сообщество разработчиков.

Сравнение Docker, Podman и containerd — инфографика по ключевым параметрам

Хотите освоить IT-профессию и разобраться в современных инструментах разработки? В рамках федерального проекта «Активные меры содействия занятости» можно пройти обучение по востребованным IT-направлениям — аналитика, нейросети, дизайн, 1С — без отрыва от работы и без вложений. Смотрите каталог доступных программ.

Часто задаваемые вопросы

Что такое Docker Compose и зачем он нужен?

Docker Compose — инструмент для запуска многоконтейнерных приложений. Все сервисы (веб-приложение, база данных, кеш) описываются в одном файле docker-compose.yml и стартуют командой docker compose up. Остановка и удаление — docker compose down. При 50 и более контейнерах Compose заменяют на Kubernetes или Docker Swarm.

Чем Docker отличается от Kubernetes?

Docker создаёт и запускает контейнеры. Kubernetes — система оркестрации, управляющая сотнями контейнеров в продакшене: распределяет нагрузку, перезапускает упавшие сервисы, масштабирует автоматически. Это не конкуренты: Docker создаёт, Kubernetes управляет. Вместе они образуют стандартный стек непрерывной поставки.

Что такое Docker Swarm?

Docker Swarm — встроенный в Docker оркестратор для мультихостовых развёртываний. Проще Kubernetes в настройке, активируется командой docker swarm init без дополнительной установки. При высоких нагрузках уступает K8s по функциональности. Оптимален для небольших кластеров, где полный Kubernetes избыточен.

Что означает флаг -d в команде docker run -d?

Флаг -d (detached) запускает контейнер в фоновом режиме. Терминал освобождается немедленно — в ответ выводится только ID контейнера. Без -d терминал прикреплён к контейнеру и блокируется до его остановки. Состояние запущенных контейнеров проверяется командой docker ps.

Что означает флаг -t в команде docker build -t?

Флаг -t (tag) задаёт имя и версию собираемого образа. Команда docker build -t myapp:1.0 . создаёт образ myapp версии 1.0 из Dockerfile в текущей директории. Без -t образ получит только sha256-хэш — без удобного имени для последующего запуска.

Что значит docker compose up -d?

docker compose up запускает все сервисы из docker-compose.yml в переднем плане. Флаг -d (detached) переключает в фоновый режим: терминал свободен, контейнеры продолжают работать. Остановить и удалить все сервисы и сети — docker compose down.

Бесплатен ли Docker?

Docker Engine и Docker CLI распространяются бесплатно под лицензией Apache 2.0. Docker Desktop бесплатен для личного использования и организаций до 250 сотрудников с выручкой до $10 млн в год. Крупные компании переходят на платную подписку от $5 в месяц.

Нужен ли Linux для работы с Docker?

Нет. Docker Desktop работает на Windows 10/11 (через WSL 2) и macOS (через Apple Virtualization Framework). Команды идентичны на всех платформах. На Linux Docker Engine устанавливается напрямую как системная служба — без дополнительного слоя виртуализации.

Что такое Docker Registry?

Docker Registry — сервер хранения Docker-образов. Публичный вариант — Docker Hub с более чем 100 000 образов: nginx, Python, PostgreSQL, Redis и другие. Для корпоративных задач разворачивают собственный Registry с приватным доступом, аутентификацией и контролем версий образов.

Какие есть альтернативы Docker?

Podman (Red Hat) — совместим с Docker CLI, работает без root-демона по умолчанию. containerd — низкоуровневый runtime, который Docker использует внутри и который напрямую применяется в Kubernetes. LXC — контейнеры уровня ОС, ближе к VM по модели изоляции. Для большинства задач Docker предпочтительнее благодаря зрелой экосистеме.

Разработчик за ноутбуком изучает Docker и контейнеризацию приложений

 

Подайте заявку —
забронируйте место в группе

45 000 мест на 2026 год. Бесплатное обучение по федеральному проекту «Активные меры содействия занятости»

  • Онлайн
  • От 2 месяцев
  • Бесплатно
  • Диплом
Учиться бесплатно
icon