Wiki
DevOps

Dockerfile — базовые правила

Dockerfile описывает сборку Docker-образа: FROM, RUN, COPY, CMD. Лучшие практики: multi-stage build, минимальный base, .dockerignore, layer-cache.

Dockerfile — текстовый скрипт сборки Docker-образа. Инструкции: FROM (базовый образ), RUN (выполнить команду), COPY/ADD (скопировать файлы), WORKDIR, ENV, EXPOSE, CMD, ENTRYPOINT. Каждая инструкция создаёт layer — кэшируемый слой.

Best practices: (1) multi-stage build — separate build-stage (с компилятором) и runtime-stage (только результат). Пример: node:22-alpine as build → COPY .next/standalone into distroless. Финальный образ 50 МБ вместо 1 ГБ. (2) минимальный base — alpine (5 МБ) или distroless (без shell) вместо ubuntu (70 МБ). (3) layer cache order — сначала COPY package.json + npm install, потом COPY код — пере-install только при изменении package.json.

Ещё: (4) .dockerignore — не копировать node_modules, .git, .env в build context (ускоряет билд, уменьшает образ). (5) non-root user — `USER 1000` в конце (безопасность). (6) healthcheck — `HEALTHCHECK CMD curl -f http://localhost/health` (Docker/K8s знают, жив ли контейнер).

Практика: наш Dockerfile для Next.js — 3-stage (deps → build → runner), финал 150 МБ на node:22-alpine + standalone. Готовые примеры Dockerfile для Node/Python/Go/Rust — в `/docs/docker-recipes`.

Частые вопросы

COPY или ADD?
COPY — всегда локальные файлы. ADD — умеет download по URL и распаковку .tar. Для локальных всегда COPY (проще и явнее).
Как ускорить билд?
BuildKit (по умолчанию с Docker 23) + `--mount=type=cache` для npm/apt-кэша. Экономит 80 % времени rebuild.

Смотрите также