FS

Dockerfile: o roteiro por trás da mágica dos containers

Imagem do post Dockerfile: o roteiro por trás da mágica dos containers

Descubra por que o Dockerfile é essencial na construção de ambientes padronizados e como ele facilita o desenvolvimento moderno.

Se você já começou a explorar o Docker, é bem provável que tenha encontrado dois arquivos: o Dockerfile e o docker-compose.yml. Eles se complementam, mas não são a mesma coisa e entender essa diferença pode evitar muita confusão no seu ambiente de desenvolvimento. Mas hoje vamos focar no Dockerfile e explicar o que ele é, por que é tão importante e como ele ajuda desenvolvedores e equipes a criarem aplicações mais consistentes e fáceis de distribuir.

Vamos por partes.

O que é o Dockerfile?

Pense no Dockerfile como um roteiro de instruções. Ele diz para o Docker exatamente como montar um container, passo a passo, com tudo o que sua aplicação precisa: sistema operacional, dependências, comandos de build e execução.

É como uma receita de bolo: você entrega os ingredientes (imagem base, dependências, arquivos da aplicação) e o modo de preparo (comandos), e o Docker se encarrega de assar o bolo, ou melhor, construir a imagem do container.

O problema que ele veio resolver

Antes do Docker (e do Dockerfile), ambientes de desenvolvimento e produção eram frequentemente inconsistentes. Funcionava “na minha máquina”, mas quebrava na máquina de outro dev ou no servidor de produção.

Com o Dockerfile, isso mudou. Agora, todo o ambiente pode ser descrito como código, de forma reproduzível. Assim, qualquer pessoa pode executar docker build e gerar um container com a mesma configuração exata, onde quer que esteja.

Como funciona o Dockerfile (conceito básico)

Um Dockerfile é um simples arquivo de texto (sem extensão mesmo, só Dockerfile) que contém instruções que o Docker executará na ordem em que estão escritas.

Veja o exemplo de um Dockerfile básico:

# Define a imagem base 
FROM node:18 

# Define o diretório de trabalho dentro do container 
WORKDIR /app 

# Copia os arquivos da aplicação para o container 
COPY . . 

# Instala as dependências 
RUN npm install 

# Define o comando padrão para executar a aplicação 
CMD ["npm", "start"]

Cada linha tem um papel importante:

  • FROM: define a imagem base.

  • WORKDIR: define o diretório de trabalho dentro do container.

  • COPY: copia os arquivos da sua máquina para dentro do container.

  • RUN: executa comandos durante a criação da imagem.

  • CMD: define o comando que será executado quando o container iniciar.

Qual a diferença entre o CMD e o RUN?

Você deve ter se perguntado o por quê de o código que define o comando que será executado quando o container iniciar é diferente, ao invés de só executarmos um RUN npm start por exemplo. Esse é um ponto que gera bastante confusão para quem está começando com Docker, então vamos esclarecer:

  • RUN é usado durante a construção da imagem, e executa comandos uma única vez. Ele é ideal para instalar dependências, compilar arquivos, mover diretórios, etc. O que ele faz vai para a imagem final.

Exemplo:

RUN npm install
  • CMD define o comando que será executado quando o container for iniciado (ou seja, depois da imagem pronta). É o "ponto de entrada padrão" do seu container em tempo de execução.

Exemplo:

CMD ["npm", "start"]

Você pode usar CMD como uma string ou como um array, mas o formato de array evita problemas de interpretação de shell.

Por que o Dockerfile é tão importante?

  • Padronização: evita o famoso “na minha máquina funciona”.

  • Reprodutibilidade: todo mundo executa os mesmos passos para gerar o mesmo resultado.

  • Facilidade de deploy: basta rodar a imagem gerada em qualquer lugar com Docker instalado.

  • Segurança: você tem controle exato do que entra no seu ambiente.

  • Escalabilidade: imagens criadas com Dockerfile podem ser facilmente usadas em orquestradores como Kubernetes.

Conclusão

O Dockerfile é um daqueles arquivos que, embora simples, trazem um impacto imenso no fluxo de desenvolvimento moderno. Ele garante que aplicações rodem da mesma forma em diferentes máquinas, ambientes e servidores, trazendo confiança para quem desenvolve e para quem opera.

Se você está começando a trabalhar com containers, entender o Dockerfile é um primeiro passo essencial. E se você já trabalha com ele, nunca é demais rever os conceitos e garantir que está tirando o máximo proveito dessa ferramenta poderosa.

Post criado/atualizado em: 30/04/2025

Felipe Santiago

Autor: Felipe Santiago

Trabalho com desenvolvimento web Frontend desde 2023 com foco em React e Typescript. TailwindCSS foi uma reviravolta em meus projetos, não consigo mais ficar sem ele. Evoluindo para aplicações FullStack, foquei muito para criação de APIs com Node e Fastify/Express e manutenção de banco de dados como PostgreSQL.