Docker e JavaScript: conteinerização de aplicações Node.js do zero

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

Docker e JavaScript: Guia Completo para Containerização de Aplicações Node.js



O desenvolvimento web moderno é impensável sem containerização. Docker tornou-se o padrão de facto para empacotar, entregar e executar aplicações em ambientes isolados. Neste artigo, vamos detalhar como usar Docker para containerizar aplicações JavaScript em Node.js. Você aprenderá como criar um Dockerfile otimizado, gerenciar imagens e containers, além de conhecer as melhores práticas.



O que é Docker e por que ele é necessário para um desenvolvedor JavaScript?



Docker é uma plataforma para desenvolvimento, entrega e execução de aplicações em containers. Um container é um ambiente leve, autônomo e executável que contém tudo o que é necessário para a aplicação funcionar: código, runtime, ferramentas do sistema, bibliotecas e configurações.



Para um desenvolvedor JavaScript que trabalha com Node.js, Docker resolve vários problemas-chave:



  • Reprodutibilidade do ambiente: "Na minha máquina funciona" — não é mais um problema. Docker garante que a aplicação funcionará da mesma forma no computador do desenvolvedor, no servidor CI/CD e em produção.
  • Isolamento de dependências: Cada aplicação recebe seu próprio conjunto de dependências, sem conflitar com outros projetos.
  • Simplificação da implantação: Uma imagem Docker pode ser facilmente executada em qualquer plataforma que suporte Docker (Linux, Windows, macOS, servidores em nuvem).
  • Escalabilidade: Containers podem ser facilmente escalados horizontalmente com orquestradores como Docker Compose ou Kubernetes.


Criando um Dockerfile para uma aplicação Node.js



Dockerfile é um arquivo de texto com instruções para construir uma imagem Docker. Vamos criar passo a passo um Dockerfile para uma aplicação Express.js típica.



Suponha que temos uma aplicação Node.js simples com a seguinte estrutura:



my-node-app/├── package.json├── package-lock.json├── src/│   └── index.js└── Dockerfile


Conteúdo de src/index.js:



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

app.get('/', (req, res) => { res.send('Hello from Dockerized Node.js!');});

app.listen(PORT, () => { console.log(`Server running on port ${PORT}`);});


Agora vamos criar o Dockerfile:



# Usamos a imagem oficial do Node.js versão 18 (LTS)FROM node:18-alpine

# Definimos o diretório de trabalho dentro do containerWORKDIR /usr/src/app

# Copiamos os arquivos package.json e package-lock.jsonCOPY package*.json ./

# Instalamos as dependências da aplicaçãoRUN npm ci --only=production

# Copiamos o código fonte da aplicaçãoCOPY . .

# Indicamos a porta que a aplicação irá escutarEXPOSE 3000

# Comando para iniciar a aplicaçãoCMD ["node", "src/index.js"]


Vamos analisar os pontos-chave:

  • FROM node:18-alpine — usamos uma imagem mínima baseada em Alpine Linux. Isso reduz significativamente o tamanho da imagem final.
  • WORKDIR — define o diretório de trabalho. Todos os comandos subsequentes serão executados em relação a ele.
  • COPY package*.json ./ — copiamos apenas os arquivos de dependências antes de copiar o código fonte. Isso permite cachear a camada de instalação de dependências se o package.json não foi alterado.
  • RUN npm ci --only=production — instala as dependências a partir do arquivo lock. A flag --only=production exclui dependências de desenvolvimento (testes, linters, etc.), reduzindo o tamanho da imagem.
  • EXPOSE 3000 — documenta que a aplicação escuta na porta 3000. Isso não abre a porta automaticamente, mas serve como uma dica para o Docker.


Construindo e executando o container



Blogs

Book Recommendations