nodejs docker

NodeJS com Docker

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/

Este conteúdo te ajudou de alguma forma?