DEV Community

Lucas Stellet
Lucas Stellet

Posted on

Construindo um ambiente Node.js com Docker

Eae dev!

Meu nome é Lucas e tenho 27 anos, pouco mais de 3 anos entre estudante de desenvolvimento e programador de verdade.
O que me motivou a escrever esse artigo foi a vontade de mostrar como criar um ambiente de desenvolvimento que é utilizado também em ambientes de produção, usando containers e especialmente Docker. Esse artigo é um pouco mais prático, não se atentará a explicar como Docker funciona e o contexto dos containers e imagens. Não que não seja importante conhecer os fundamentos, mas para começar a utilizar não é necessário. No final deixarei alguns vídeos e outros artigos caso você tenha esse intuito.

Docker é um gerenciador de containers criado por Solomon Hykes e que, na minha opinião, mudou a forma de desenvolver, sendo utilizado tanto no ambiente de desenvolvimento quanto de produção.
Depois que conheci, o Docker e resolvi aplica-lo no meu dia-dia, não o abandonei mais. Depois do ar condicionado, a melhor invenção do homem foi o Docker.
Você consegue criar um ambiente em poucos segundos e pode começar a desenvolver um sistema que será facilmente utilizado tanto no servidor quanto em outro computador.
Sim, aquela frase "no meu computador funciona" não será mais dita.

Pré-requisitos

Antes de começarmos de fato a utilizar o Docker, alguns pré-requisitos precisam ser preenchidos. São eles:

1 - Ter o Docker instalado em sua máquina. Caso não tenha, segue alguns links ensinando como instalar:

https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04-pt
https://www.mundodocker.com.br/tag/docker-no-windows/

2 - Ter o Node.js instalado em seu computador. Deixarei apenas o link de como instalar no Linux devido à facilidade de instalação no Winodws.

https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-20-04-pt

1º Passo - Criar um projeto Node.js com NPM

Escolha um diretório de sua preferência e no terminal, digite o comando abaixo:

mkdir node_project

Navegue para esse diretório utilizando o comando abaixo:

cd node_project

Inicie um projeto node lembrando de colocar a tag "-y" no final para que não haja a necessidade de preenchimento dos campos:

npm init -y

2º Passo - Criando o arquivo do projeto e instalando Koa.js

O nosso app será bem básico, utilizando uma biblioteca conhecida no mundo JS chamada Koa.js. Esse lib surgiu de uma galera que se desvencilhou de um outro projeto, Express. Ele também é baseado em middlewares e facilita bastante a criação de um servidor HTTP com o Node.js. No final, deixarei alguns links falando mais sobre o Koa caso você tenha interesse em se aprofundar mais.

Bom, antes de criar o nosso arquivo, vamos instalar o Koa como dependência do nosso projeto para podermos utilizá-lo.

npm install koa

Além do Koa, vamos instalar o Nodemon como uma dependência de desenvolvimento, que nos permitirá atualizar a nossa aplicação e ver o efeito dessa atualização em tempo real.

npm install nodemon -D

Sem mais delongas, vamos criar o nosso app.js. (FINALMENTE!)

//app.js
const Koa = require('koa')

const app = new Koa()

app.use((ctx) => {
  ctx.body = '<h1>Hello from my first Node.js Docker app!</h1>'
})

app.listen('3000')

Para que consiga testar, basta digitar no diretório do arquivo o comando a seguir:

node app.js

Acesse o seu navegador preferido, digite "localhost:3000" e voilá ...

Alt Text

Temos um servidor rodando em nosso computador. Vamos agora para a última etapa e mais importante, colocar o servidor para rodar em um container Docker.

Último Passo - Criando uma imagem Docker e subindo um container com o nosso servidor

Agora que temos o projeto instalado, vamos criar um novo arquivo no nosso diretório chamado Dockerfile. Com ele será possível criar uma imagem e posteriormente, subir o container com a aplicação rodando via localhost.

Alt Text

Uma dica importante, se você é como a maioria dos devs hoje em dia e utiliza o VSCode como ferramenta para desenvolver, instale a extensão do Docker para ter acesso a várias coisas legais como syntax highlighting.

https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker

Com o arquivo Dockerfile criado, digite a receita abaixo:

// Dockerfile
FROM node:12.18.3-alpine3.12

RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app

WORKDIR /home/node/app

COPY package*.json ./

RUN npm install

COPY . .

COPY --chown=node:node . .

USER node

EXPOSE 3000

CMD [ "node", "app.js" ]

Pronto, vamos fazer mágica acontecer. Em seu terminal, no diretório do projeto, digite:

docker build . -t node-app

Aguarde alguns segundos, dependendo da velocidade da sua conexão, para que a imagem Node seja baixada e se a mensagem abaixo aparecer no seu terminal, está tudo ok para seguirmos adiante.

Alt Text

Com a imagem criada, vamos criar o nosso container e colocar ele para rodar.

docker run --name my-node -p 3000:3000 -v "${PWD}:/home/node/app" node-app

Se não houve nenhum erro ao final do processo, acesse novamente o seu navegador preferido, digite "localhost:3000" e novamente... VOILÁ!

Alt Text

Pronto. Temos um servidor Node rodando em Docker. Viu como é fácil? Quer ver outra coisa sensacional?
Vá até o arquivo app.js no seu editor ou IDE preferido e mude o texto dentro da tag H1.

Alt Text

Acesse o navegador e atualize a página para ver a mágica acontecer.

Alt Text

Conseguimos realizar tal façanha utlizando um recurso do Docker que cria volumes e reflete toda alteração feita no arquivo que está na pasta automaticamente no containter.

Com mais algumas linhas de código, estudo sobre Docker, você será capaz de subir uma aplicação dessas em produção.

Espero que tenha gostado dessa artigo prático e que tenha coçado o seu cerebelo para ir cada vez mais fundo nesse mundo Docker.

Como prometido, segue links de outros materiais que irão te ajudar a seguir adiante:

Como criar um servidor HTTP com KoaJS - CollabCode
https://www.youtube.com/watch?v=D780xIvOBPk&t=2s

https://www.digitalocean.com/community/tutorials/how-to-build-a-hello-world-application-with-koa

Docker em 22 minutos - teoria e prática - Programador a Bordo
https://www.youtube.com/watch?v=Kzcz-EVKBEQ

Ambiente de desenvolvimento NodeJS com Docker e Docker Compose - Rocketseat
https://www.youtube.com/watch?v=AVNADGzXrrQ&t=611s

Ambientes Back-End com Docker + VS Code - Código Fonte TV
https://www.youtube.com/watch?v=97jWpWp4Pnc

Como configurar seu ambiente de desenvolvimento Javascript para usar Docker - Erick Wendel https://www.youtube.com/watch?v=Bp2bU6fQcSo&t=468s

Top comments (2)

Collapse
 
erickwendel profile image
Erick Wendel

Boaaa!! Fico feliz pela menção! Parabéns pelo post!! tmj

Collapse
 
lucasstellet profile image
Lucas Stellet

Só vi o seu comentário agora. Obrigado por prestigiar. rsrs