Dockerfile multi-stage e docker-compose prontos para produção

Cria um Dockerfile multi-stage seguro e leve e um docker-compose com base de dados, cache e worker: utilizador não root, healthchecks, volumes e segredos fora da imagem. Pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Inclui 4 variáveis personalizáveis e pode copiá-lo gratuitamente com um clique.

Intermédio · Código · Pendente de revisão editorial

Prompt

Atua como engenheiro DevOps com experiência em contentorizar aplicações para produção.

Quero contentorizar esta aplicação:
- Stack e comando de arranque: {{stack}}
- Serviços necessários: {{servicos}}
- Ambiente de destino: {{ambiente}}
- Arquitetura de CPU dos servidores: {{plataforma}}

Entregáveis:
1. Um `Dockerfile` multi-stage: dependências, build e uma etapa de runtime mínima. Imagem base com versão fixa, bom aproveitamento da cache de camadas, utilizador não root, `WORKDIR`, `HEALTHCHECK`, tratamento correto dos sinais de paragem e sem ferramentas de compilação na imagem final.
2. Um `.dockerignore` adequado à stack.
3. Um `docker-compose.yml` com todos os serviços: redes, volumes com nome para os dados, `depends_on` com `condition: service_healthy`, um healthcheck por serviço, limites de recursos razoáveis e política de reinício.
4. Variáveis de ambiente a partir de um ficheiro `.env` (com um `.env.example` sem valores reais) e como passar segredos sem os embutir na imagem.
5. Se o ambiente incluir desenvolvimento: um `compose.override.yml` com recarregamento automático e portas de depuração, separado da configuração de produção.
6. Comandos para construir, arrancar, ver logs, correr migrações e fazer uma build multiplataforma, se necessário.
7. Uma lista de verificação de segurança e tamanho: o que analisar com um scanner de vulnerabilidades e como reduzir a imagem.

Restrições:
- Acrescenta um comentário curto a cada instrução que não seja óbvia.
- Não inventes versões de dependências nem nomes de variáveis: marca o que eu não indicar como [PREENCHER].
- Se a minha stack exigir uma decisão (por exemplo servidor aplicacional ou recolha de ficheiros estáticos), pergunta-me antes.

Formato: um bloco de código por ficheiro e uma secção final de comandos.

Como utilizar

  1. Indica como arrancas hoje a aplicação em local (comando exato) e que serviços usa.
  2. Escolhe só produção ou produção mais desenvolvimento.
  3. Constrói a imagem, verifica o tamanho e passa-a por um scanner de vulnerabilidades antes de a publicar.

Exemplo de utilização

Stack: Django 5 com Gunicorn · Serviços: PostgreSQL 16, Redis e um worker Celery · Ambiente: ambos · Plataforma: linux/amd64.

Exemplo de resultado

1. Dockerfile

# Fixa também o patch ou o digest: python:3.12.[COMPLETAR]-slim-bookworm
FROM python:3.12-slim-bookworm AS builder
WORKDIR /app
# Ferramentas de compilação só nesta 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 primeiro as dependências aproveita a cache de camadas
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
# Só a biblioteca cliente do PostgreSQL e um utilizador sem privilégios
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
# Precisa de um endpoint de saúde: [COMPLETAR] o caminho
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: o Gunicorn é o PID 1 e recebe o SIGTERM diretamente
CMD ["gunicorn", "config.wsgi:application", "--bind", "0.0.0.0:8000", "--workers", "3"]

Também o worker do Celery reutiliza esta mesma imagem no docker-compose.yml, mudando apenas o command.

Pergunta antes de avançar

Serves os ficheiros estáticos com WhiteNoise ou a partir de um nginx separado? Isso decide se o collectstatic corre no build ou no arranque…

Dados-chave

Categoria
Programação e desenvolvimento · DevOps
Tipo de resultado
Código
Nível
Intermédio
Pensado para
ChatGPT, Claude, Gemini e Microsoft Copilot
Verificado em
Pendente de verificação editorial
Variáveis
Stack e arranque, Serviços necessários, Ambiente de destino e Arquitetura de CPU
Idioma
Português
Preço
Gratuito, sem registo
Atualizado
07/11/2026

Perguntas frequentes

Que vantagem tem um Dockerfile multi-stage?

Separa a compilação da execução: a imagem final só leva o necessário para correr a aplicação, por isso é mais leve e tem menos superfície de ataque.

Porque não correr o contentor como root?

Se alguém explorar uma falha da aplicação, um utilizador sem privilégios limita o que pode fazer no contentor e reduz o risco de chegar ao anfitrião.

O depends_on garante que a base de dados está pronta?

Só com `condition: service_healthy` e um healthcheck real na base de dados. Sem isso, o Compose apenas espera que o contentor arranque.

Para que serve este prompt?

Cria um Dockerfile multi-stage seguro e leve e um docker-compose com base de dados, cache e worker: utilizador não root, healthchecks, volumes e segredos fora da imagem.

Com que ferramentas de IA funciona?

Foi pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Ainda não o verificámos nestas ferramentas, pelo que os resultados podem variar entre elas.

Como personalizo o prompt?

Clique em “Personalizar” e preencha as variáveis (Stack e arranque, Serviços necessários, Ambiente de destino e Arquitetura de CPU). O texto atualiza-se instantaneamente e pode depois copiá-lo com um clique. Os valores ficam guardados apenas no seu navegador.

Preciso de experiência para o utilizar?

É de nível intermédio: convém conhecer o tema para fornecer bom contexto e rever o resultado com sentido crítico.

Este prompt é gratuito?

Sim. Todos os prompts do HomeCasa Prompts são gratuitos, sem registo nem subscrição. Pode também utilizá-los em projetos profissionais.

Posso confiar no resultado da IA?

Trate-o como um rascunho de qualidade: verifique sempre os dados, os números e as afirmações importantes antes de publicar ou tomar decisões.

Prompts relacionados