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á ...
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.
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.
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Á!
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.
Acesse o navegador e atualize a página para ver a mágica acontecer.
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)
Boaaa!! Fico feliz pela menção! Parabéns pelo post!! tmj
Só vi o seu comentário agora. Obrigado por prestigiar. rsrs