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
- Indica como arrancas hoje a aplicação em local (comando exato) e que serviços usa.
- Escolhe só produção ou produção mais desenvolvimento.
- 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.