> Какие основные сущности есть в Docker (Python)
Уровень: senior · Роль: backend · Язык: Python · Категория: Технические вопросы
Компании: Black Wall Group (BWG)
Стек: Python, Docker
> Пример ответа
Короткий ответ
Основные сущности Docker - это образ (image), контейнер (container), Dockerfile, том (volume), сеть (network) и registry (реестр). Образ - неизменяемый шаблон файловой системы и метаданных, контейнер - запущенный экземпляр образа с изолированным процессом. Dockerfile описывает сборку образа, volume обеспечивает персистентное хранение, network - связь между контейнерами, а registry хранит и распространяет образы.
Подробное объяснение
Образ (image) - read-only слоистая структура, содержащая файловую систему, зависимости, конфигурацию и команду запуска. Образы собираются из Dockerfile и не изменяются после создания - любые изменения порождают новый слой.
Контейнер (container) - runtime-экземпляр образа. Каждый контейнер имеет изолированные namespace (PID, NET, MNT, UTS, IPC) и cgroups для ограничения ресурсов. Контейнер добавляет writable layer поверх образа, который удаляется при удалении контейнера.
Dockerfile - декларативный скрипт сборки: инструкции FROM, RUN, COPY, ENV, CMD, ENTRYPOINT, EXPOSE. Каждая инструкция создаёт слой, что влияет на размер и кэширование.
Volume - механизм персистентного хранения данных вне жизненного цикла контейнера. Бывают named volumes, bind mounts и tmpfs.
Network - виртуальные сети для изоляции и коммуникации: bridge (по умолчанию), host, none, overlay (для Swarm), macvlan. Контейнеры в одной bridge-сети общаются по имени.
Registry - сервер хранения образов: Docker Hub, private registry, Amazon ECR. Работает по протоколу push/pull.
Дополнительно: docker-compose (оркестрация нескольких контейнеров), docker daemon и CLI - но это уже инструменты, а не сущности.
На практике
Для senior-позиции важно понимать не просто список, а взаимосвязи и trade-off:
- Слои и кэширование: порядок инструкций в Dockerfile критичен - часто меняющиеся слои ставятся в конец, чтобы использовать build cache.
- Multi-stage builds: уменьшают размер образа, отделяя build-зависимости от runtime.
- Healthcheck и restart policies: влияют на надёжность в production.
- Сети: различать bridge (изоляция) и host (производительность), понимать DNS-резолвинг между контейнерами.
- Volumes: bind mount для разработки (горячая перезагрузка), named volume для production данных.
- Безопасность: не запускать контейнер от root, использовать read-only rootfs, ограничивать capabilities.
В Python-проектах типичная проблема - образ с полным virtualenv, который раздувается. Решение - multi-stage: слой с pip install, затем копирование только site-packages.
Пример кода
# Multi-stage build для Python-приложения FROM python:3.12-slim AS builder WORKDIR /app COPY requirements.txt . RUN pip install --prefix=/install -r requirements.txt FROM python:3.12-slim WORKDIR /app COPY --from=builder /install /usr/local COPY . . RUN useradd -m appuser USER appuser EXPOSE 8000 CMD ["uvicorn", "main:app", "--host", "0.0.0.0"]
Как отвечать на собеседовании
Начните с краткого перечисления сущностей, затем углубитесь в 2-3 ключевые. Покажите системное мышление: объясните, как сущности связаны (образ → контейнер, Dockerfile → образ, volume/network → контейнер). Приведите пример из реального опыта: как вы оптимизировали образ или решали проблему с сетями. Если спросят про отличия - чётко разделите image (immutable) и container (mutable). Не перечисляйте все команды Docker - это уровень junior.
Что проверяет интервьюер
- Понимание принципов изоляции и слоистости образов.
- Умение объяснить жизненный цикл контейнера.
- Знание практических аспектов: кэш, multi-stage, сети, volumes.
- Способность рассуждать о trade-off (например, bind mount vs volume).
- Понимание, как Docker вписывается в CI/CD и оркестрацию (Kubernetes, Swarm).
Типичные ошибки
- Путаница между образом и контейнером: "контейнер - это образ" - неверно.
- Утверждение, что данные в контейнере персистентны - writable layer живёт только с контейнером.
- Игнорирование слоёв: "RUN apt-get install" после COPY кода - ломает кэш.
- Непонимание разницы между CMD и ENTRYPOINT.
- Запуск от root в production - грубая ошибка безопасности.
- Ответ только перечислением команд (docker run, docker build) без объяснения сущностей.
> Похожие задачи по Python
Какой опыт работы с базами данных на уровне DevOps или DBA?
Какие вопросы есть у кандидата
Что такое сборка мусора
Что такое bottleneck
> Похожие задачи по backend
Какой опыт работы с базами данных на уровне DevOps или DBA?
Какие вопросы есть у кандидата
Что такое сборка мусора
Что такое bottleneck
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью