CodeGym /Cursos /Docker SELF /Construção da imagem

Construção da imagem

Docker SELF
Nível 13 , Lição 3
Disponível

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.

Terminal

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.

Terminal

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.

Terminal

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.

Terminal

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.

Terminal

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.

Terminal

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).

Terminal

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:

dockerfile

FROM node:14

WORKDIR /app
        
COPY package*.json ./
RUN npm install
        
COPY . .
        
EXPOSE 3000
        
CMD ["node", "app.js"]

Comando de construção:

Terminal

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

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:

Terminal

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

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:

Terminal


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.

dockerfile

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:

Text

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.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION