Infrastructure
Dockerfile
Скрипт сборки Docker-образа — набор инструкций для создания воспроизводимой среды.
Что такое Dockerfile
Dockerfile — текстовый файл с инструкциями для сборки Docker-образа. Каждая инструкция создаёт новый слой (layer) поверх предыдущего. Слои кешируются: если изменилась только последняя строка — пересобираются только она и последующие.
Dockerfile для ML-проекта
# Базовый образ с CUDA и cuDNN (nvidia/cuda или pytorch/pytorch)
FROM nvidia/cuda:12.3.1-cudnn9-runtime-ubuntu22.04
# Установка Python
RUN apt-get update && apt-get install -y python3-pip python3-dev && \
rm -rf /var/lib/apt/lists/*
# Копировать зависимости отдельно (слой кешируется пока requirements не изменится)
COPY requirements.txt /app/requirements.txt
WORKDIR /app
RUN pip install --no-cache-dir -r requirements.txt
# Копировать код
COPY . /app
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
Важные инструкции
| Инструкция | Назначение |
|---|---|
FROM |
Базовый образ |
RUN |
Выполнить команду при сборке |
COPY / ADD |
Копировать файлы в образ |
ENV |
Переменные окружения |
EXPOSE |
Объявить порт |
CMD / ENTRYPOINT |
Команда при запуске контейнера |
VOLUME |
Точка монтирования |
Оптимизация размера образа
# Многоэтапная сборка — только runtime без dev-инструментов
FROM python:3.11 AS builder
RUN pip install --prefix=/install -r requirements.txt
FROM nvidia/cuda:12.3.1-runtime-ubuntu22.04
COPY --from=builder /install /usr/local
COPY . /app
CMD ["python", "-m", "uvicorn", "main:app"]
Связанные термины
- Docker — платформа, использующая Dockerfile
- Docker Image — результат сборки Dockerfile
- container — запущенный образ
- NVIDIA Container Toolkit — нужен для GPU в контейнерах
Готовы запустить GPU-задачу?
Запустить GPU-сервер