Entender o que é dockerfile é simples: é um arquivo de texto com instruções passo a passo para o Docker montar uma imagem, como a receita da sua aplicação. Neste guia de Docker para iniciantes, você vai dominar imagem, container e o que é dockerfile do zero, além de criar e rodar seu primeiro container. Cada comando vem depois da analogia, então nada de decoreba.
O que é Docker e qual problema ele resolve?
Antes de responder o que é dockerfile em detalhe, você precisa entender o Docker. Docker é uma plataforma que empacota sua aplicação e tudo de que ela precisa dentro de um container isolado. Em outras palavras, ele resolve o clássico “na minha máquina funciona”. Assim, o código roda igual no seu notebook, no servidor e no computador do colega. Antes do Docker, cada ambiente tinha versões diferentes de linguagem, biblioteca e sistema operacional, e essas diferenças quebravam a aplicação sem aviso.
Para entender a analogia, imagine um contêiner de navio. Não importa o que vai dentro dele, seja geladeira ou banana, o formato externo é sempre o mesmo. Portanto, qualquer guindaste, caminhão ou porto sabe lidar com ele. O Docker faz o mesmo com software: ele padroniza a “caixa” onde sua aplicação vive. Dessa forma, qualquer máquina com Docker instalado consegue rodá-la sem configuração extra.
Além de padronizar, o Docker é leve. Por isso a adoção explodiu nos últimos anos: o Docker chegou a 71% de uso entre desenvolvedores, segundo a Stack Overflow Developer Survey 2025. De fato, dá para subir dezenas de containers numa única máquina, algo impensável com máquinas virtuais tradicionais. Se você já leu sobre automação self-hosted com Docker, provavelmente percebeu como quase toda ferramenta moderna hoje é distribuída em container. Antes de escrever seu primeiro Dockerfile, porém, vale firmar os três conceitos que sustentam tudo.
Imagem, container e Dockerfile: os 3 conceitos-base
Imagem, container e Dockerfile são as três peças que sustentam todo o ecossistema Docker. Além disso, entender a relação entre elas é o passo mais importante para iniciantes, porque tudo o mais deriva daqui. Vamos usar uma analogia de cozinha para fixar cada uma antes de detalhar o que é dockerfile na prática.
- Dockerfile é a receita: um arquivo de texto que descreve, linha por linha, como preparar o ambiente da sua aplicação.
- Imagem é o prato pronto congelado: o resultado imutável de executar a receita. Você pode guardá-la, versioná-la e compartilhá-la.
- Container é o prato servido e quente na mesa: uma instância viva da imagem, rodando de verdade. Da mesma imagem você pode servir vários containers ao mesmo tempo.
Por isso, o fluxo é sempre o mesmo. Primeiro você escreve um Dockerfile. Em seguida, o Docker gera uma imagem a partir dele, e da imagem nascem os containers. Consequentemente, se algo dá errado no ambiente, você não conserta o container à mão. Em vez disso, ajusta a receita (o Dockerfile), gera uma nova imagem e sobe um container novo. Essa disciplina de tratar ambientes como código é justamente o que torna o Docker tão confiável.
De fato, um ponto confunde iniciantes: a imagem é somente leitura. Quando um container roda, o Docker adiciona uma camada gravável por cima da imagem. Por isso dois containers da mesma imagem não interferem um no outro, e apagar um container não afeta a imagem original.
Publicidade
O que é dockerfile? FROM, WORKDIR, COPY e RUN explicados
Um Dockerfile é um arquivo de texto simples, sem extensão, com instruções que o Docker lê de cima para baixo para montar a imagem. Responder o que é dockerfile de forma técnica é simples. De fato, cada instrução vira uma camada da imagem. Isso ajuda no cache e deixa builds futuros mais rápidos. Como a documentação oficial resume, o Dockerfile é “a receita para criar uma imagem Docker”. Veja a seguir as quatro instruções que você usa em praticamente todo projeto.
- FROM define a imagem base. Toda receita parte de uma base pronta, como
node,pythonouubuntu. - WORKDIR define a pasta de trabalho dentro do container. Assim, os comandos seguintes rodam nesse diretório.
- COPY copia arquivos do seu projeto para dentro da imagem, como o código-fonte e as dependências.
- RUN executa comandos durante o build, por exemplo instalar bibliotecas com
npm install.
Na prática, um Dockerfile enxuto para uma aplicação Node.js fica assim. Repare como cada linha corresponde a um passo lógico da preparação:
# Imagem base: Node.js 20 na versão enxuta "slim"
FROM node:20-slim
# Pasta onde a aplicação vai viver dentro do container
WORKDIR /app
# Copia os manifestos de dependências primeiro (melhora o cache)
COPY package.json package-lock.json ./
# Instala as dependências durante o build
RUN npm install
# Copia o restante do código-fonte
COPY . .
# Comando que sobe a aplicação quando o container inicia
CMD ["node", "index.js"]Além disso, note que copiamos o package.json antes do resto do código. Esse detalhe não é enfeite: como o Docker guarda cada camada em cache, ele só refaz o npm install quando as dependências mudam. Portanto, alterar uma linha do código não obriga a reinstalar tudo, e o build fica muito mais rápido no dia a dia. Recomendamos adotar essa ordem desde o primeiro projeto.
A instrução CMD no fim merece atenção. Diferente de RUN, que roda no build, o CMD define o comando executado quando o container sobe. Assim, RUN é “prepare o prato” e CMD é “sirva o prato”. Se você entende essa diferença, já sabe o que é dockerfile na essência e domina o núcleo de qualquer receita.
Criando e rodando seu primeiro container (passo a passo)
Agora que você já sabe o que é dockerfile, criar o primeiro container é rápido. Para isso, você precisa de apenas dois comandos: docker build gera a imagem a partir do Dockerfile e docker run sobe o container. Antes de começar, confirme que o Docker Desktop está instalado e rodando na sua máquina. Em seguida, coloque o Dockerfile da seção anterior na raiz do seu projeto.
Primeiro, construa a imagem. O comando abaixo lê o Dockerfile do diretório atual (o ponto no fim) e dá um nome amigável à imagem com a flag -t:
# Constrói a imagem e a nomeia como "minha-app"
docker build -t minha-app .
# Lista as imagens que você já tem localmente
docker imagesEm seguida, depois que o build termina, a imagem minha-app aparece na lista. Agora é hora de dar vida a ela. O comando a seguir cria e inicia um container. Além disso, ele mapeia a porta 3000 do container para a porta 3000 da sua máquina com a flag -p:
# Sobe o container e mapeia a porta 3000
docker run -p 3000:3000 minha-app
# Em outro terminal, veja os containers rodando
docker psAssim, sua aplicação está no ar dentro de um container isolado. Ao abrir localhost:3000 no navegador, você acessa o serviço que roda ali dentro. Para encerrar, basta pressionar Ctrl + C no terminal ou usar docker stop com o ID que apareceu no docker ps. Da mesma forma que você subiu esse container, poderia subir dezenas de outros a partir de imagens diferentes.
Por outro lado, se algo falhar, não entre em pânico. Na maioria das vezes o erro está numa linha do Dockerfile ou numa dependência faltando. Consequentemente, o conserto é ajustar a receita e rodar docker build de novo. Esse ciclo de editar, buildar e rodar vai virar automático em poucos dias de prática.
Publicidade
Docker é uma máquina virtual? A diferença que confunde todo mundo
Não, Docker não é uma máquina virtual, embora ambos isolem aplicações. A diferença central está no que cada um virtualiza. A máquina virtual carrega um sistema operacional inteiro. Já o container compartilha o kernel do sistema anfitrião. Por isso o container é muito mais leve e sobe em segundos, não em minutos.
De fato, a máquina virtual é como construir uma casa completa com fundação, encanamento e telhado só para hospedar um quarto. Já o container é como alugar um quarto num prédio que já tem toda a infraestrutura pronta. Em outras palavras, o container reaproveita o kernel do host e empacota apenas o que a aplicação realmente precisa. Consequentemente, onde caberia uma máquina virtual, cabem vários containers.
- Peso: uma imagem de container tem dezenas de megabytes; uma máquina virtual costuma ter gigabytes.
- Velocidade: containers iniciam em segundos; máquinas virtuais levam de dezenas de segundos a minutos.
- Isolamento: a máquina virtual isola no nível do hardware; o container isola no nível do processo, o que é suficiente para a maioria dos casos.
Existe, portanto, um trade-off claro entre isolamento e leveza. A máquina virtual entrega isolamento no nível do hardware, mas cobra caro em disco e tempo de boot. O container abre mão desse isolamento mais forte e, em troca, ganha velocidade e densidade. Diante disso, recomendamos containers para desenvolver, testar e distribuir aplicações. Por outro lado, reservamos a máquina virtual apenas para um sistema operacional totalmente diferente ou isolamento máximo por segurança. Essa leveza é, inclusive, o que permite ferramentas como rodar modelos de IA localmente sem transformar sua máquina numa fornalha.
Quer se aprofundar de verdade e ir além do básico sobre o que é dockerfile? Então recomendamos o livro Descomplicando o Docker, da editora Brasport. Ele parte exatamente do zero, com analogias e exemplos práticos, e é a referência em português para quem está começando com containers. Vale o investimento antes de encarar orquestração e produção.

Conclusão
Chegamos ao fim deste guia de Docker para iniciantes, e você já entende o que é dockerfile, imagem e container, além de ter subido seu primeiro serviço em container. Por fim, recapitulando: o Dockerfile é a receita, a imagem é o resultado congelado dessa receita, e o container é a aplicação viva rodando isolada. Com docker build e docker run, você fecha o ciclo completo.
O próximo passo natural é o Docker Compose, que orquestra vários containers de uma vez, por exemplo sua aplicação junto com um banco de dados. Primeiro, pratique bem os fundamentos deste artigo e revise o que é dockerfile sempre que travar. Em seguida, crie um Dockerfile para um projeto seu de verdade. Por fim, avance para o Compose quando precisar coordenar mais de um serviço. Dessa forma, cada conceito novo se apoia num que você já domina, e o aprendizado flui sem sufoco.
Publicidade
Este artigo contém links de afiliado. Portanto, se você comprar por eles, podemos receber uma comissão, sem custo extra para você.


























