Containerização de aplicações TypeScript com Docker: guia completo

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Por que a containerização de aplicações TypeScript é essencial para o desenvolvedor moderno

\n

Imagine a situação: você escreveu uma aplicação TypeScript incrível no seu MacBook, tudo funciona perfeitamente. Você envia o código para um servidor Ubuntu — e recebe uma enxurrada de erros. Familiar? O problema está na diferença de ambientes: versões do Node.js, bibliotecas do sistema, variáveis de ambiente. O Docker resolve essa dor de uma vez por todas. A containerização de aplicações TypeScript permite empacotar o código junto com todas as dependências em um contêiner isolado que será executado da mesma forma em qualquer servidor, na nuvem ou na máquina local do seu colega.

\n

Neste artigo, vamos abordar como containerizar corretamente uma aplicação TypeScript com Docker. Você aprenderá não apenas os passos básicos, mas também técnicas avançadas: builds multiestágio, otimização do tamanho da imagem, cache de dependências e trabalho com variáveis de ambiente. Vamos nessa!

\n\n

O que é Docker e por que ele é importante para o desenvolvedor TypeScript

\n

Docker é uma plataforma para criar, distribuir e executar aplicações em contêineres. Um contêiner é um ambiente leve e autônomo que contém tudo o que é necessário para executar sua aplicação TypeScript: código, runtime (Node.js), ferramentas do sistema, bibliotecas e configurações.

\n

As vantagens para projetos TypeScript são óbvias:

\n
    \n
  • Reprodutibilidade do ambiente — chega de "funciona na minha máquina" e "quebrou em produção".
  • \n
  • Isolamento — cada aplicação roda em seu próprio contêiner, sem interferir em outros serviços.
  • \n
  • Escalabilidade — é fácil executar 10 instâncias do seu servidor TypeScript com Docker Compose ou Kubernetes.
  • \n
  • Simplicidade de deploy — uma única imagem pode ser executada em qualquer plataforma: AWS, Google Cloud, DigitalOcean ou localmente.
  • \n
\n\n

Pré-requisitos

\n

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

\n
    \n
  • Docker — baixe do site oficial (funciona no Windows, macOS, Linux).
  • \n
  • Node.js versão 18 ou superior (para compilar TypeScript).
  • \n
  • TypeScript — instalado globalmente ou localmente no projeto.
  • \n
\n

Como exemplo, usaremos uma aplicação Express simples em TypeScript. Mas a abordagem é universal: você pode containerizar qualquer projeto TypeScript — de um bot do Telegram a um servidor NestJS.

\n\n

Estrutura do projeto

\n

Para começar, vamos criar uma estrutura mínima de aplicação TypeScript:

\n
my-typescript-app/\n├── src/\n│   └── index.ts\n├── package.json\n├── tsconfig.json\n└── Dockerfile
\n

O arquivo src/index.ts conterá um servidor HTTP simples:

\n
import express from 'express';\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.get('/', (req, res) => {\n  res.send('Hello from TypeScript + Docker!');\n});\n\napp.listen(PORT, () => {\n  console.log(`Server is running on port ${PORT}`);\n});
\n

O arquivo tsconfig.json com configurações básicas:

\n
{\n  "compilerOptions": {\n    "target": "ES2020",\n    "module": "commonjs",\n    "outDir": "./dist",\n    "rootDir": "./src",\n    "strict": true,\n    "esModuleInterop": true\n  }\n}
\n\n

Escrevendo o primeiro Dockerfile para aplicação TypeScript

\n

A maneira mais simples é fazer um build de estágio único. Mas vamos seguir o caminho correto desde o início e criar um build multiestágio. Isso permitirá reduzir a imagem final em várias vezes.

\n
# Stage 1: Build\nFROM node:18-alpine AS builder\nWORKDIR /app\nCOPY package*.json ./\nRUN npm install\nCOPY . .\nRUN npm run build\n\n# Stage 2: Production\nFROM node:18-alpine\nWORKDIR /app\nCOPY --from=builder /app/dist ./dist\nCOPY --from=builder /app/package*.json ./\nRUN npm install --production\nEXPOSE 3000\nCMD ["node", "dist/index.js"]
\n

Vamos detalhar cada etapa:

\n
    \n
  • bu
  • \n

Blogs

Book Recommendations