Skip to content
Latchkey

O Que É um Dockerfile? A Receita para Construir uma Image

Um Dockerfile é uma lista de instruções em texto simples que diz ao Docker, passo a passo, como montar uma image.

Se uma image é o template, o Dockerfile é a receita que a produz. Cada instrução roda em ordem e, quando altera o filesystem, adiciona uma camada. Saber como as instruções comuns se comportam é a diferença entre um build cacheado de 10 segundos e um de 10 minutos.

As instruções que você mais usa

  • FROM - a base image sobre a qual construir.
  • RUN - executa um comando no momento do build (instalações, compilações).
  • COPY / ADD - traz arquivos do seu build context para dentro da image.
  • WORKDIR, ENV - define o diretório de trabalho e o ambiente.
  • CMD / ENTRYPOINT - o que roda quando o container inicia.

Um exemplo mínimo

Uma pequena aplicação Node poderia ser: FROM node:20-slim WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . CMD ["node", "server.js"] A ordem é deliberada - veja o cache abaixo.

A ordem importa para o cache

O Docker faz cache de cada camada e a reutiliza se a instrução e suas entradas não mudaram. Ao copiar package*.json e instalar as dependências antes de copiar o resto do código-fonte, você só reinstala quando as dependências mudam - não a cada edição de código.

CMD vs ENTRYPOINT

ENTRYPOINT define o executável que sempre roda; CMD define os argumentos padrão que quem chama pode sobrescrever. Muitas images usam ENTRYPOINT para o binário e CMD para suas flags padrão.

Construindo a partir de um Dockerfile no CI

Um pipeline normalmente roda docker build sobre o Dockerfile e então faz o push do resultado. O tempo de build é dominado pelos cache hits e pelas instalações de dependências, então um runner com um cache aquecido vence. Runners gerenciados (Latchkey) preservam os caches de camadas entre jobs para manter esses builds rápidos.

Principais conclusões

  • Um Dockerfile é uma receita ordenada; cada instrução que altera o filesystem é uma camada.
  • Copie e instale as dependências antes do código-fonte para maximizar os cache hits.
  • ENTRYPOINT define o executável; CMD define argumentos padrão que podem ser sobrescritos.

Guias relacionados