Генератор Dockerfile
Dockerfile относится к тем файлам, которые кажутся короткими, пока не вспомнишь детали: порядок слоёв важен для кэша, COPY package.json идёт перед RUN npm install, а компилируемые языки выигрывают от многоэтапной сборки. Этот генератор пишет готовый к использованию Dockerfile для выбранной технологии, с уже правильной схемой кэширования.
Как создать Dockerfile
-
1
Выберите технологию
Node.js, Python, PHP, Go или Rust. Каждый шаблон использует подходящий базовый образ для языка и правильную команду установки зависимостей.
-
2
Задайте рабочую директорию и порт
Выберите WORKDIR и порт, на котором слушает ваше приложение; оба значения попадут в сгенерированный файл.
-
3
Проверьте Dockerfile
Убедитесь, что строка EXPOSE и команда запуска соответствуют вашему приложению. Шаблоны Go и Rust используют многоэтапную сборку.
-
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 кэширует каждую строку; когда слой меняется, всё, что ниже, пересобирается. Порядок от редко меняющегося к часто меняющемуся:
- Базовый образ
FROM(меняется редко). - Системные пакеты (
apt-get install), редкие изменения. - Манифесты зависимостей (
package.json,requirements.txt,composer.json). - Шаг установки зависимостей. Выполняется только при изменении манифеста.
- Копирование исходников. Самый активный слой; всё после него пересобирается при каждом коммите.
- Компиляция и финальный
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-переменные.
Инструмент доступен на других языках
- Generator Dockerfile [PL]
- Générateur de Dockerfile [FR]
- Dockerfile-generator [SV]
- Gerador de Dockerfile [PT]
- Dockerfile Oluşturucu [TR]
- مولد ملفات Docker [AR]
- Dockerfile 생성기 [KO]
- Dockerfile生成 [JA]
- Dockerfile-generator [NL]
- ตัวสร้าง Dockerfile [TH]
- Dockerfile Generator [EN]
- Dockerfile 生成器 [ZH]
- Generador de Dockerfile [ES]
- Generator Dockerfile [ID]
- Trình tạo Dockerfile [VI]
- Dockerfile-Generator [DE]
- Generatore di Dockerfile [IT]