FS
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 installCMDdefine 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
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.