Dockerizando Sua Aplicação Node.js

Dockerizar uma aplicação Node.js é uma excelente forma de garantir portabilidade, escalabilidade e facilidade no gerenciamento do ambiente de desenvolvimento e produção. Neste guia completo, você aprenderá passo a passo como colocar sua aplicação Node.js dentro de um contêiner Docker.

O Que é Docker?

Docker é uma plataforma de contêineres que permite empacotar e distribuir aplicativos junto com suas dependências e configurações. Isso garante que o software rode de forma consistente em qualquer ambiente, eliminando o clássico problema de “funciona na minha máquina”.

Benefícios de Dockerizar sua Aplicação Node.js

  • Consistência: Garante que o ambiente seja o mesmo em desenvolvimento, teste e produção.
  • Escalabilidade: Facilita a implantação e escalabilidade da aplicação.
  • Portabilidade: Pode ser executado em qualquer sistema operacional que suporte Docker.
  • Facilidade no Gerenciamento de Dependências: Todas as dependências são empacotadas no contêiner.

Pré-requisitos

Antes de começarmos, certifique-se de ter os seguintes requisitos instalados:

Criando a Aplicação Node.js

Caso ainda não tenha uma aplicação Node.js, você pode criar uma simples com o Express:

mkdir minha-app
cd minha-app
npm init -y
npm install express

Crie um arquivo server.js com o seguinte conteúdo:

const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => {
    res.send('Olá, Docker!');
});

app.listen(PORT, () => {
    console.log(`Servidor rodando na porta ${PORT}`);
});

Criando o Dockerfile

O Dockerfile é um arquivo que contém as instruções para criar a imagem Docker da nossa aplicação. No diretório do projeto, crie um arquivo chamado Dockerfile e adicione o seguinte conteúdo:

# Usa uma imagem oficial do Node.js como base
FROM node:18-alpine

# Define o diretório de trabalho dentro do contêiner
WORKDIR /app

# Copia os arquivos do projeto para o contêiner
COPY package.json .
COPY package-lock.json .

# Instala as dependências
RUN npm install

# Copia os arquivos restantes
COPY . .

# Expõe a porta da aplicação
EXPOSE 3000

# Comando para iniciar a aplicação
CMD ["node", "server.js"]

Criando o .dockerignore

Crie um arquivo .dockerignore para evitar copiar arquivos desnecessários para o contêiner:

node_modules
npm-debug.log
.DS_Store
.git

Construindo e Rodando o Contêiner

Agora podemos construir a imagem Docker da aplicação e rodá-la dentro de um contêiner.

Construindo a Imagem

No terminal, execute:

docker build -t minha-app .

Rodando o Contêiner

Agora, execute o seguinte comando para rodar a aplicação dentro do contêiner:

docker run -p 3000:3000 minha-app

Acesse http://localhost:3000 no navegador e você verá a mensagem Olá, Docker!.

Usando Docker Compose

O Docker Compose facilita a definição e execução de aplicações multi-contêiner. Para usá-lo, crie um arquivo docker-compose.yml:

version: '3'
services:
  app:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - .:/app
    environment:
      - NODE_ENV=development

Agora, basta rodar:

docker-compose up

Isso inicializará o contêiner e permitirá que a aplicação seja acessada em http://localhost:3000.

Persistência com Volumes

Adicionar um volume no Docker Compose evita a necessidade de reconstruir a imagem sempre que um arquivo for alterado:

volumes:
  - .:/app
  - /app/node_modules

Conclusão

Dockerizar uma aplicação Node.js proporciona maior portabilidade e escalabilidade ao projeto. Com o uso de um Dockerfile e docker-compose.yml, podemos rodar a aplicação de maneira simplificada e eficiente. Agora você está pronto para levar sua aplicação ao próximo nível com Docker!