Контейнер упаковывает сервис со всеми зависимостями: версия Python, библиотеки, системные пакеты. Он одинаково запускается на ноутбуке, в CI и на сервере — конец историям «у меня работает».
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
USER nobody
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
Что важно знать
- Образ — шаблон из слоёв, контейнер — запущенный процесс.
- Порядок инструкций под кэш: зависимости до кода.
- Конфигурация и ключи — через переменные окружения или секреты, не в образе.
- docker compose — локальное окружение из нескольких сервисов.
- Образы с CUDA для GPU огромные — их собирают отдельно и аккуратно.