Criando uma aplicação node em container
Criando uma aplicação node em container
Objetivo
Criar uma aplicação node utilizando o docker
Nessa parte da nossa série de artigos sobre docker, vamos ver como desenvolver um software utilizando uma tecnologia, sem a necessidade de ter essa tecnologia instalada em nossa máquina, no nosso caso vamos utilizar como exemplo uma aplicação node.
Disclaimer
Neste artigo a aplicação é apenas um exemplo, sendo assim não considerei fatores como separar responsabilidades e etc... outro ponto importante é que ao utilizar o COPY no Dockerfile abaixo, vamos copiar tudo inclusive o diretório node_modules
que é enorme, em produção não fazemos dessa forma, porém o objetivo do artigo é simplesmente demonstrar como desenvolver aplicações utilizando um container, sobre otimização de imagens falaremos em outro artigo.
Começando os trabalhos
Para inicio de conversa vamos criar ou escolher um diretório para trabalhar na nossa máquina, no meu caso eu escolhi /~/Documents/artigos/aplicacao_node
Agora vamos executar um container com node, porém vamos mapear um volume para o diretório acima, é importante que ao executar esse comando, você esteja dentro desse diretório:
docker run --rm -it -v $(pwd):/usr/src/app -p 3000:3000 node bash
root@8cab4b572964:/#
Vou também abrir o diretório /~/Documents/artigos/aplicacao_node
no vscode (pode utilizar o editor que você preferir).
cd /~/Documents/artigos/aplicacao_node
code .
No container, vamos acessar o diretório do nosso volume
root@8cab4b572964:/# cd /usr/src/app/
Note que se você criar um arquivo aí dentro, esse arquivo deve aparecer no vscode
root@8cab4b572964:/usr/src/app# touch oi.txt
root@8cab4b572964:/usr/src/app# ls
oi.txt
root@8cab4b572964:/usr/src/app# rm oi.txt
Iniciando o desenvolvimento
Para iniciar nossa aplicação node vamos executar um npm init
e aceitar todas as opções
root@8cab4b572964:/usr/src/app# npm init
Note que foi criado um arquivo package.json
que pode ser acessado pelo vscode
root@8cab4b572964:/usr/src/app# ls
package.json
Agora vamos instalar o express
root@8cab4b572964:/usr/src/app# npm install express --save
No vscode no diretório raiz crie um arquivo chamado index.js
com o seguinte conteúdo:
const express = require("express");
const app = express();
const port = 3000;
app.get("/", (req, res) => {
res.send("<h1>It Works !</h1>");
});
app.listen(port, () => {
console.log("Server running on port " + port);
});
Vamos testar se o nosso programa consegue ser executado
root@8cab4b572964:/usr/src/app# node index.js
Server running on port 3000
Se você abrir um navegador e testar a url http://localhost:3000/ ou mesmo via curl verá que teremos nossa aplicação sendo executada
curl http://localhost:3000/
<h1>ItWorks!<h1>
Note que você está desenvolvendo dentro do container por tanto nesse caso nem precisaria ter o node instalado na sua máquina.
Criando uma imagem
Agora que sabemos que nossa aplicação está estável, podemos criar uma imagem pra ela, então vamos criar um Dockerfile
FROM node:latest
WORKDIR /usr/src/app
COPY . .
EXPOSE 3000
CMD [ "node", "index.js" ]
Agora vamos fazer o build dessa imagem
docker build -t jorgerabello/sample-node-app:latest .
Agora vamos executar o um container utilizando essa imagem
docker run -p 3000:3000 jorgerabello/sample-node-app:latest
Server running on port 3000
Agora basta acessar ou no navegador ou via curl.
Por fim vamos fazer push da nossa imagem
docker push jorgerabello/sample-node-app:latest