Docker для разработчика: минимум который спрашивают на собесе
Что нужно знать про Docker Junior Python-разработчику: Dockerfile, docker-compose, базовые команды и типичные вопросы на собеседовании с ответами.

Оглавление
Почему Docker стал обязательным
Раньше Docker был плюсом в резюме. Сейчас это базовое требование почти в каждой вакансии для разработчика. Причина простая: без Docker "работает у меня" — это отговорка, которую никто не принимает.
Junior, который умеет поднять приложение через docker-compose up, имеет реальное преимущество.
Что такое Docker (объяснение для собеса)
На собеседовании часто спрашивают: "Объясни Docker своими словами".
Ответ: Docker — инструмент контейнеризации. Контейнер — это изолированное окружение с приложением и всеми его зависимостями. Контейнер запускается одинаково на любой машине, где есть Docker.
Чем отличается от виртуальной машины?
- ВМ виртуализирует железо и запускает полноценную ОС
- Контейнер использует ядро хостовой ОС, только изолирует процессы и файловую систему
- Контейнер запускается за секунды, ВМ — минуты
- Контейнер потребляет десятки мегабайт, ВМ — гигабайты
Ключевые понятия
Image (образ) — неизменяемый шаблон для создания контейнеров. Аналог класса в ООП.
Container (контейнер) — запущенный экземпляр образа. Аналог объекта.
Dockerfile — инструкции для сборки образа.
Registry — хранилище образов. Публичный: Docker Hub. Корпоративный: AWS ECR, GitLab Registry.
Volume — постоянное хранилище данных вне контейнера.
Network — виртуальная сеть для общения контейнеров.
Dockerfile: что нужно знать
Минимальный Dockerfile для FastAPI-приложения:
Почему порядок важен — вопрос на собеседовании
Docker кеширует каждый слой. Если сначала скопировать код, а потом ставить зависимости — при любом изменении кода кеш зависимостей инвалидируется. Это замедляет сборку в разы.
Правило: сначала всё что меняется редко, потом — код.
FROM — выбор базового образа
На собеседовании могут спросить: "Почему вы выбрали slim, а не alpine?"
Ответ: Alpine использует musl вместо glibc. Некоторые Python-пакеты (особенно с C-расширениями) не работают или требуют дополнительной сборки на Alpine. Slim — компромисс: небольшой размер без проблем совместимости.
Полный разбор написания и оптимизации Dockerfile — в темах «Создание Dockerfile» и «Оптимизация образов» курса по Docker.
Базовые команды Docker
docker-compose: главный инструмент разработчика
В реальной разработке приложение состоит из нескольких сервисов. docker-compose запускает их все одной командой.
Подробный разбор — в темах «Docker Compose» и «Хранение данных» курса.
Команды docker-compose
Частые вопросы на собесе
"Как передать переменные окружения в контейнер?"
Важно: никогда не храни секреты в Dockerfile — они попадут в образ и историю слоёв.
"Что такое volumes и зачем они нужны?"
Контейнер — эфемерен. Когда он удаляется, все данные внутри исчезают. Volume — это монтирование директории с хостовой машины (или Docker-managed storage) внутрь контейнера.
"Как контейнеры общаются между собой?"
В docker-compose все сервисы в одной сети по умолчанию. Контейнеры обращаются друг к другу по имени сервиса.
"Как работают сети Docker без docker-compose?"
Без compose сеть нужно создавать и подключать вручную:
Bridge (по умолчанию) изолирует контейнеры в собственной подсети с DNS по именам контейнеров. Host-режим (--network host) убирает изоляцию сети — контейнер использует сетевой стек хоста напрямую; так теряется изоляция портов, зато не нужен -p для проброса.
"Что такое multi-stage build?"
Multi-stage build уменьшает финальный образ — в production не нужны компиляторы и build-tools. Подробнее — в теме «Многоэтапная сборка».
Типичные ошибки Junior
1. Запуск от root
2. Секреты в образе
3. Запуск docker run вместо docker-compose
В реальных проектах всегда docker-compose — он описывает всю инфраструктуру как код.
4. Игнорирование .dockerignore
# .dockerignore
.git
.env
__pycache__
*.pyc
.venv
node_modules
*.log
Без .dockerignore в образ попадают тонны ненужного, включая секреты из .env.
Чек-лист для собеседования
- Могу объяснить разницу между образом и контейнером
- Написал Dockerfile для Python-приложения
- Понимаю порядок инструкций и кеширование слоёв
- Умею пользоваться docker-compose (up, down, logs, exec)
- Знаю зачем нужны volumes
- Понимаю как сервисы общаются по имени
- Знаю про .dockerignore и почему он важен
Практика
Лучший способ запомнить Docker — поднять своё приложение в контейнере. Если у тебя ещё нет проекта, возьми любой учебный FastAPI-туториал и добавь Dockerfile + docker-compose.yml. Это займёт час и запомнится лучше любой статьи.
Дальше можно закрепить теорию системно:
- Курс по Docker — от основ контейнеризации до production, security и оркестрации.
- Тест по Docker — проверить, что из этой статьи запомнилось, вопросами с разбором.