Sobes.tech
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"]