Skip to content

Repositorio para documentar aprendizados sobre multi stage build com docker aprendidos no curso da formação DevOps Pro

License

Notifications You must be signed in to change notification settings

joao-pedro-rdo/docker-multi-stage-build

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

docker-multi-stage-build

Repositório para documentar aprendizados sobre multi-stage build com Docker aprendidos no curso da formação DevOps Pro.

Índice

Introdução

Este repositório contém exemplos e explicações sobre como utilizar a técnica de multi-stage build com Docker para otimizar a construção de imagens Docker, reduzindo o tamanho final da imagem e melhorando a segurança e a eficiência do processo de build.

O que é Multi-Stage Build

Multi-stage build é uma técnica que permite utilizar múltiplos estágios em um único Dockerfile. Cada estágio pode ter uma função específica, como compilar o código, rodar testes e, finalmente, criar a imagem de produção. Isso permite que apenas os artefatos necessários sejam incluídos na imagem final, resultando em uma imagem mais leve e segura.

Benefícios

  • Redução do tamanho da imagem: Apenas os artefatos necessários são incluídos na imagem final.
  • Melhoria na segurança: Dependências e ferramentas de build não são incluídas na imagem de produção.
  • Facilidade de manutenção: Dockerfile mais organizado e modular.

Exemplo de Uso

Aqui está um exemplo básico de um Dockerfile utilizando multi-stage build:

# Estágio 1: Build
FROM golang:1.22-alpine as builder
WORKDIR /build
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .

# Estágio 2: Produção
FROM alpine:latest as app
WORKDIR /app
# Preciso copiar da minha imagem anterior
COPY --from=builder /build/main .
CMD ["./main"]

Há tambem um arquivo dockerfile-simples que é um exemplo de um Dockerfile simples que não utiliza multi-stage build, para servir de comparação:

FROM golang:1.22-alpine 
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
CMD ["./main"]

Como Executar

Para construir e rodar a imagem Docker utilizando o Dockerfile acima, siga os passos abaixo: Ultilizei nomeclatura padrao do docker registry para nomear a imagem joaoprdo/....

  1. Construa a imagem Docker:

     docker build -t joaoprdo/go-multi-stage:multi-stage -f dockerfile-multistage .

    Para construir a imagem simples sem multi-stage:

     docker build -t joaoprdo/go-multi-stage:simples -f dockerfile-simples .
  2. Rode o container:

    docker container run -p 8080:8080 joaoprdo/go-multi-stage:multi-stage

    Para rodar a imagem simples:

    docker container run -p 8080:8080 joaoprdo/go-multi-stage:simples

    Acesse a aplicação no navegador em http://localhost:8080.

  3. Para comparar o tamanho das imagens, rode o comando abaixo:

    docker images ls
    REPOSITORY                  TAG               IMAGE ID       SIZE
    joaoprdo/go-multi-stage     multi-stage       f314b1cb5e2f      14.8MB
    joaoprdo/go-multi-stage     simples           89b44a6ecd1b      303MB

    Você verá que a imagem com multi-stage build é menor que a imagem sem multi-stage build.

Referências

About

Repositorio para documentar aprendizados sobre multi stage build com docker aprendidos no curso da formação DevOps Pro

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages