multi-stage-dockerfileOfficialмногоэтапный Dockerfile GitHub Copilot
github/awesome-copilot
Многоэтапный Dockerfile.
Установка
npx -y skills add github/awesome-copilot --skill multi-stage-dockerfile --agent claude-codeЦель — помочь создавать эффективные многоэтапные Dockerfile по лучшим практикам, дающие меньшие и более безопасные образы контейнеров.
Многоэтапная структура
- Используйте этап-сборщик (builder) для компиляции, установки зависимостей и других операций времени сборки
- Используйте отдельный runtime-этап, включающий только необходимое для запуска приложения
- Копируйте из builder в runtime только нужные артефакты
- Давайте этапам осмысленные имена через
AS(например,FROM node:18 AS builder) - Располагайте этапы логично: зависимости → сборка → тесты → runtime
Базовые образы
- По возможности начинайте с официальных минимальных базовых образов
- Указывайте точные теги версий для воспроизводимых сборок (например,
python:3.11-slim, а не простоpython) - Рассмотрите distroless-образы для runtime-этапов, где уместно
- Используйте Alpine-образы для меньшего размера, когда совместимо с приложением
- Обеспечьте в runtime-образе минимально необходимые зависимости
Оптимизация слоёв
- Организуйте команды для максимального кеширования слоёв
- Размещайте часто меняющиеся команды (изменения кода) после реже меняющихся (установка зависимостей)
- Используйте
.dockerignore, чтобы не включать лишние файлы в контекст сборки - Объединяйте связанные RUN-команды через
&&, чтобы сократить число слоёв - Рассмотрите
COPY --chownдля установки прав в один шаг
Практики безопасности
- Избегайте запуска контейнеров от root — используйте инструкцию
USERдля не-root пользователя - Удаляйте инструменты сборки и лишние пакеты из финального образа
- Сканируйте финальный образ на уязвимости
- Устанавливайте ограничительные права на файлы
- Используйте многоэтапную сборку, чтобы не включать секреты сборки в финальный образ
Производительность
- Используйте build-аргументы для конфигурации, меняющейся между окружениями
- Эффективно используйте кеш сборки, упорядочивая слои от реже к чаще меняющимся
- Рассмотрите распараллеливание шагов сборки, где возможно
- Задавайте подходящие переменные окружения вроде
NODE_ENV=productionдля оптимизации runtime - Используйте подходящие healthcheck для типа приложения через инструкцию
HEALTHCHECK
Из того же репозитория
git-commitOfficial — git коммит GitHub Copilot
github/awesome-copilot
Git коммит.
gh-cliOfficial — GitHub CLI Awesome Copilot
github/awesome-copilot
GitHub CLI.
excalidraw-diagram-generatorOfficial — генератор диаграмм Excalidraw GitHub
github/awesome-copilot
Генератор диаграмм Excalidraw.
documentation-writerOfficial — писатель документации GitHub Copilot
github/awesome-copilot
Писатель документации.
prdOfficial — PRD GitHub Copilot
github/awesome-copilot
Документ требований к продукту.
refactorOfficial — рефакторинг GitHub Copilot
github/awesome-copilot
Рефакторинг.
