Publicando container Node no Heroku

O objetivo desse artigo será a criação de uma imagem de uma aplicação Web desenvolvida em Node.js com 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 o package.json e server.js. Com o diretório e os arquivos criados abra um editor de texto de sua preferencia, em seguida vamos colar o código a baixo dentro no 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 a baixo 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 estiver OK irá aparecer a mensagem a baixo no terminal do seu Visual Studio Code:

Bom, até esse ponto não vimos nenhuma novidade, somente criamos uma aplicação simples em Node. Vamos agora criar o nosso arquivo DockerFile.
FROM node:boronWORKDIR /appCOPY . .CMD NODE_URLS=http://*:$PORT npm start
Vamos navegar pelas linhas do nosso arquivo:
FROM node:boronNessa primeira linha nos estamos definindo qual imagem iremos utilizar.
WORKDIR /appNesse passo nos estamos definindo o diretório dentro da nossa aplicação que ira executar o nosso código.
COPY . .Nesse ponto iremos copiar os arquivos do nosso diretório local para dentro da nossa imagem.
CMD NODE_URLS=http://*:$PORT npm startPor fim estamos criando uma variável local para receber a porta dinamicamente e passando o comando que ira precisar ser executado para rodar o nosso container.
Com tudo OK vamos agora criar a nossa imagem. Para isso, execute o comando a baixo no seu terminal dentro do diretório do 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 sera executar a nossa imagem. Para isso execute o comando a baixo no seu terminal:
docker run -p 80:8080 nodejs-dockerAgora para verificarmos se o nosso container esta executando corretamente iremos utilizar o comando docker ps, ele verificar os containers que estão sendo executados.

Abra no seu navegador o endereço http://localhost/ , caso tudo OK ira aparecer a mensagem Hello world.
Vamos agora criar a tag da nossa imagem para que possamos subir ela no Heroku, execute o comando a baixo no seu terminal:
docker tag nodejs-docker registry.heroku.com/nodejs-docker/webNosso próximo passo será logar no Heroku. Para isso, execute o comando a baixo 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/webCaso tudo esteja OK você irá receber o resultado a baixo no seu terminal:

Por fim, podemos abrir no nosso navegador a URL a baixo e ver o nosso container sendo executado no Heroku.
https://nodejs-docker.herokuapp.com/
