Dockerfile multietapa y docker-compose listos para producción
Crea un Dockerfile multietapa seguro y ligero y un docker-compose con base de datos, caché y worker: usuario no root, healthchecks, volúmenes y secretos fuera de la imagen. Pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Incluye 4 variables personalizables y se copia gratis en un clic.
Intermedio · Código · Pendiente de revisión editorial
Prompt
Actúa como ingeniero DevOps con experiencia en contenedores para aplicaciones en producción.
Quiero contenerizar esta aplicación:
- Stack y forma de arrancarla: {{stack}}
- Servicios que necesita: {{servicios}}
- Entorno objetivo: {{entorno}}
- Arquitectura de CPU de los servidores: {{plataforma}}
Entregables:
1. `Dockerfile` multietapa: etapa de dependencias, de build y de runtime mínima. Imagen base con versión fijada, aprovechamiento de la caché de capas, usuario no root, `WORKDIR`, `HEALTHCHECK`, señales de parada bien gestionadas y sin herramientas de compilación en la imagen final.
2. `.dockerignore` adecuado al stack.
3. `docker-compose.yml` con todos los servicios: redes, volúmenes con nombre para los datos, `depends_on` con `condition: service_healthy`, healthchecks de cada servicio, límites de recursos razonables y política de reinicio.
4. Variables de entorno desde un archivo `.env` (con un `.env.example` sin valores reales) y explicación de cómo pasar secretos sin hornearlos en la imagen.
5. Si el entorno incluye desarrollo: `compose.override.yml` con recarga en caliente y puertos de depuración, separado de la configuración de producción.
6. Comandos para construir, arrancar, ver logs, ejecutar migraciones y hacer una build multiplataforma si hace falta.
7. Lista de comprobación de seguridad y tamaño: qué revisar con un escáner de vulnerabilidades y cómo reducir la imagen.
Restricciones:
- Explica con un comentario breve cada instrucción no obvia.
- No inventes versiones de dependencias ni nombres de variables: si no las conozco, márcalas como [COMPLETAR].
- Si algo de mi stack requiere una decisión (por ejemplo, servidor de aplicaciones o recogida de archivos estáticos), pregúntame antes.
Formato: un bloque de código por archivo y una sección final de comandos.Cómo usarlo
- Indica cómo arrancas hoy la app en local (comando exacto) y qué servicios usa.
- Elige si quieres solo producción o también un entorno de desarrollo.
- Construye la imagen, revisa su tamaño y pásale un escáner de vulnerabilidades antes de publicarla.
Ejemplo de uso
Stack: Django 5 con Gunicorn · Servicios: PostgreSQL 16, Redis y un worker Celery · Entorno: ambos · Plataforma: linux/amd64.
Resultado de ejemplo
1. Dockerfile
# Fija también el parche o el digest: python:3.12.[COMPLETAR]-slim-bookworm
FROM python:3.12-slim-bookworm AS builder
WORKDIR /app
# Herramientas de compilación solo en esta etapa
RUN apt-get update && apt-get install -y --no-install-recommends build-essential libpq-dev \
&& rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
# Copiar primero las dependencias aprovecha la caché de capas
RUN pip wheel --no-cache-dir --wheel-dir /wheels -r requirements.txt
FROM python:3.12-slim-bookworm AS runtime
ENV PYTHONDONTWRITEBYTECODE=1 PYTHONUNBUFFERED=1
WORKDIR /app
# Solo la librería de cliente de PostgreSQL y un usuario sin privilegios
RUN apt-get update && apt-get install -y --no-install-recommends libpq5 \
&& rm -rf /var/lib/apt/lists/* \
&& useradd --create-home --uid 10001 app
COPY --from=builder /wheels /wheels
RUN pip install --no-cache-dir /wheels/* && rm -rf /wheels
COPY --chown=app:app . .
USER app
EXPOSE 8000
# Requiere un endpoint de salud: [COMPLETAR] la ruta
HEALTHCHECK --interval=30s --timeout=3s --retries=3 \
CMD python -c "import urllib.request; urllib.request.urlopen('http://127.0.0.1:8000/healthz/')"
# Forma exec: Gunicorn es PID 1 y recibe SIGTERM directamente
CMD ["gunicorn", "config.wsgi:application", "--bind", "0.0.0.0:8000", "--workers", "3"]
El worker de Celery reutiliza esta misma imagen en docker-compose.yml, cambiando solo el command.
Pregunta antes de seguir
¿Sirves los estáticos con WhiteNoise o desde un nginx aparte? Decide si collectstatic se ejecuta en el build o en el arranque…
Datos clave
- Categoría
- Programación y desarrollo · DevOps
- Tipo de resultado
- Código
- Nivel
- Intermedio
- Pensado para
- ChatGPT, Claude, Gemini y Microsoft Copilot
- Verificado en
- Pendiente de verificación editorial
- Variables
- Stack y arranque, Servicios necesarios, Entorno objetivo y Arquitectura de CPU
- Idioma
- Español
- Precio
- Gratis, sin registro
- Actualizado
- 07/11/2026
Preguntas frecuentes
¿Qué ventaja tiene un Dockerfile multietapa?
Separa la compilación del runtime: la imagen final solo lleva lo necesario para ejecutar la app, así que pesa menos y expone menos superficie de ataque.
¿Por qué no ejecutar el contenedor como root?
Si alguien explota una vulnerabilidad de la aplicación, un usuario sin privilegios limita lo que puede hacer dentro del contenedor y reduce el riesgo de escapar al host.
¿depends_on garantiza que la base de datos esté lista?
Solo si usas `condition: service_healthy` con un healthcheck real en la base de datos. Sin eso, Compose únicamente espera a que el contenedor arranque.
¿Para qué sirve este prompt?
Crea un Dockerfile multietapa seguro y ligero y un docker-compose con base de datos, caché y worker: usuario no root, healthchecks, volúmenes y secretos fuera de la imagen.
¿Con qué herramientas de IA funciona?
Está pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Todavía no lo hemos verificado en estas herramientas, por lo que los resultados pueden variar entre ellas.
¿Cómo personalizo el prompt?
Pulsa «Personalizar» y rellena las variables (Stack y arranque, Servicios necesarios, Entorno objetivo y Arquitectura de CPU). El texto se actualiza al instante y después puedes copiarlo con un clic. Los valores se guardan solo en tu navegador.
¿Necesito experiencia para usarlo?
Es de nivel intermedio: conviene que conozcas el tema para aportar buen contexto y revisar el resultado con criterio.
¿Este prompt es gratis?
Sí. Todos los prompts de HomeCasa Prompts son gratuitos, sin registro ni suscripción. Puedes usarlos también en proyectos profesionales.
¿Puedo fiarme del resultado de la IA?
Úsalo como un borrador de calidad: revisa siempre datos, cifras y afirmaciones importantes antes de publicarlos o tomar decisiones.