Генератор Dockerfile

Докерфайл
Результаты

Dockerfile относится к тем файлам, которые кажутся короткими, пока не вспомнишь детали: порядок слоёв важен для кэша, COPY package.json идёт перед RUN npm install, а компилируемые языки выигрывают от многоэтапной сборки. Этот генератор пишет готовый к использованию Dockerfile для выбранной технологии, с уже правильной схемой кэширования.

Как создать Dockerfile

  1. 1

    Выберите технологию

    Node.js, Python, PHP, Go или Rust. Каждый шаблон использует подходящий базовый образ для языка и правильную команду установки зависимостей.

  2. 2

    Задайте рабочую директорию и порт

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

  3. 3

    Проверьте Dockerfile

    Убедитесь, что строка EXPOSE и команда запуска соответствуют вашему приложению. Шаблоны Go и Rust используют многоэтапную сборку.

  4. 4

    Скопируйте Dockerfile

    Скопируйте результат, вставьте его в корень репозитория и соберите образ.

Зачем нужны многоэтапные сборки

Наивный Dockerfile устанавливает весь тулчейн компилятора в финальный образ. Многоэтапная сборка даёт этап “builder”, который компилирует, и финальный этап, который несёт только скомпилированный артефакт:

FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
USER node
EXPOSE 3000
CMD ["node", "dist/index.js"]

Финальный образ избавляется от всех dev-зависимостей, исходников и кэша сборки, часто уменьшая размер на 60-80 процентов.

Варианты базового образа

Шаблоны используют slim или alpine, где это возможно. Если вы настраиваете базовый образ сами, типичные варианты такие:

Вариант Типичный размер Когда выбирать
full 300-900 МБ Образы для разработки, необычные системные зависимости
slim 80-200 МБ Стандарт для продакшена в большинстве языков
alpine 30-100 МБ Маленькие образы, осторожно с glibc и musl
distroless 20-80 МБ Максимальная безопасность; без shell и менеджера пакетов

Правила кэширования слоёв

Docker кэширует каждую строку; когда слой меняется, всё, что ниже, пересобирается. Порядок от редко меняющегося к часто меняющемуся:

  1. Базовый образ FROM (меняется редко).
  2. Системные пакеты (apt-get install), редкие изменения.
  3. Манифесты зависимостей (package.json, requirements.txt, composer.json).
  4. Шаг установки зависимостей. Выполняется только при изменении манифеста.
  5. Копирование исходников. Самый активный слой; всё после него пересобирается при каждом коммите.
  6. Компиляция и финальный CMD.

Нарушение этого порядка - самая частая причина медленных сборок в CI.

Чек-лист безопасности

  • Запускайте не от root. Поставьте USER appuser (или USER 1000) ближе к концу.
  • Фиксируйте версии. python:3.12.7-slim лучше python:3.12, которое лучше python:latest.
  • Задавайте явный WORKDIR вместо расчёта на /.
  • Используйте COPY, а не ADD для локальных файлов; у ADD есть побочные эффекты автораспаковки.
  • Добавляйте HEALTHCHECK, чтобы оркестраторы могли заметить зависший процесс.
  • Очищайте кэш пакетов в той же строке RUN: apt-get install ... && rm -rf /var/lib/apt/lists/*.

Часто задаваемые вопросы

Slim - более безопасный вариант по умолчанию, потому что он по-прежнему основан на glibc, как и большинство предварительно скомпилированных wheels библиотек. Alpine использует musl и иногда вызывает загадочные ошибки в Python (pandas, numpy) или Node (нативные модули node-gyp). Выбирайте alpine, когда размер образа критичен и вы протестировали стек.

Да, добавьте его в проект. Без него Docker отправляет весь репозиторий демону как контекст сборки: историю git, node_modules, локальные .env-файлы, тесты. Это медленно, тратит кэш и раскрывает секреты.

Да. Используйте docker buildx с опцией --platform, чтобы собрать образ сразу для обеих архитектур. Базовые образы, которые применяют шаблоны, публикуют варианты arm64.

Нет. Выбор технологии, рабочей директории и порта используется только для генерации Dockerfile на этой странице; ничего не сохраняется и не передаётся.

Сопутствующие инструменты

Справочная таблица ASCII

Полная таблица ASCII от 0 до 127 с десятичным, шестнадцатеричным, восьмеричным и двоичным представлением, а также записью числовых ссылок HTML, включая NUL, LF и DEL.

Справочник сочетаний клавиш

Ищите документированные сочетания по умолчанию для VS Code, Chrome и Bash с GNU Readline в macOS, Windows и Linux.

Справочник символов HTML

Справочник HTML-сущностей с поиском, их именованными и числовыми кодами, а также копированием специальных символов и знаков одним кликом.

Счетчик FPS

Измерьте FPS браузера через requestAnimationFrame: сглаживание, минимальная и максимальная частота кадров, порог предупреждения и график по желанию. Работает локально, без загрузок и API.

Генератор случайных букв

Генерируйте случайные буквы A-Z. Выберите количество, верхний или нижний регистр либо смешанный вариант для игр, заданий и уроков.

Генератор цветовой палитры

Создавайте монохромные, аналоговые, комплементарные, триадные или тетрадные палитры из базового HEX-цвета и экспортируйте готовые CSS-переменные.

Инструмент доступен на других языках