Sobes.tech
Middle

Em que casos é utilizada uma construção em várias etapas?

sobes.tech IA

Resposta da IA

A compilação em múltiplas etapas é usada para otimizar o tamanho e a segurança da imagem final do Docker, bem como para dividir as fases de compilação.

Principais casos de uso:

  • Redução do tamanho da imagem: Usando diferentes imagens base para compilar dependências e criar a aplicação final, é possível excluir ferramentas de compilação, código fonte e outros ficheiros desnecessários da imagem final.
  • Aumento da segurança: Um tamanho menor da imagem significa uma superfície de ataque menor. Além disso, informações confidenciais (por exemplo, chaves SSH usadas para clonar repositórios privados na fase de compilação) não entram na imagem final.
  • Divisão das fases de compilação: As fases podem compilar código, reunir ativos frontend, executar testes e só depois copiar os artefactos necessários para a imagem final. Isto torna o Dockerfile mais legível e fácil de manter.
  • Diferentes imagens base para diferentes tarefas: Por exemplo, usar uma imagem com um compilador Go instalado para compilar um ficheiro executável, e depois copiar esse ficheiro para uma imagem Alpine minimalista para execução.

Exemplo de Dockerfile com compilação em múltiplas etapas:

# Primeira fase: compilação da aplicação Go
FROM golang:1.20 as builder

WORKDIR /app
COPY go.mod ./
COPY go.sum ./
RUN go mod download
COPY *.go ./
RUN go build -o /app/myapp

# Segunda fase: criação de uma imagem mínima
FROM alpine:latest

WORKDIR /app
COPY --from=builder /app/myapp .

EXPOSE 8080
CMD ["./myapp"]