Генератор Dockerfile
Создайте готовый к продакшену Dockerfile для Node.js, Python, Go, Java, .NET, Rust или статического сайта: многоэтапная сборка, не-root пользователь и .dockerignore.
В продакшене фиксируйте точные версии или дайджесты образов и регулярно пересобирайте их, чтобы получать обновления безопасности.
Похожие Инструменты
Просмотреть ВсеЧто такое Генератор Dockerfile?
Создайте Dockerfile по актуальным лучшим практикам для Node.js, Python, Go, Java (Maven), .NET (ASP.NET Core), Rust или статический сайт на Nginx. Среди параметров — многоэтапная сборка для меньших образов, запуск от не-root пользователя, версия рантайма, порт и команда запуска; инструмент также создаёт подходящий .dockerignore.
Как пользоваться Генератор Dockerfile
- Выберите Язык / стек.
- Задайте Версия рантайма (тег образа), Порт и стартовый файл, модуль, JAR или имя бинарника.
- Оставьте включёнными Многоэтапная сборка (образ меньше) и Запуск от непривилегированного пользователя, если нет причин поступить иначе.
- Скачайте Dockerfile и .dockerignore в корень проекта и выполните
docker build -t myapp ..
Пример
Node.js 22, port 3000, start file dist/index.js, multi-stage, non-root, npm run build
# syntax=docker/dockerfile:1 # ---- dependencies (production only) ---- FROM node:22-alpine AS deps WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci --omit=dev # ---- build ---- FROM node:22-alpine AS build WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci COPY . . RUN npm run build # ---- runtime ---- FROM node:22-alpine ENV NODE_ENV=production WORKDIR /app COPY --from=deps --chown=node:node /app/node_modules ./node_modules COPY --from=build --chown=node:node /app/dist ./dist COPY --chown=node:node package.json ./ # The official Node images ship an unprivileged "node" user USER node EXPOSE 3000 CMD ["node", "dist/index.js"]
Когда использовать Генератор Dockerfile
Используйте, чтобы быстро упаковать в контейнер типичный веб-сервис или API с разумными настройками по умолчанию. Проверьте созданный файл под свой проект: команды сборки, папки результата и точки входа различаются, а нативным зависимостям могут понадобиться дополнительные системные пакеты. Фиксируйте точные версии или дайджесты образов для воспроизводимых боевых сборок.
Как работает Генератор Dockerfile
Для каждого стека есть шаблон, написанный под его официальные образы. Многоэтапные сборки устанавливают зависимости и компилируют в полном образе SDK и копируют в компактный рантайм только результат: Node ставит продакшен-зависимости через npm ci --omit=dev в отдельном этапе; Python собирает virtualenv и копирует его в python:<ver>-slim; Go компилирует статический бинарник (CGO_ENABLED=0, -trimpath -ldflags="-s -w") в distroless/static:nonroot; Java копирует JAR в образ Temurin только с JRE; .NET публикует в образ рантайма aspnet и использует его встроенного пользователя $APP_UID; Rust копирует релизный бинарник в debian:bookworm-slim. Режим не-root использует собственного непривилегированного пользователя образа (node, nonroot, app) или создаёт пользователя с UID 10001. Файлы манифестов зависимостей копируются раньше исходников, чтобы кеш слоёв Docker не переустанавливал зависимости, когда меняется только код.
Распространенные Случаи Использования
- Упаковка API на Node.js или Python в контейнер для развёртывания
- Уменьшение образа сервиса на Go с рантаймом distroless
- Раздача сборки React/Vue/Astro через Nginx без root
- Обучение лучшим практикам Dockerfile и их проверка
Примечание по Безопасности
Никогда не копируйте файлы .env и учётные данные в образ через COPY; передавайте секреты во время выполнения или через монтирование секретов BuildKit.
Часто Задаваемые Вопросы
Зачем нужна многоэтапная сборка?
Компиляторы, зависимости для разработки и исходники остаются в сборочном этапе, поэтому итоговый образ меньше, быстрее запускается и содержит меньше пакетов, в которых могут быть уязвимости.
Зачем запускать от не-root пользователя?
Если приложение будет скомпрометировано, злоумышленник не получит root внутри контейнера, что ограничивает ущерб и блокирует некоторые приёмы выхода из контейнера.
Что делает .dockerignore?
Он исключает из контекста сборки файлы вроде node_modules, .git и .env, ускоряя сборку и не пуская секреты в образ.