foundation
Образы
Упаковывайте слои ФС приложения, метаданные, entrypoint и runtime defaults в неизменяемые артефакты для deploy.
Docker-образ — неизменяемый артефакт: упорядоченные слои файловой системы, метаданные, команда по умолчанию, exposed ports и допущения runtime. Для Node.js-сервисов нужно зафиксировать base image, установить зависимости из lockfile, исключить dev-only файлы и собирать воспроизводимо из исходников.
| Понятие | Смысл | |---------|-------| | Tag | Человекочитаемая метка вроде `1.2.3` — мутабельна при переиспользовании | | Digest | Хеш содержимого `sha256:…` — неизменная идентичность | | Layer | Кэшируемая дельта ФС от каждого шага сборки |
FROM node:20-bookworm-slim@sha256:…
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --omit=dev
COPY dist ./dist
USER node
CMD ["node", "dist/server.js"]
Продвигайте один и тот же digest между окружениями вместо пересборки на каждом этапе. Сканируйте образы на CVE и держите runtime-образы компактными.
На интервью: tag vs digest, slim-образы, SBOM, сканирование уязвимостей и почему пересборка на каждое окружение даёт drift.
Типовые ошибки: мутабельный тег `latest`; раздутые образы замедляют deploy и расширяют attack surface; секреты или локальный `node_modules` в слоях.
Компромисс — удобство тегов против воспроизводимости, аудируемости и безопасности деплоя.
Чеклист:
- Фиксируйте base image по digest при повышенном риске.
- Сборка из закоммиченного lockfile.
- Promotion неизменяемых образов между окружениями.
- Регулярное сканирование и контроль размера образа.