Generador de Dockerfile

Genera un Dockerfile listo para producción para Node.js, Python, Go, Java, .NET, Rust o un sitio estático: builds multietapa, usuario no root y un .dockerignore a juego.

Dockerfile
.dockerignore

En producción fija versiones exactas o digests de las imágenes y reconstruye con regularidad para recibir parches de seguridad.

Herramientas Relacionadas

Ver Todas

¿Qué es Generador de Dockerfile?

Crea un Dockerfile que sigue las buenas prácticas actuales para Node.js, Python, Go, Java (Maven), .NET (ASP.NET Core), Rust o un sitio estático servido con Nginx. Las opciones incluyen builds multietapa para imágenes más pequeñas, ejecución con un usuario no root, la versión del runtime, el puerto y el comando de arranque, y la herramienta también genera un .dockerignore a juego.

Cómo usar Generador de Dockerfile

  1. Elige el Lenguaje / stack.
  2. Configura la Versión del runtime (tag de imagen), el Puerto y el nombre del archivo de arranque, módulo, JAR o binario.
  3. Deja marcados Build multietapa (imagen más pequeña) y Ejecutar con un usuario no root salvo que tengas un motivo para no hacerlo.
  4. Descarga el Dockerfile y el .dockerignore en la raíz de tu proyecto y ejecuta docker build -t myapp ..

Ejemplo

Entrada
Node.js 22, puerto 3000, archivo de arranque dist/index.js, multietapa, no root, npm run build
Salida
# 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"]

Cuándo usar Generador de Dockerfile

Úsalo para contenerizar rápidamente un servicio web o una API típicos con valores predeterminados razonables. Revisa el archivo generado para tu proyecto: los comandos de build, las carpetas de salida y los puntos de entrada varían, y las dependencias nativas pueden necesitar paquetes de sistema adicionales. Fija versiones exactas o digests de las imágenes para builds de producción reproducibles.

Cómo funciona Generador de Dockerfile

Cada stack tiene una plantilla escrita para sus imágenes oficiales. Los builds multietapa instalan y compilan en una imagen SDK completa y copian solo el resultado en un runtime ligero: Node instala las dependencias de producción con npm ci --omit=dev en una etapa aparte; Python crea un virtualenv y lo copia en python:<ver>-slim; Go compila un binario estático (CGO_ENABLED=0, -trimpath -ldflags="-s -w") en distroless/static:nonroot; Java copia el JAR en una imagen Temurin solo con JRE; .NET publica en la imagen de runtime aspnet y usa su usuario integrado $APP_UID; Rust copia el binario de release en debian:bookworm-slim. El modo no root usa el usuario sin privilegios de la propia imagen (node, nonroot, app) o crea uno con UID 10001. Los manifiestos de dependencias se copian antes que el código para que la caché de capas de Docker evite reinstalar cuando solo cambia el código.

Casos de Uso Comunes

  • Contenerizar una API de Node.js o Python para desplegarla
  • Reducir la imagen de un servicio Go con un runtime distroless
  • Servir un build de React/Vue/Astro con Nginx sin root
  • Enseñar o revisar buenas prácticas de Dockerfile

Nota de Seguridad

Nunca hagas COPY de archivos .env o credenciales en una imagen; pasa los secretos en tiempo de ejecución o con los secret mounts de BuildKit.

Preguntas Frecuentes

¿Por qué usar un build multietapa?

Los compiladores, las dependencias de desarrollo y el código fuente se quedan en la etapa de build, así que la imagen final es más pequeña, arranca más rápido y tiene menos paquetes que puedan contener vulnerabilidades.

¿Por qué ejecutar con un usuario no root?

Si la aplicación se ve comprometida, el atacante no obtiene root dentro del contenedor, lo que limita el daño y bloquea algunas técnicas de escape del contenedor.

¿Para qué sirve .dockerignore?

Excluye del contexto de build archivos como node_modules, .git y .env, lo que acelera los builds y mantiene los secretos fuera de la imagen.

Explora más categorías