🚀 Criando um Ambiente de Desenvolvimento com NestJS no Docker

Se você está construindo uma API com NestJS, trabalhar com containers é uma excelente escolha — especialmente durante o desenvolvimento. Neste artigo, vou te mostrar como configurar sua aplicação NestJS utilizando Docker, Docker Compose e também como otimizar isso com o .dockerignore.

✅ Pré-requisitos

Antes de começar, certifique-se de ter instalado:

  • Node.js
  • Docker
  • Docker Compose
  • Nest CLI (opcional, caso queira gerar código fora do container)

✨ Criando o projeto NestJS

Vamos começar criando a aplicação que usaremos no exemplo:

yarn add -g @nestjs/cli
nest new nestjs-docker

Durante o processo, o terminal vai perguntar qual gerenciador de pacotes você deseja usar. No meu caso, escolhi Yarn.

Agora abra o projeto no VSCode:

cd nestjs-docker/
code .

📁 Estrutura dos arquivos

🛠️ Criando o Dockerfile

Nosso Dockerfile está baseado na imagem node:22-slim. Aqui está o conteúdo:

FROM node:22-slim

# Instala bash (opcional, mas útil para debug)
RUN apt-get update && apt-get install -y bash && rm -rf /var/lib/apt/lists/*

# Instala globalmente o Nest CLI
RUN yarn global add @nestjs/cli@10

# Define o diretório de trabalho
WORKDIR /home/node/app

# Copia arquivos de dependência e instala pacotes
COPY package*.json yarn.lock ./
RUN yarn install

# Copia o restante do projeto
COPY . .

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

# Comando padrão para iniciar o servidor
CMD ["yarn", "start:dev"]

🔧 Criando o docker-compose.yaml

Com o Docker Compose, simplificamos o processo de execução:

services:
  app:
    build: .
    ports:
      - "3000:3000"
    volumes:
      - .:/home/node/app
    environment:
      - PORT=3000
    command: yarn start:dev
O bind mount (.:/home/node/app) permite que você edite os arquivos localmente e veja as mudanças em tempo real dentro do container.

🚫 Criando o .dockerignore

O arquivo .dockerignore ajuda a evitar que arquivos desnecessários sejam copiados para dentro da imagem, tornando o build mais rápido e limpo:

node_modules
.nuxt
dist
.git
.vscode

▶️ Rodando a aplicação

Agora que tudo está configurado, você pode subir o ambiente com:

docker compose up --build

Você pode verificar os containers rodando com:

docker compose ps

Sua aplicação NestJS estará disponível em:

http://localhost:3000

E você verá o clássico Hello World! padrão do NestJS.

🧩 Bônus: Rodando com Dev Containers no VSCode

Imagine que você precisa instalar pacotes como @nestjs/config. Você teria que entrar no container sempre que precisasse mexer na aplicação:

docker compose exec app  bash
yarn add @nestjs/config

Isso pode ser incômodo. Afinal, mesmo com a aplicação em um container, seu ambiente de desenvolvimento ainda está fora dele.

É aqui que entra o Dev Container do VSCode: ele permite que todo o seu ambiente — editor, terminal, extensões e tudo mais — rode dentro do container. É como se você estivesse trabalhando localmente, mas com todas as vantagens da conteinerização.

⚙️ Como configurar o Dev Container

  1. No VSCode, abra a paleta de comandos (F1) e escolha:
  2. Dev Containers: Abrir pasta no Container...
  3. Selecione a pasta raiz do projeto.
  4. Clique em "Adicionar configuração ao workspace".
  5. Escolha a opção "De docker-compose.yaml".
  6. Na etapa de recursos, você pode buscar e adicionar ferramentas como git, zsh, entre outros.
  7. O VSCode vai iniciar o build do container com base no Docker Compose.

📂 Resultado

Depois do processo, seu projeto terá uma pasta .devcontainer com os arquivos de configuração, e o VSCode estará rodando inteiramente dentro do container.

Agora é só rodar novamente a aplicação:

Abra o navegador e acesse:

http://localhost:3000

E pronto! O famoso Hello World estará lá, rodando num ambiente isolado, limpo e pronto para escalar.

Você pode confirmar que o container está ativo com:

docker ps

💡 Dicas adicionais

  • Hot Reload: O yarn start:dev já cuida disso com o ts-node-dev, desde que o volume esteja montado corretamente.
  • Extensões do VSCode: Use o Remote Containers para codar dentro do container.
  • Prod vs Dev: Este setup é para desenvolvimento. Para produção, o ideal é usar yarn build e rodar com node dist/main.js.

📦 Conclusão

Trabalhar com NestJS em containers facilita o setup entre devs, garante consistência no ambiente e ainda deixa o deploy mais previsível. Se você curtiu esse conteúdo e quer acompanhar mais tutoriais como esse, me siga no bitlynk.com.br!

🏷️ Tags

NestJSDockerDocker ComposeDev ContainerVSCodeAmbiente de DesenvolvimentoContainersBackendNode.jsTypeScriptTutorialHot ReloadAPI REST