Middle
O que são compilações multi-estágio no Docker e como funcionam?
sobes.tech IA
Resposta da IA
Compilações multi-estágio permitem usar várias imagens temporárias durante o processo de construção do Docker para obter uma imagem final otimizada.
Como funciona:
- Divisão em etapas: O processo de construção é dividido em várias etapas (
FROM), cada uma herdando de sua própria imagem base. - Cópia de artefatos: Os arquivos e artefatos criados nas etapas anteriores são copiados para as seguintes usando o comando
COPY --from=<nome_da_etapa ou número>. - Imagem final: A imagem final é criada a partir da última etapa. Apenas os arquivos copiados explicitamente das etapas anteriores são incluídos nela. Camadas intermediárias e ferramentas usadas em etapas iniciais para compilação ou testes não são incluídas na imagem final.
Vantagens:
- Redução do tamanho da imagem: Apenas os arquivos necessários para executar a aplicação são incluídos na imagem final.
- Melhoria na segurança: Ferramentas de compilação, compiladores e outros componentes potencialmente vulneráveis não são incluídos na imagem final.
- Aceleração da construção: As etapas intermediárias podem ser armazenadas em cache.
- Limpeza do Dockerfile: As diferentes etapas de construção (compilação, teste, empacotamento) são logicamente separadas.
Exemplo:
# Etapa de build: compilação da aplicação
FROM golang:1.20 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN go build -o myapp .
# Etapa de run: execução da aplicação
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/myapp /app/myapp
CMD ["/app/myapp"]