Containerização JavaScript: Docker para Node.js e Frontend

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 seu projeto JavaScript merece o Docker?

\n\n

Você já ouviu a frase: "Na minha máquina funcionava!"? Se você é um desenvolvedor JavaScript, provavelmente já enfrentou uma situação em que o aplicativo funciona perfeitamente localmente, mas no servidor ou no computador de um colega — falha com um erro misterioso. A containerização de aplicações JavaScript com Docker resolve esse problema de uma vez por todas.

\n\n

O Docker permite empacotar seu código, todas as dependências (pacotes npm), variáveis de ambiente e até a versão do Node.js em um "contêiner" leve. Esse contêiner funcionará da mesma forma no seu notebook, no servidor AWS e no computador de um iniciante que acabou de instalar o Git. Neste artigo, vamos explorar como integrar JavaScript e Docker, escrever código real e criar uma imagem pronta para produção para o seu próximo pet-project.

\n\n

Fundamentos do Docker para desenvolvedores JavaScript

\n\n

Antes de mergulhar no código, vamos entender os conceitos-chave. Docker é como uma máquina virtual, mas muito mais leve. Em vez de emular um sistema operacional inteiro, ele usa o kernel do host e isola apenas sua aplicação.

\n\n

Dockerfile — a receita da sua aplicação

\n\n

Este é um arquivo de texto onde você descreve como construir a imagem. Para uma aplicação Node.js, um Dockerfile típico se parece com isso:

\n\n
# Usamos a imagem oficial do Node.js\nFROM node:18-alpine\n\n# Definimos o diretório de trabalho dentro do contêiner\nWORKDIR /app\n\n# Copiamos package.json e package-lock.json\nCOPY package*.json ./\n\n# Instalamos as dependências\nRUN npm ci --only=production\n\n# Copiamos o código-fonte\nCOPY . .\n\n# Abrimos a porta\nEXPOSE 3000\n\n# Comando para iniciar\nCMD ["node", "server.js"]
\n\n

Observe: primeiro copiamos o package.json e depois todo o código. Isso não é por acaso. O Docker armazena em cache as camadas, e se você não alterou as dependências, a etapa npm ci não será reiniciada a cada alteração no código. Isso acelera muito a construção.

\n\n

Imagens e contêineres

\n\n
    \n
  • Imagem (Image) — é um modelo. Você a constrói uma vez.
  • \n
  • Contêiner (Container) — é uma instância em execução da imagem. Você pode criar 10 contêineres a partir de uma única imagem.
  • \n
\n\n

Criando uma aplicação Node.js do zero e containerizando-a

\n\n

Vamos escrever uma aplicação Express simples e empacotá-la no Docker. Este será nosso primeiro passo prático na containerização de JavaScript.

\n\n

Passo 1: Escrevendo a aplicação

\n\n

Crie uma pasta docker-node-app e dentro dela, o arquivo server.js:

\n\n
const express = require('express');\nconst app = express();\nconst PORT = process.env.PORT || 3000;\n\napp.get('/', (req, res) => {\n  res.json({ \n    message: 'Olá do contêiner!',\n    nodeVersion: process.version,\n    environment: process.env.NODE_ENV || 'development'\n  });\n});\n\napp.listen(PORT, () => {\n  console.log(`Servidor rodando na porta ${PORT}`);\n});
\n\n

Inicialize o npm e instale o express:

\n\n
npm init -y\nnpm install express
\n\n

Agora temos uma aplicação funcional. Execute-a localmente: node server.js. Abra http://localhost:3000 — você verá um JSON.

\n\n

Passo 2: Criando o Dockerfile

\n\n

Crie um arquivo Dockerfile (sem extensão) na raiz do projeto:

\n\n
FROM node:18-alpine\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci --only=production\nCOPY . .\nEXPOSE 3000\nCMD ["node", "server.js"]
\n\n

Adicione um .dockerignore para não copiar arquivos desnecessários para a imagem:

\n\n
node_modules\nnpm-debug.log\n.git\n.gitignore\n.env\nDockerfile
\n\n

Passo 3: Construindo e executando

\n\n

Abra o terminal na pasta do projeto e execute:

\n\n
docker build -t my-node-app .\ndocker run -p 3000:3000 my-node-app
\n\n

A flag

Blogs

Book Recommendations