Infrastructure

Docker Image

Неизменяемый снимок файловой системы с приложением, используемый для запуска контейнеров.

Что такое Docker Image

Docker Image (образ) — неизменяемый слоистый снимок файловой системы, содержащий приложение, его зависимости, конфигурацию и runtime. Образ — шаблон для контейнеров: один образ можно запустить как десятки контейнеров.

Образы хранятся в реестрах (Docker Hub, GHCR, private registry) и идентифицируются по имени и тегу: vllm/vllm-openai:latest, nvidia/cuda:12.3.1-cudnn9-runtime-ubuntu22.04.

Работа с образами

# Скачать образ
docker pull vllm/vllm-openai:latest

# Просмотреть скачанные образы
docker images

# Собрать образ из Dockerfile
docker build -t my-app:v1.0 .

# Запустить контейнер из образа
docker run --gpus all my-app:v1.0

# Опубликовать образ
docker tag my-app:v1.0 myusername/my-app:v1.0
docker push myusername/my-app:v1.0

Слоистая архитектура

Каждая инструкция RUN, COPY в Dockerfile создаёт новый слой. Слои неизменяемы и кешируются:

[ubuntu 22.04]           ← базовый слой
[apt install python3]    ← слой 1
[pip install torch]      ← слой 2 (14 ГБ — torch heavy)
[COPY app.py]            ← слой 3 (изменяется часто)

При пересборке образа после изменения app.py слои 1–2 берутся из кеша. Поэтому важно помещать редко меняющиеся слои в начало Dockerfile.

Базовые образы для ML

Образ Содержит Размер
nvidia/cuda:12.3.1-runtime-ubuntu22.04 CUDA runtime ~4 ГБ
nvidia/cuda:12.3.1-cudnn9-devel-ubuntu22.04 CUDA + cuDNN + nvcc ~8 ГБ
pytorch/pytorch:2.3.0-cuda12.1-cudnn8-runtime PyTorch + CUDA ~6 ГБ
vllm/vllm-openai:latest vLLM + CUDA + PyTorch ~12 ГБ

Связанные термины

Готовы запустить GPU-задачу?

Запустить GPU-сервер