Расскажи про свой опыт работы с Docker

«Расскажи про свой опыт работы с Docker» — вопрос из категории DevOps и инфраструктура, который задают на 46% собеседований Data Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Я использую Docker около 3 лет для изоляции, развёртывания и масштабирования сервисов, в основном в контексте инфраструктуры данных (ETL, базы, оркестраторы).

Основные направления работы:

  • Контейнеризация ETL-задач и микросервисов: Упаковка Python-скриптов (Pandas, Airflow), API на FastAPI и служебных утилит в Docker-образы.
  • Локальная разработка и тестирование: Использование docker-compose для поднятия всего стека зависимостей локально (например, Airflow + PostgreSQL + Redis). Это гарантирует идентичность сред.
  • Интеграция с CI/CD: Настройка пайплайнов в GitLab CI/GitHub Actions для автоматической сборки образов, запуска тестов и публикации в приватный registry.

Пример оптимизированного Dockerfile для Python-сервиса:

# Этап 1: Сборка зависимостей
FROM python:3.9-slim as builder
WORKDIR /app
COPY requirements.txt .
RUN pip install --user --no-cache-dir -r requirements.txt

# Этап 2: Финальный образ
FROM python:3.9-slim
WORKDIR /app

# Копируем только установленные пакеты из этапа builder
COPY --from=builder /root/.local /root/.local
# Копируем код приложения
COPY src/ .

# Добавляем установленные пакеты в PATH
ENV PATH=/root/.local/bin:$PATH

# Запуск приложения
CMD ["python", "main.py"]

Ключевые практики, которые я применяю:

  • Многоступенчатые сборки для минимизации размера итогового образа (сокращение на 60-70%).
  • Использование .dockerignore для исключения ненужных файлов (кэша, логов, .git).
  • Настройка docker-compose.yml с изолированными сетями, volumes для persistent data (например, для БД) и переменными окружения.
  • Работа с приватными Docker Registry (Harbor, GitLab Registry) для хранения образов.

В продакшене имею опыт управления контейнеризированными сервисами как в standalone-режиме, так и под оркестратором Kubernetes.

Видео-ответы