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

- Проблема которую решает Docker
- Аналогия — транспортный контейнер
- Ключевые понятия Docker
- Docker vs Виртуальная машина
- Первые шаги с Docker
- Типичные сценарии использования Docker
- Как Docker работает внутри
- Часто задаваемые вопросы
- Docker — это язык программирования?
- Docker бесплатный?
- Нужен ли Linux для Docker?
- Что читать дальше по Docker
Проблема которую решает Docker
«Works on my machine» — классика. Разработчик написал код, у него всё работает. На сервере — падает. У тестировщика — нужно установить десяток пакетов. Причины всегда одни:
Разработчик: «У меня работает!»
Сервер: «Ошибка: python 3.8 required, found 3.11»
Тестировщик: «Какой пакет мне нужно установить?»
DevOps: «На staging всё ок, на prod — нет»
- Разные версии Python/Node/Java на разных машинах
- Разные версии библиотек
- Разные ОС (Mac у разработчика, Ubuntu на сервере)
- «Забытые» зависимости которые есть на машине разработчика, но не задокументированы
- Разные переменные окружения и конфиги
Docker упаковывает приложение и всё его окружение в контейнер. Контейнер запускается везде одинаково — проблема исчезает.
Аналогия — транспортный контейнер
До появления стандартных грузовых контейнеров каждый груз перевозился по-своему: мешки навалом, ящики отдельно, жидкость в бочках. Каждый раз нужно было думать как разместить, какой транспорт подойдёт, как перегрузить.
Стандартный 20-футовый контейнер изменил логистику: не важно что внутри — любой кран, корабль, грузовик, поезд работает с ним одинаково. Содержимое изолировано, стандартизировано, легко перемещается.
Docker контейнер — то же самое, только для приложений. Не важно какое приложение внутри — любой сервер с Docker запустит его одинаково.
Ключевые понятия Docker
Образ (Image) — неизменяемый шаблон для создания контейнера. Как класс в ООП: описывает как должен выглядеть контейнер, но сам не запускается.
ubuntu:22.04 — образ ОС Ubuntu
python:3.12 — образ с Python 3.12
python:3.12-slim — облегчённый образ Python
nginx:latest — образ веб-сервера Nginx
postgres:16 — образ PostgreSQL
redis:7-alpine — образ Redis на Alpine Linux
Контейнер (Container) — запущенный экземпляр образа. Как объект из класса. Из одного образа можно создать сотни контейнеров — каждый изолирован, не мешает другим.
Dockerfile — текстовый файл с инструкциями для сборки образа. Описывает: какой базовый образ взять, какие команды выполнить, какой код скопировать, какую команду запустить.
Docker Hub — публичный реестр образов. Как GitHub, но для Docker образов. Тысячи готовых образов: операционные системы, базы данных, веб-серверы, языки программирования.
Docker Compose — инструмент для запуска нескольких контейнеров вместе. Приложение + база данных + кэш — одним файлом конфигурации.
Docker vs Виртуальная машина
Виртуальная машина: Docker контейнер:
┌─────────────────────┐ ┌─────────────────────┐
│ Приложение │ │ Приложение │
│ Библиотеки │ │ Библиотеки │
│ Guest OS │ └──────────┬──────────┘
│ (ядро Linux) │ │
│ Гипервизор │ ┌──────────┴──────────┐
│ Host OS │ │ Docker Engine │
└─────────────────────┘ │ Host OS (ядро) │
└─────────────────────┘
Виртуальная машина эмулирует отдельный компьютер с полноценной ОС. Docker использует ядро хостовой ОС — контейнер содержит только само приложение и его зависимости.
| Виртуальная машина | Docker | |
|---|---|---|
| Размер образа | Гигабайты (5–20 ГБ) | Мегабайты (50–500 МБ) |
| Запуск | Минуты | Секунды |
| Изоляция | Полная (отдельное ядро) | Процессная (общее ядро) |
| Потребление RAM | Высокое | Низкое |
| Производительность | -10..30% накладные расходы | ~= нативная |
| Разные ОС | Да (Windows на Linux) | Нет (только Linux на Linux) |
Первые шаги с Docker
# Убедиться что Docker установлен
docker --version
# Docker version 26.1.0, build ...
# Скачать образ и запустить тестовый контейнер
docker run hello-world
# Hello from Docker! ← всё работает
# Запустить Ubuntu в интерактивном режиме
docker run -it ubuntu bash
# root@abc123:/# ← ты внутри контейнера Ubuntu
# apt update && apt install -y python3
# exit
# Запустить Nginx веб-сервер
docker run -d -p 8080:80 --name my-nginx nginx
# Открыть: http://localhost:8080
# Посмотреть запущенные контейнеры
docker ps
# Остановить
docker stop my-nginx
Типичные сценарии использования Docker
- Локальная разработка — запускать PostgreSQL, Redis, Elasticsearch без установки на систему. Снёс контейнер — ничего не осталось
- Единое окружение команды — все разработчики работают в одинаковом окружении. «У меня работает» больше не аргумент
- Деплой — одинаково на dev/staging/prod. Собрал образ один раз — деплоишь везде одно и то же
- CI/CD — сборка и тесты в чистой изолированной среде. GitHub Actions, GitLab CI используют Docker контейнеры
- Микросервисы — каждый сервис в своём контейнере, независимое обновление и масштабирование
Как Docker работает внутри
Docker использует два механизма ядра Linux для изоляции:
- namespaces — изолируют процессы, сеть, файловую систему. Контейнер видит только свои процессы, не видит процессы хоста
- cgroups — ограничивают ресурсы: CPU, RAM, дисковый ввод-вывод. Контейнер не может «съесть» все ресурсы сервера
Образ состоит из слоёв (layers). Каждая инструкция в Dockerfile — отдельный слой. Слои кэшируются: если поменял только код приложения — Docker не пересобирает слой с зависимостями.
Часто задаваемые вопросы
Docker — это язык программирования?
Нет. Docker — инструмент для контейнеризации приложений. Это набор программ: Docker Engine (демон), Docker CLI (командная строка) и Docker Desktop (GUI для Windows/Mac). Dockerfile — текстовый файл с инструкциями, не язык программирования. Писать код на Docker нельзя — им запускают код написанный на Python, Node.js, Go и других языках.
Docker бесплатный?
Docker Engine (CLI, для Linux-серверов) — полностью бесплатный и open source. Docker Desktop (GUI для Windows и Mac) — бесплатен для личного использования, студентов и небольших компаний (менее 250 сотрудников и $10М дохода). Для крупного бизнеса нужна платная подписка. Docker Hub (публичный реестр образов) — бесплатен для публичных репозиториев, платный для приватных.
Нужен ли Linux для Docker?
Docker контейнеры используют ядро Linux, поэтому нативно Docker работает только на Linux. На Windows и macOS Docker Desktop создаёт небольшую Linux виртуальную машину автоматически — пользователь этого не замечает. Для серверного деплоя используют Linux (Ubuntu, Debian, CentOS) — это стандарт. На Windows Server тоже можно запускать Docker, но только Windows-контейнеры.
Что читать дальше по Docker
Чтобы связать тему с соседними практическими материалами, дальше удобно открыть:
- Установка Docker на Ubuntu — начать с установки Docker на Ubuntu.
- Docker Desktop для Windows — подготовить Docker Desktop на Windows.
- Основные команды Docker — перейти к базовой шпаргалке команд.
- Docker и виртуальная машина — разобраться, чем контейнер отличается от виртуальной машины.



