O objetivo deste artigo será a criação de uma imagem de uma aplicação Web desenvolvida em Node.js e a sua publicação em um container no Heroku.
Nosso primeiro passo será escolhermos um diretório para o nosso projeto e a criação de dois novos arquivos dentro dele: package.json e server.js. Com o diretório e os arquivos criados abra um editor de texto de sua preferencia. Agora vamos colar o código a baixo dentro do nosso arquivo package.json.
{ "name": "nodejs-docker", "version": "1.0.0", "description": "Node.js on Docker", "author": "tadriano.net@outlook.com", "main": "server.js", "scripts": { "start": "node server.js" }, "dependencies": { "express": "^4.13.3" } }
Agora adicione o código abaixo no seu arquivo server.js.
'use strict'; const express = require('express'); // Constants const PORT = process.env.PORT || 3000; const HOST = '127.0.0.1'; // App const app = express(); app.get('/', (req, res) => { res.send('Hello world\n'); }); app.listen(PORT, HOST); console.log(`Running on http://${HOST}:${PORT}`);
Agora execute o comando npm install para baixar os nossos pacotes, assim que ele finalizar execute npm start para que possamos verificar se o projeto esta rodando corretamente.
Caso tudo esteja OK irá aparecer a mensagem abaixo no terminal do seu Visual Studio Code:
Bom, até este ponto não vimos nenhuma novidade, somente criamos uma aplicação simples em Node. Vamos agora criar o nosso arquivo DockerFile.
FROM node:boron WORKDIR /app COPY . . CMD NODE_URLS=http://*:$PORT npm start
Vamos navegar pelas linhas do nosso arquivo:
FROM node:boron
Nessa primeira linha nós estamos definindo qual imagem iremos utilizar.
WORKDIR /app
Neste passo nós estamos definindo o diretório dentro da nossa aplicação que ira executar o nosso código.
COPY . .
Neste ponto iremos copiar os arquivos do nosso diretório local para dentro da nossa imagem.
CMD NODE_URLS=http://*:$PORT npm start
Por fim estamos criando uma variável local para receber a porta dinamicamente e passando o comando que irá precisar ser executado para rodar o nosso container.
Com tudo OK vamos agora criar a nossa imagem. Para isso, execute o comando abaixo no seu terminal dentro do diretório que você criou o seu arquivo DockerFile.
docker build -t nodejs-docker .
Agora execute o comando docker images para verificar se a imagem foi criada corretamente.
Nosso próximo passo será executar a nossa imagem. Para isso execute o comando abaixo no seu terminal:
docker run -p 80:8080 nodejs-docker
Agora para verificarmos se o nosso container esta executando corretamente iremos utilizar o comando docker ps. Ele verifica os containers que estão sendo executados.
Abra no seu navegador o endereço http://localhost/. Caso tudo esteja OK irá aparecer a mensagem Hello world.
Vamos agora criar a tag da nossa imagem para que possamos subir no Heroku, execute o comando abaixo no seu terminal:
docker tag nodejs-docker registry.heroku.com/nodejs-docker/web
Nosso próximo passo será logar no Heroku. Para isso, execute o comando abaixo no seu terminal, assim que ele terminar execute o segundo comando para enviar a sua imagem.
heroku container:login docker push registry.heroku.com/nodejs-docker/web
Caso tudo esteja OK você irá receber o resultado abaixo no seu terminal:
Por fim, podemos abrir no nosso navegador a URL abaixo e ver o nosso container sendo executado no Heroku.