Introdução

Um Multi-stage build no Docker é uma técnica que permite construir imagens Docker mais eficientes e otimizadas. Ele funciona ao dividir o processo de construção em várias etapas, onde apenas os artefatos necessários são copiados para a imagem final. Isso reduz o tamanho da imagem e melhora a segurança, pois remove as partes desnecessárias usadas durante a construção, como ferramentas de compilação.

Benefícios do Multi-stage Build

  • Redução do Tamanho da Imagem: Apenas os arquivos necessários são incluídos na imagem final.

  • Melhor Segurança: Ferramentas de desenvolvimento e outros componentes não são incluídos na imagem final.

  • Facilidade de Manutenção: O Dockerfile permanece limpo e modular, facilitando a leitura e a manutenção.

Exemplo de Multi-stage Build

Vamos considerar um exemplo simples de uma aplicação Go. No primeiro estágio, compilamos a aplicação. No segundo estágio, copiamos apenas o binário compilado para a imagem final.

Dockerfile com Multi-stage Build

# Etapa 1: Construção
FROM golang:1.20-alpine AS build

# Definir o diretório de trabalho dentro do container
WORKDIR /app

# Copiar os arquivos de código para o container
COPY . .

# Compilar a aplicação Go
RUN go build -o myapp

# Etapa 2: Imagem final
FROM alpine:latest

# Definir o diretório de trabalho dentro do container final
WORKDIR /root/

# Copiar apenas o binário compilado da etapa anterior
COPY --from=build /app/myapp .

# Executar o binário quando o container iniciar
CMD ["./myapp"]

Como Funciona

  1. Primeiro Estágio (build):

    • Usa uma imagem do Golang para compilar a aplicação.

    • Copia o código-fonte para o diretório de trabalho /app e compila a aplicação.

    • O resultado é um binário chamado myapp.

  2. Segundo Estágio (Imagem Final):

    • Usa uma imagem base minimalista (alpine).

    • Copia apenas o binário compilado do primeiro estágio para a imagem final.

    • Define o comando para executar o binário quando o container é iniciado.

Construção da Imagem

Para construir a imagem com o Dockerfile acima:

Verificação

Para verificar o tamanho da imagem e garantir que apenas o necessário foi incluído:

Isso demonstra como o Multi-stage build permite criar imagens Docker menores e mais seguras, removendo as partes não necessárias do processo de construção. Essa técnica é particularmente útil para aplicações que exigem um processo de compilação complexo ou múltiplas dependências.

Laboratório

Tipos de Linguagens:

  • Interpretadas

  • Compiladas

  • Interpretadas e Compiladas

Linguagem Interpretada

Linguagem Compilada

Linguagem Compilada e Interpretada (Híbrida)

Frontend

Last updated