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.













