Что такое Docker простыми словами: контейнеры, образы и Docker Compose
Dockerfile, docker-compose.yml, volumes, networks — от установки до мультиконтейнерного приложения. С примерами для Python, Node.js и PostgreSQL.
, отредактировано
Docker — слово, которое звучит на каждом втором собеседовании. Его упоминают в вакансиях, обсуждают на митапах и требуют в тестовых заданиях. Но что на самом деле за ним стоит?
Docker — это платформа для контейнеризации приложений. Она позволяет упаковать программу вместе со всеми её зависимостями в изолированный контейнер, который одинаково работает на любом компьютере — от ноутбука разработчика до боевого сервера. Docker выпущен в 2013 году компанией Docker, Inc. и с тех пор стал стандартом индустрии: по данным Stack Overflow Developer Survey 2023, его используют более 52% профессиональных разработчиков.
Ключевые выводы
— Docker упаковывает приложение и все его зависимости в контейнер, который запускается одинаково в любой среде
— Контейнер — это запущенный экземпляр образа, а образ — шаблон для создания контейнеров
— Dockerfile описывает, как собрать образ, а Docker Compose управляет несколькими контейнерами сразу
— Docker потребляет значительно меньше ресурсов, чем виртуальная машина, и запускается за секунды
— Для начала работы достаточно установить Docker Desktop и выполнить одну команду
Зачем нужен Docker — проблема «у меня работает»
Каждый разработчик хотя бы раз сталкивался с классической ситуацией: код отлично работает на его машине, но ломается на сервере или у коллеги. Причина — различия в окружении: другая версия языка, недостающая библиотека, конфликт зависимостей.
Docker решает эту проблему радикально. Вместо того чтобы настраивать каждое окружение вручную, вы упаковываете приложение вместе со всем необходимым в контейнер. Этот контейнер работает одинаково везде — на macOS, Windows, Linux, в облаке AWS или на сервере в дата-центре.
Вот что это даёт на практике:
- Воспроизводимость — «у меня работает» превращается в «работает у всех»
- Изоляция — приложения не мешают друг другу, каждое живёт в своём контейнере
- Скорость развёртывания — новый сервер поднимается за секунды, а не за часы
- Масштабирование — нужно больше мощности? Запустите ещё контейнеров
Основные понятия Docker
Образ (Image)
Образ — это неизменяемый шаблон, из которого создаётся контейнер. Его можно сравнить с классом в программировании: сам по себе он ничего не делает, но на его основе можно создать сколько угодно рабочих экземпляров.
Образы хранятся в реестрах (registry). Самый популярный — Docker Hub, где доступны тысячи готовых образов: Python, Node.js, PostgreSQL, Nginx и многие другие.
Контейнер (Container)
Контейнер — это запущенный экземпляр образа. Если образ — это класс, то контейнер — это объект. Внутри контейнера работает ваше приложение в изолированном окружении со своей файловой системой, сетью и процессами.
Контейнер можно запустить, остановить, удалить и создать заново из того же образа. Данные внутри контейнера по умолчанию не сохраняются после удаления — для постоянного хранения используются тома (volumes).
Dockerfile
Dockerfile — это текстовый файл с инструкциями для сборки образа. Каждая строка описывает один шаг: какой базовый образ взять, какие файлы скопировать, какие пакеты установить, какую команду запустить.
Пример Dockerfile для Python-приложения:
Разберём построчно:
FROM python:3.12-slim— базовый образ с Python 3.12WORKDIR /app— рабочая директория внутри контейнераCOPY requirements.txt .— копирует файл зависимостейRUN pip install— устанавливает зависимостиCOPY . .— копирует остальной кодCMD— команда запуска приложения
Docker Compose
Docker Compose — инструмент для запуска многоконтейнерных приложений. Реальные проекты редко состоят из одного сервиса: обычно есть веб-сервер, база данных, кеш, очередь сообщений. Compose описывает их все в одном файле compose.yml.
Пример — веб-приложение с PostgreSQL и Redis:
Одна команда docker compose up поднимает все три сервиса разом. Остановить — docker compose down.
Как начать работу с Docker
- Скачайте и установите Docker Desktop (Windows, macOS) или Docker Engine (Linux)
- Проверьте установку командой
docker --version - Запустите первый контейнер
Вот команда, которая запустит ваш первый контейнер:
Docker скачает образ hello-world из Docker Hub и запустит контейнер, который выведет приветственное сообщение. Весь процесс занимает несколько секунд.
Хотите попробовать что-то серьёзнее? Запустите Nginx-сервер одной командой:
Откройте http://localhost:8080 в браузере — там будет работающий веб-сервер. Флаг -d запускает контейнер в фоне, а -p 8080:80 пробрасывает порт.
Больше полезных команд для ежедневной работы — в нашей подборке 10 команд Docker, которые должен знать каждый разработчик.
Docker и виртуальная машина — в чём разница
На первый взгляд Docker похож на виртуальную машину (VM): и то, и другое изолирует приложения. Но под капотом — принципиально разные подходы.
Виртуальная машина эмулирует целый компьютер: процессор, память, диск, сетевую карту. Внутри VM работает полноценная операционная система со своим ядром. Это тяжело — VM занимает гигабайты памяти и запускается минутами.
Контейнер Docker использует ядро хост-системы и изолирует только процессы приложения. Это легко — контейнер весит мегабайты и стартует за секунды.
- Размер: образ Docker — 50–500 МБ, VM — 5–20 ГБ
- Запуск: контейнер — 1–3 секунды, VM — 1–5 минут
- Ресурсы: на одном сервере работают десятки контейнеров, но лишь единицы VM
- Изоляция: VM — полная (отдельное ядро ОС), контейнер — на уровне процессов
Когда использовать что: Docker подходит для микросервисов, CI/CD и быстрого развёртывания. VM — когда нужна полная изоляция на уровне ОС, например для запуска Windows-приложений на Linux-хосте.
Частые вопросы
Бесплатен ли Docker?
Docker Engine и Docker CLI — полностью бесплатны и распространяются с открытым исходным кодом. Docker Desktop бесплатен для личного использования, образовательных целей и небольших компаний (до 250 сотрудников и до $10 млн годовой выручки). Крупным организациям потребуется платная подписка от $5 в месяц.
Нужен ли Linux для работы с Docker?
Нет. Docker Desktop работает на Windows 10/11 и macOS. На этих системах Docker использует лёгкую виртуальную машину с Linux-ядром, которая запускается автоматически. Для пользователя всё прозрачно — команды одинаковы на всех платформах.
Чем Docker отличается от Kubernetes?
Docker — это инструмент для создания и запуска контейнеров. Kubernetes (K8s) — это система оркестрации, которая управляет множеством контейнеров в продакшене: распределяет нагрузку, перезапускает упавшие контейнеры, масштабирует сервисы. Docker создаёт контейнеры, Kubernetes ими управляет.
Можно ли использовать Docker в продакшене?
Да, и это стандартная практика. Docker используют Netflix, Spotify, PayPal и тысячи других компаний. Для продакшена обычно применяют Docker в связке с оркестратором — Kubernetes или Docker Swarm — для обеспечения отказоустойчивости и автоматического масштабирования.
Какие есть альтернативы Docker?
Основные альтернативы: Podman — совместимый с Docker инструмент от Red Hat, не требующий демона с root-правами. containerd — низкоуровневый runtime, который Docker сам использует под капотом. LXC — контейнеры на уровне ОС, ближе к виртуальным машинам. Для большинства задач Docker остаётся оптимальным выбором благодаря экосистеме и документации.
Заключение
Docker изменил подход к разработке и развёртыванию приложений. Вместо многочасовой настройки серверов — одна команда. Вместо «у меня работает» — гарантированная воспроизводимость на любой машине.
Начните с малого: установите Docker, запустите docker run hello-world, а затем контейнеризируйте свой pet-проект. Когда освоите основы — переходите к Docker Compose для многосервисных приложений.
Docker — ключевой строительный блок современной DevOps-экосистемы. Контейнеры отлично сочетаются с микросервисной архитектурой — каждый сервис упаковывается в отдельный образ и деплоится независимо. Когда сервисов становится много, ими начинает управлять Kubernetes. А автоматизировать сборку и доставку образов поможет CI/CD — связка Docker + CI/CD является стандартом современной разработки.
Если хотите понять, какое место Docker занимает во всей цепочке, посмотрите план обучения DevOps-инженера. Там Docker показан как мост между Git, CI/CD, инфраструктурой и Kubernetes.