Veja nesse artigo
Introdução
O NodeJS é um ambiente de execução Javascript em server-side, ou seja, o NodeJS da possibilidade de programar o backend de uma aplicação, totalmente em Javascript, sendo assim você pode manter a mesma linguagem pro backend e pro frontend de sua aplicação.
O Docker é uma plataforma que permite colocar os sistemas em ambientes isolados, ou seja, cada aplicação pode ficar dentro de um container, e com isso, esse código implantado nesse container, irá funcionar em qualquer dispositivo que tenha esse mesmo container, facilitando a criação e implantação de softwares. Como exemplo, em uma aplicação NodeJS com banco de dados MongoDB, utilizando o Docker, não é necessário ter ambos os recursos instalados direto no computador, porque os mesmos ficarão no container que irão rodar o sistema.
Pensando nisso, uma das formas de se desenvolver com o Node, pode ser utilizando o Docker, pois com ele é possível adicionar recursos enquanto o software vai crescendo. Por exemplo, caso o sistema precise de um cache, é possível subir um container com um gerenciador de cache de forma mais fácil.
Pré requisitos
Para este artigo, é necessário a ter instalação do Docker, seja o Docker utilizado em ambientes Linux/Mac/Windows (com algumas especificações) ou o Docker Toolbox.
Com o Docker Toolbox é possível ter o Docker no Windows independente das especificações do Sistema Operacional, porque com o Docker comum é necessário ter uma série de pré requisitos. O meu particularmente é o Docker Toolbox, para baixar clique neste link
NodeJS no Docker na prática
Para este exemplo, será utilizado um Hello World em NodeJS, somente para exemplificar o uso com o Docker.
Primeiramente, é preciso iniciar um projeto NodeJS com o NPM, para isso, o comando é:
npm init -y
Posterior a isso, depois de criado, é necessário criar um arquivo server.js na raiz do projeto com o seguinte código:
'use strict';
const express = require('express');
// Constants
const PORT = 8080;
const HOST = '0.0.0.0';
// App
const app = express();
app.get('/', (req, res) => {
res.send('Olá mundo');
});
app.listen(PORT, HOST);
console.log(`Running on http://${HOST}:${PORT}`);
A próxima etapa é instalar a dependência do Express com o comando:
npm i express --save
Com isso, o projeto em NodeJS já está funcionando normalmente, porém agora que será criado a parte do Docker para que os dois funcionem em conjunto e para isso, é preciso criar um arquivo chamado Dockerfile, na raiz do projeto, somente dessa forma, sem extensão, e dentro dele terá as configurações do NodeJS com o Docker, o arquivo Dockerfile ficará dessa forma:
FROM node:12
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD [ "node", "server.js" ]
Na linha 1, contém a versão do Node no qual será o projeto, que no caso é a versão 12.
Na linha 3, contém o diretório no qual o app do NodeJS será montado dentro do container do Docker.
Na linha 5, mostra que o Docker irá copiar o arquivo package.json e o package-lock.json, nesse arquivo contém as dependências do projeto, então ele é necessário estar dentro do projeto no Docker para que as mesmas dependências sejam instaladas.
Na linha 7 irá instalar as dependências que estão no package.json recém copiado.
Na linha 9, irá pegar todos os arquivos e diretórios do projeto local e colocar dentro do container do Docker.
Na linha 11, ele irá expor a porta 8080 para que seja possível o PC se conectar com essa porta do Docker.
Por fim na linha 12 contém o comando que é utilizado para a inicialização do servidor NodeJS.
Depois disso, é preciso criar um arquivo .dockerignore, ele é necessário para que o comando COPY não copie arquivos indesejados, como o diretório node-modules por exemplo.
Na pasta raiz mesmo do projeto, crie o arquivo .dockerignore que terá o seguinte conteúdo:
node_modules
npm-debug.log
Pronto, todas as configurações do NodeJS com o Docker foram realizadas, agora é necessário buildar esse projeto e subir com o Docker, e isso já estará funcionando.
Abra o terminal com acesso a os comandos do Docker e navegue até o diretório do projeto.
Caso esteja com o Docker Toolbox, é necessário usar o terminal que ele disponibiliza, depois da instalação o executável estará no Desktop, se não estiver vá em C:\Program Files\Docker Toolbox e clique duas vezes no start.sh.
Dentro da pasta do projeto dê o comando trocando o your username pelo seu nome, de preferência nome e sobrenome juntos:
docker build -t <your username>/node-web-app .
Posterior a isso, para rodar o projeto, use o comando:
docker run -p 49160:8080 -d <your username>/node-web-app
Com isso o app NodeJS já estará rodando no endereço http://localhost:49160.
Caso esteja com o Docker Toolbox, não estará funcionando em localhost, é necessário voltar o terminal e usar o comando:
docker-machine ip
Pegue esse IP e use-o no navegador para ter acesso ao app NodeJS, no meu caso ficou http://192.168.99.100:49160. E com isso o app NodeJS já mostra o Olá mundo.
Vídeo completo
Caso queira, gravei um vídeo completo sobre como usar o Node com o Docker:
Conclusão
Usar o Docker, com certeza é uma boa, pois facilita muito o desenvolvimento e implantação de um projeto, e não seria diferente com um projeto NodeJS, essa é uma introdução bem básica, porém com ele é possível realizar diversas outras configurações, como colocar um NGINX para fazer um load-balancer, usar o Redis para cache, banco de dados e diversas outras configurações de forma fácil, é isso, até o próximo artigo 🙂
Para ver outros canais onde o posto conteúdo, meu Github e também cursos, veja os Links do Programando Soluções.
Referências
https://www.treinaweb.com.br/blog/no-final-das-contas-o-que-e-o-docker-e-como-ele-funciona/
https://nodejs.org/en/docs/guides/nodejs-docker-webapp/