docker image build

Introdução

O comando docker build é usado para criar imagens Docker a partir de um conjunto de instruções definidas em um Dockerfile. O processo de build envolve a execução de comandos, a instalação de dependências, a cópia de arquivos, entre outros, para gerar uma imagem que encapsula um ambiente de execução específico.

Sintaxe Básica

docker build [OPTIONS] PATH | URL | -
  • PATH: Caminho para o diretório contendo o Dockerfile e o contexto de build.

  • URL: URL para um repositório Git que contém o Dockerfile e o contexto de build.

  • -: Lê o Dockerfile a partir do stdin.

Exemplo Básico

docker build -t minha-imagem .

Este comando cria uma imagem chamada "minha-imagem" a partir do Dockerfile no diretório atual.

Opções Comuns

-t, --tag

Define uma tag para a imagem criada. Pode ser usada várias vezes para aplicar múltiplas tags.

docker build -t minha-imagem:latest .

-f, --file

Especifica um Dockerfile diferente do padrão (Dockerfile).

--no-cache

Constrói a imagem sem utilizar o cache das camadas anteriores. Isso força a reconstrução de todas as camadas.

--build-arg

Passa variáveis de ambiente (argumentos) para o Dockerfile.

No Dockerfile, você pode usar o argumento com a instrução ARG:

--pull

Sempre tenta baixar a imagem base mais recente antes de construir.

--target

Permite especificar uma build stage específica para criar uma imagem multi-stage.

-o, --output

Especifica a localização do output da construção. Útil para builds que produzem arquivos em vez de imagens Docker.

Conceitos Importantes

1. Contexto de Build

  • O contexto de build é o conjunto de arquivos e diretórios que o Docker precisa para construir a imagem. É enviado ao daemon Docker antes da construção.

  • Evite incluir arquivos desnecessários no contexto usando o .dockerignore.

2. Dockerfile

  • O Dockerfile define todas as etapas para construir a imagem. Cada instrução no Dockerfile (e.g., RUN, COPY, CMD) cria uma nova camada na imagem.

3. Cache de Build

  • O Docker utiliza um cache para acelerar o processo de construção. Se as instruções do Dockerfile e os arquivos do contexto não mudaram, o Docker pode reutilizar camadas de imagens anteriores.

4. Multi-Stage Builds

  • Multi-stage builds permitem criar imagens mais enxutas, separando as etapas de build em diferentes estágios e copiando apenas os artefatos finais para a imagem final.

5. BuildKit

  • O BuildKit é um novo backend de construção para o Docker, que melhora o desempenho e adiciona novos recursos como a construção paralela. Para ativá-lo:

Melhores Práticas

  1. Utilize .dockerignore: Exclua arquivos desnecessários do contexto de build para reduzir o tamanho e o tempo de construção.

  2. Minimize a quantidade de camadas: Combine instruções RUN sempre que possível para minimizar o número de camadas.

  3. Especifique versões de imagens base: Use tags específicas (e.g., python:3.9-slim) em vez de latest para garantir builds reprodutíveis.

  4. Utilize Multi-Stage Builds: Reduza o tamanho da imagem final copiando apenas o que é necessário a partir de etapas de build intermediárias.

Depuração e Logs

Para depurar problemas durante o build, você pode usar a opção --progress com o BuildKit para obter informações detalhadas:

E também visualizar os logs detalhados com a flag --no-cache para forçar a reconstrução:

Conclusão

O comando docker build é uma ferramenta essencial no desenvolvimento e deployment de aplicações Docker. Compreender suas opções e melhores práticas pode ajudar a criar imagens mais eficientes, seguras e reprodutíveis.

Last updated