Ответ
Для создания Docker-образа Python-приложения используется файл Dockerfile
, который содержит пошаговые инструкции для сборки. Процесс включает выбор базового образа, установку зависимостей, копирование кода и определение команды запуска.
Базовый пример Dockerfile
:
# 1. Выбор базового образа. Используем легковесный 'slim' вариант.
FROM python:3.9-slim
# 2. Установка рабочей директории внутри контейнера.
WORKDIR /app
# 3. Копирование файла зависимостей.
COPY requirements.txt .
# 4. Установка зависимостей.
# --no-cache-dir уменьшает размер образа.
RUN pip install --no-cache-dir -r requirements.txt
# 5. Копирование исходного кода приложения.
COPY . .
# 6. Определение команды для запуска приложения при старте контейнера.
CMD ["python", "-u", "main.py"]
Ключевые практики для оптимизации:
- Оптимизация кэширования слоев: Копирование
requirements.txt
и установка зависимостей выполняются до копирования исходного кода. Это позволяет Docker использовать кэш для слоя с зависимостями, если меняется только код, что значительно ускоряет пересборку. - Использование
.dockerignore
: Создайте файл.dockerignore
, чтобы исключить из образа ненужные файлы и директории (например,.git
,__pycache__
,venv
), уменьшая его размер и предотвращая утечку чувствительных данных. - Многоэтапные сборки (Multi-stage builds): Используются для сложных проектов, где для сборки требуются одни зависимости, а для запуска — другие. Это позволяет сохранить финальный образ минимальным, исключив из него сборочное окружение.