
Docker для разработчика: минимум который спрашивают на собесе
Почему 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 — компромисс: небольшой размер без проблем совместимости.
Базовые команды Docker
docker-compose: главный инструмент разработчика
В реальной разработке приложение состоит из нескольких сервисов. docker-compose запускает их все одной командой.
Команды docker-compose
Частые вопросы на собесе
"Как передать переменные окружения в контейнер?"
Важно: никогда не храни секреты в Dockerfile — они попадут в образ и историю слоёв.
"Что такое volumes и зачем они нужны?"
Контейнер — эфемерен. Когда он удаляется, все данные внутри исчезают. Volume — это монтирование директории с хостовой машины (или Docker-managed storage) внутрь контейнера.
"Как контейнеры общаются между собой?"
В docker-compose все сервисы в одной сети по умолчанию. Контейнеры обращаются друг к другу по имени сервиса.
"Что такое 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. Это займёт час и запомнится лучше любой статьи.
На Tech Path Finder есть курс с практическими заданиями по DevOps-тематике — Docker, CI/CD, мониторинг.