Гайды

Docker: контейнеризация приложений

Образ и контейнер, Dockerfile, сборка и запуск, .dockerignore, кэш слоёв и базовая безопасность.

~10 мин чтения

Docker: контейнеризация приложений

Docker упаковывает приложение и зависимости в образ (immutable слои), запускаемый как контейнер на общем ядре ОС (Linux namespaces/cgroups). Этот гайд — основы для разработчика; Compose — Docker Compose, multi-stage — многостадийные образы. Сеть и тома — отдельный гайд; справка Docker — networking и volumes.


1. Образ и контейнер

  • Image — шаблон (слои FS + метаданные).
  • Container — запущенный экземпляр с изолированным FS/сетью/PID (в пределах модели Docker).

2. Dockerfile ключевые инструкции

ИнструкцияНазначение
FROMБазовый образ
WORKDIRРабочий каталог
COPY / ADDФайлы в образ
RUNВыполнить при сборке
ENVПеременные окружения
EXPOSEДокументация порта (не открывает само)
USERНе root в проде
CMD / ENTRYPOINTКоманда по умолчанию при запуске

3. Сборка и запуск

bash
docker build -t myapp:1.0 .
docker run --rm -p 8000:8000 -e DEBUG=0 myapp:1.0

-p host:container, -e, -v для монтирования томов.


4. .dockerignore

Исключите .git, __pycache__, node_modules, .venv — ускорение сборки и меньше утечек в слои.


5. Кэш слоёв

Чаще меняющиеся файлы копируйте после установки зависимостей:

dockerfile
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .

6. Безопасность

  • Сканирование образов (Trivy, Grype).
  • Минимальные базы (distroless, alpine с оговорками по libc).
  • Секреты через runtime (--secret, orchestrator secrets), не ARG в финальном слое.

7. Healthcheck и ресурсы

dockerfile
HEALTHCHECK --interval=30s --timeout=3s CMD curl -f http://127.0.0.1:8000/health || exit 1

В docker run / Compose задавайте --memory / cpus для предсказуемости на dev-машине; в k8s — resources в манифесте.


8. Чек-лист

  • Версия тега образа не только latest.
  • Healthcheck в Dockerfile или оркестраторе.
  • Логи в stdout/stderr.
  • Платформа (--platform) при кросс-сборке.
  • docker compose config в CI для валидации YAML.

Дальше: Compose · Multi-stage · тег Docker