4.1 Fundamentos do comando docker build
O comando docker build
é o jeito principal de criar uma imagem Docker a partir de um Dockerfile. Ele pega as instruções do Dockerfile e executa elas passo a passo, montando a imagem em camadas. Nessa aula a gente vai explorar como funciona o comando docker build
, quais as opções dele e como usar na prática.
O comando docker build
monta a imagem a partir do Dockerfile e do chamado contexto de construção. O contexto de construção são os arquivos que o Docker usa pra criar a imagem. Pode ser uma pasta local na sua máquina ou, por exemplo, um repositório no GitHub.
Sintaxe
docker build [OPTIONS] PATH | URL | -
Onde:
-
PATH
: caminho pra pasta que contém o Dockerfile e o contexto de construção. URL
: endereço URL de um repositório remoto.-
: leitura do Dockerfile diretamente do standard input (stdin).
Exemplo básico de uso
Nesse exemplo o Docker vai usar o Dockerfile da pasta atual (.)
e criar uma imagem com o nome myimage
e a tag latest
.
docker build -t myimage:latest .
4.2 Personalizando o comando build
Principais parâmetros do comando docker build
O comando docker build
suporta várias opções que permitem ajustar o processo de construção.
1. Parâmetros -t
, --tag
O parâmetro -t
ou --tag
é usado para atribuir um nome e uma tag para a imagem criada.
docker build -t myimage:latest .
2. Parâmetros -f
, --file
O parâmetro -f
ou --file
permite especificar um Dockerfile alternativo, se ele for diferente do Dockerfile padrão.
docker build -f Dockerfile.dev -t myimage:dev .
3. Parâmetro --build-arg
O parâmetro --build-arg
é usado para passar argumentos de construção definidos usando a instrução ARG no Dockerfile.
docker build --build-arg APP_VERSION=1.0 -t myimage:1.0 .
4. Parâmetro --no-cache
O parâmetro --no-cache
permite realizar a construção sem usar o cache. Isso é útil se você quiser garantir que todos os comandos sejam executados novamente.
docker build --no-cache -t myimage:latest .
5. Parâmetro --target
O parâmetro --target
é usado para especificar um estágio de destino em uma construção multiestágio.
docker build --target builder -t myimage:builder .
6. Parâmetro --rm
O parâmetro --rm
indica ao Docker para remover contêineres intermediários após a construção bem-sucedida da imagem (ativado por padrão).
docker build --rm -t myimage:latest .
4.3 Exemplos de docker build
Exemplo 1: Construção básica
Suponha que você tenha um aplicativo simples em Node.js e queira criar uma imagem Docker para fazer o deploy dele.
Dockerfile:
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Comando de construção:
docker build -t mynodeapp:latest .
Neste exemplo, o Docker vai criar a imagem mynodeapp
com a tag latest
, usando o Dockerfile da pasta atual.
Exemplo 2: Construção com utilização de argumentos
Argumentos de construção permitem passar variáveis no Dockerfile no momento da construção.
Dockerfile
FROM node:14
ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION}
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Comando de construção:
docker build --build-arg APP_VERSION=1.0 -t mynodeapp:1.0 .
Neste exemplo, o argumento APP_VERSION
é passado para o Dockerfile, permitindo definir a versão do aplicativo no momento da construção.
Exemplo 3: Construção Multi-stage
A construção multi-stage é usada para criar imagens que incluem apenas os componentes necessários. Isso permite reduzir o tamanho da imagem final.
Dockerfile
# Etapa de construção
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# Formação da imagem final com um conjunto mínimo de arquivos
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
Comando de construção:
docker build -t mywebapp:latest .
Neste exemplo, primeiro é criado uma imagem intermediária chamada builder, onde acontece a construção do aplicativo. Depois da construção, o aplicativo é transferido para a imagem final, que usa Nginx para servir o conteúdo pronto.
4.4 Dicas práticas
1. Otimização da ordem das instruções
Para usar o cache do Docker de maneira eficiente, é importante organizar bem as instruções. Por exemplo, copie primeiro os arquivos que raramente mudam, como o package.json
, para minimizar a reconfiguração das dependências. Depois disso, faça a cópia dos outros arquivos.
COPY package*.json ./
RUN npm install
COPY . .
2. Uso do .dockerignore
Adicione um arquivo .dockerignore
para excluir arquivos e diretórios desnecessários do contexto de build. Isso vai reduzir o tamanho do contexto e acelerar a construção da imagem.
Exemplo de .dockerignore
:
node_modules
dist
*.log
3. Build multi-stage
Use construção multi-stage para criar imagens minimalistas e leves. Essa abordagem permite incluir apenas os arquivos e dependências realmente necessários para a aplicação, excluindo dados desnecessários da imagem final, como arquivos temporários ou código-fonte.
GO TO FULL VERSION