Se você é um desenvolvedor, certamente já ouviu a frase: “Mas funciona na minha máquina!”. Esse problema clássico, onde o código funciona perfeitamente no seu ambiente mas quebra no servidor ou no computador de outro colega, é exatamente o que o Docker veio para resolver.
Seguindo a linha de tutoriais práticos como o de liberar portas na Oracle Cloud, este guia vai te ensinar, passo a passo, como “dockerizar” uma aplicação Node.js. Vamos transformar sua aplicação em uma imagem portátil e consistente que roda em qualquer lugar. Chega de surpresas em produção!
O que é Docker e por que você deveria se importar?
Pense no Docker como uma “caixa” padronizada, chamada container. Dentro dessa caixa, você coloca tudo que sua aplicação precisa para rodar: o código, as dependências (como o Node.js), variáveis de ambiente e configurações. Essa caixa (container) pode ser executada em qualquer máquina que tenha o Docker instalado, garantindo que o ambiente seja sempre idêntico.
Os benefícios são enormes: consistência entre os ambientes de desenvolvimento e produção, facilidade de implantação (deploy) e isolamento de dependências.
Pré-requisitos
Antes de começar, certifique-se de que você tem o seguinte instalado:
- Node.js e npm
- Docker Desktop (para Windows, Mac ou Linux)
Passo 1: Criando uma Aplicação Node.js Simples
Vamos começar com um servidor web básico usando o Express. Crie uma pasta para o seu projeto e, dentro dela, crie o arquivo server.js:
// server.js
const express = require('express');
const app = express();
const PORT = 3000;
app.get('/', (req, res) => {
res.send('Olá, mundo Docker! Minha aplicação Node.js está rodando.');
});
app.listen(PORT, () => {
console.log(`Servidor rodando na porta ${PORT}`);
});
Agora, inicialize o projeto e instale o Express:
npm init -y
npm install express
Seu package.json deve se parecer com isso:
{
"name": "meu-app-docker",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"start": "node server.js"
},
"dependencies": {
"express": "^4.18.2"
},
"keywords": [],
"author": "",
"license": "ISC"
}
Passo 2: Criando o `Dockerfile`
O Dockerfile é a receita para construir sua imagem Docker. Crie um arquivo chamado Dockerfile (sem extensão) na raiz do seu projeto com o seguinte conteúdo:
# 1. Define a imagem base
FROM node:18-alpine
# 2. Define o diretório de trabalho dentro do container
WORKDIR /app
# 3. Copia os arquivos de dependência
COPY package*.json ./
# 4. Instala as dependências
RUN npm install
# 5. Copia o resto do código da aplicação
COPY . .
# 6. Expõe a porta que a aplicação usa
EXPOSE 3000
# 7. Define o comando para iniciar a aplicação
CMD ["node", "server.js"]
package.json separadamente? O Docker constrói a imagem em camadas e utiliza um cache. Ao copiar primeiro o package.json e instalar as dependências, essa camada só será refeita se as dependências mudarem. Se você apenas alterar seu código (server.js), o Docker reutiliza a camada de dependências já prontas, tornando o build muito mais rápido!
Passo 3: Criando o arquivo `.dockerignore`
Para evitar que arquivos desnecessários (como a pasta node_modules local) sejam copiados para dentro da sua imagem, crie um arquivo .dockerignore. Isso mantém a imagem leve e acelera o processo de build.
node_modules
npm-debug.log
.DS_Store
Passo 4: Construindo a Imagem Docker
Agora que temos a receita, vamos construir a imagem. Abra o terminal na raiz do seu projeto e execute o comando:
docker build -t meu-app-node .
docker build: O comando para construir uma imagem.-t meu-app-node: A flag-t(de “tag”) dá um nome à sua imagem..: O ponto no final indica que o Docker deve procurar oDockerfileno diretório atual.
Você verá o Docker executando cada passo definido no seu Dockerfile.
Passo 5: Rodando o Container
Com a imagem pronta, é hora de rodar o container!
docker run -p 4000:3000 -d meu-app-node
docker run: O comando para executar um container a partir de uma imagem.-p 4000:3000: A flag-p(de “publish”) mapeia as portas. Estamos conectando a porta4000da sua máquina à porta3000do container (onde o nosso app está rodando).-d: Roda o container em modo “detached” (em segundo plano).meu-app-node: O nome da imagem que queremos usar.
Agora, abra seu navegador e acesse http://localhost:4000. Você deverá ver a mensagem: “Olá, mundo Docker! Minha aplicação Node.js está rodando.”
Parabéns, você acabou de “dockerizar” sua primeira aplicação!
Próximos Passos
Este é apenas o começo. O próximo passo lógico é aprender sobre Docker Compose, uma ferramenta para orquestrar múltiplos containers, como sua aplicação Node.js e um banco de dados (ex: MongoDB ou PostgreSQL), fazendo com que eles se comuniquem de forma simples.
Dominar o Docker é uma habilidade extremamente valiosa no mercado atual. Espero que este guia tenha desmistificado o processo e te dado a confiança para começar a usar containers em todos os seus projetos.

