Генератор Dockerfile

Создайте готовый к продакшену Dockerfile для Node.js, Python, Go, Java, .NET, Rust или статического сайта: многоэтапная сборка, не-root пользователь и .dockerignore.

Dockerfile
.dockerignore

В продакшене фиксируйте точные версии или дайджесты образов и регулярно пересобирайте их, чтобы получать обновления безопасности.

Похожие Инструменты

Просмотреть Все

Что такое Генератор Dockerfile?

Создайте Dockerfile по актуальным лучшим практикам для Node.js, Python, Go, Java (Maven), .NET (ASP.NET Core), Rust или статический сайт на Nginx. Среди параметров — многоэтапная сборка для меньших образов, запуск от не-root пользователя, версия рантайма, порт и команда запуска; инструмент также создаёт подходящий .dockerignore.

Как пользоваться Генератор Dockerfile

  1. Выберите Язык / стек.
  2. Задайте Версия рантайма (тег образа), Порт и стартовый файл, модуль, JAR или имя бинарника.
  3. Оставьте включёнными Многоэтапная сборка (образ меньше) и Запуск от непривилегированного пользователя, если нет причин поступить иначе.
  4. Скачайте 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, ускоряя сборку и не пуская секреты в образ.

Другие категории