Рубрики
Uncategorized

Desenvolvendo aplicação node.js и express.js com docker

Série de Artigos Que Falaremos A Respeito de Docker E Conteiners. Помечено с Docker, DevOps, новичками, учебным пособием.

Artigo Originalmente Escrito Pelo Chris Noring — Акми

Нет último artgo vimos e aprendemos canceitos básicos sobre docker, Imagens e contingineres. Agora é a hora de desenvolvermos uma aplicação e aprender em código como usar o docker numa aplicação.

Вамос Несса?!

Vamos Por A MãA NA MASSA!

Agora que já entendemos o Que é docker e porque devemos usar, agora é aquelemon que precisamos praticar o uso do docker em alguma aplicação!

Bom, Vamos preciSar de um arquivo Que é bastante usado no docker: Dockerfile Анкет Pois é Нет Dockerfile Que OppecificeRemos tudo O Que perifisaremos no que diz respeito ao sistema operacional, variáveis de ambiete e como Executor O Nosso Aplicativo.

Vamos nos aprofundar Agora Nessa Parte. Vamos desenvolver uma aplicação e Dockerizar эле Através Deleme Iremos Executor A Nossa Aplicação Dentro de um Contêiner isolado do Mundo Externo, Porém Disponível Para Demais Portas.

Vamos seguir os seguintes passos:

  • Criar um aplicativo em node.js

Vamos desenvolver um aplicativo node.js com Express. Ele funcionará como um rest api.

  • Criar O arquivo ‘dockerfile’

Esse arquivo será responsevel por informar ao docker como construir nossa aplicação.

  • CRIAR UMA Imagem

Para Que a Nossa Aplicação Funcione, Devemos Criar Uma Imagem Chamada Docker.

  • Криар Ум Протонер

E por último, veremos a nossa aplicação em funcionamento e criaremos um contêiner a partir de umaemememememer.

Vamos Seguir Esses Passos Agora?!

Criando A Aplicação Node.js & Express Com Docker

Abre Agora O Seu Visual Studio Code, Crie Uma Pasta Chamada: Пример-3 E Dentro Dessa Pasta Digite O Seguinte Comando:

> npm init -y

Esse comando cria para nós um arquivo Package.json Падран.

Нет финала, о arquivo Package.json Ficará Da Seguinte Forma:

{
  "name": "exemplo-2",
  "version": "1.0.0",
  "description": "Código do exemplo do artigo: Introdução a Docker - Parte I",
  "main": "app.js",
  "scripts": {
    "dev": "nodemon",
    "lint": "eslint --ext .js,.html -f ./node_modules/eslint-friendly-formatter . --fix",
    "prepush": "npm run lint",
    "start": "node app.js"
  },
  "keywords": [
    "nodejs",
    "javascript",
    "docker",
    "azure",
    "express"
  ],
  "author": "Glaucia Lemos",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/glaucia86/docker-zero-to-hero-series/issues"
  },
  "homepage": "https://github.com/glaucia86/docker-zero-to-hero-series/blob/master/README.md",
  "devDependencies": {
    "eslint": "^5.16.0",
    "eslint-config-airbnb-base": "^13.1.0",
    "eslint-plugin-import": "^2.17.3",
    "husky": "^2.3.0",
    "nodemon": "^1.19.1"
  },
  "dependencies": {
    "eslint-friendly-formatter": "^4.0.1",
    "eslint-plugin-html": "^5.0.5",
    "express": "^4.17.1"
  }
}

Caso Queiram ter o código fonte desenvolvido, criei um Repositório no github. Nesse Caso, Bastam Fazer Git Clone OU Скачать do Projeto Акми

Bom, Dando Continuidade Vamos Criar Datro Da Pasta Пример-3 o arquivo app.js E Depois o arquivo Dockerfile

Нет финала, эстратура, делающая фарфикара да Сегинте Мейра:

Agora, Dentro da pasta Пример-3 Выполнить o comando abaixo:

> npm install

Esse comando instalará todas как зависимость от необходимости Ao nosso projeto e criará uma pasta Chamada node_modules

Ótimo! Agora Vamos keyçar Desenvolver!

Desenvolvendo o arquivo ‘app.js’

Depois de termos criado a estrutura do projeto e instalado как зависимость от необходимости Na nossa aplicação, vamos abrir o arquivo app.js E Adicione O Seguinte Código:

/**
 * Arquivo: app.js
 * Descrição: arquivo principal e responsável pela execução da aplicação.
 * Data: 05/07/2019
 * Author: Glaucia Lemos
 */

const express = require('express');

const app = express();

const port = process.env.PORT || 3000;

app.get('/', (req, res) => {
  res.status(200).send({
    success: 'true',
    message: 'Seja Bem-Vindo(a) ao mundo Docker!',
    version: '1.0.0',
  });
});

app.listen(port);
console.log('Aplicação executando na porta ', port);

Agora véao até o rame de comando e исполнить o comando: Nodemon E Depois Abram o Postman e Coloquem A URL: http://localhost: 3000/ E Vejam se api está funcionando:

SE Aparecer A Mensagem Como na Imagem Acima é porque está tudo funcionando perfeitamente! Vamos Continuar Com O Nosso Tupormior!

Desenvolvendo o arquivo ‘dockerfile’

O próximo passo agora é criar o arquivo Dockerfile Анкет Esse arquivo, Como Já Dito Antes, Emo Se Fosse UM Manifesto, Onde возможно PARA Compillar E Exemator A Nossa Aplicação. MAS, O QUE EREADARIO PARA EXERATAR A APLICACãO POR MEIO DO Dockerfile ? Vamos precisar:

  • Copiar Todos os arquivos da aplicação através do contêiner docker.

  • инсталар как зависит

  • Абрир Ума Порта Никакой continginer que será acessado, por assim dizer, ни Ладо де Фора.

  • инструмент o continginer como iniciar nossa aplicação

Numa aplicação mais complexa, precisamos informar mais coisas, tais como: configuração de variaveis de ambiente ou deciatção de credenciais para uma de dados ouremy uma detrinada de dados entre wootros pontos. Porém, Como se trata de uma aplicação simples, vamos criar o Dockerfile de Uma maneira bem simples:

//==> Dockerfile

FROM node:latest

WORKDIR /app

COPY . .

RUN npm install

EXPOSE 3000

ENTRYPOINT ["node", "app.js"]

Vamos centender o Que cada comando faz:

  • От Aqui estamos selecionando uma imagem do sistema operacional do docker hub. O Docker Hub é UM Repositório Global Que Contém Imagens Que Podemos Extramente. Нет Носсо Касо, эстамос Эсколендо Ума Имагум Басиада Нет Ubuntu Que возможно o node.js instalado, chamado de node. Também Offificamos Que Queremos Uma Versão Mais Nevale Do Node.js, USANDO A Seguinte Tag: самый последний

  • Workdir Aqui значит simplesmente que definimos um diretório de trabalho. Esta é Uma Maneira de Configurar o Que vai Acontecer Mais Tarde, No Próximo comando abaixo.

  • Копия Aqui estamos copiando os arquivos do diretório em Que estamos, Offifificando Um Diretório Através Desse Comando.

  • Запустить Aqui ExemereAremos Um Comando нет термина. Nosso Caso, estaremos instalando todas в качестве библиотек que precisamos para construir a nossa aplicação em node.js com express.

  • Разоблачить Aqui againa que estaremos abrindo uma detrinada porta. E é Através Dessa porta Que nos comunicaremos com o nosso contêiner.

  • Точки входа Esse é o lugar onde devemos declarar como iniciaremos nossa aplicação. OS Comandos PreciSam Ser Oppecificados Como UM Array, Por Exemplo: [«Узел», «app.js»]. É Como se execussemos o comando no terminal: ‘node app.js’

Criando Uma Imagem

Para Criarmos Uma Imagem, Precisaremos seguir 2 Passos, Сан -Элас:

  • Criando Uma Imagem: com ajuda do arquivo ‘dockerfile’ e o comando Docker Build Criaremos uma Imagem

  • Iniciando o contêiner: Agora Que Temos Uma Imagem, Precisaremos criar um contêiner.

Вамос Реализар Эсс Эсс Пассос Агора! Abre A Pasta Do Projeto Пример-3 E выполнять O Seguinte Comando: ( não se esqueCam de Exemant O Docker Desktop !!! )

> docker build -t exemplo-2-node-docker/node:latest .

Notem que tem um ponto (.) Нет финала. Ele precisa ser incluso para criar nossa imagem! Pois ele instrui o docker e informa onde o dockerfile está localizado, noso caso no diretório em que vocês estão. Se você não tiver a Imagem do sistema operacional, Pedimos no comando От e nos levará para que seja baixado pelo docker hub e enfim, criará a Imagemememada no dockerfile. O Приглашение De Comando de Vocês deverá parecer como Нет Gif abaixo (Devenendo da conexáo da internet esse comando pode levar alguns minutos para serues concluído):

O que vemos no Gif acima é como a Imagem, сделайте это Узел: Последний Está Sendo Trazido E Baixado Pelo Docker Hub. E em Seguida, Cada um dos nossos comandos está sendo receadado como Workdir , Запустить E Assim Por Diante. O que vemos aqui é o docker recementdo de maneira muito inteligente e armazenando em cache todas as camadas de arquivos diferentes após cada comando, para que ele seja mais rápido. Нет финала, Вемос, менсагем: успешно построенный Indicando que a nossa Imagem foi construluída com sucesso! Vamos dar Uma olhada e ver como foi criada nossa Imagem. Abre o recmon e Digite o seguinte comando:

> docker images

SE Aparecer Como A Figura Acima é porque foi criado com sucesso aember!

Criando UM Contêiner

O PRóximo Passo é Pegar A Nossa Imagem Criada E Construir Um Contêiner Dela. UM Continginer é essa peca isolada que resea a nossa aplicação dentro dele. Nós criamos um contêiner rececureand o comando: Docker Run . Abre o rame novamente e исполнить o seguinte comando abaixo:

> docker run -p 8000:3000 exemplo-2-node-docker/node

Лембра Que no arquivo Dockerfile Defineimos uma porta? E que já explicamos no artigo передняя Que precisamos de uma porta interna mapeando para uma porta externa, na mquina host. Lembrem-se que esta é uma aplicação Que Queremos Executor No Browser. POR ISSO DEVEMOS MAPEAR DA SEGUINTE MANEIRA:

-p [porta externa]:[porta interna]

Asmesem no gif aecureto do comando acima:

Notem que no browser, devemos colocar a externa que no nosso caso é a porta: 8000 Анкет

Porém, Para Parar de Exemare Esse Container Precisamos Exector Alguns Comandos:

  1. Primeiro Devemos Listar OS ContEreses Que Estão Executando
> docker container ls 
  1. Depois Copiar O Id Делайте контейнер E Exemar O Seguinte Comando:
> docker kill 

Vejam no Gif abaixo:

Melhorando A Configuração com variáveis de ambiente

Покажи де Бола! Já Aprendemos A Criar Nossa Primeira Imagem Do Docker Com Node.js & Express, Aprendemos Como Devemos Executor UM Contêiner E Enfim Executamos aSossa aplicação usando o arquivo Dockerfile Анкет Porém, Podemos melhorar a variável Порт Нет arquivo Dockerfile Анкет POIS DA MANEIRA QUE ESTá, Estará Propenso A Errros.

Para Resolver Esse Проблема, Podemos включает в себя Uma variavel de ambiente. Com Isso, Vamos Fazer Duas Alteraçõe:

  • Adicionar Uma variável de ambiente ao Dockerfile
  • Ler A Partir da variável de ambiente no arquivo app.js

Adicionnado uma variável de ambiente

Para Isso, precisamos usar o comando Env Анкет Abram o arquivo Dockerfile E Alteram conforme abaixo:

FROM node:latest

WORKDIR /app

COPY . .

ENV PORT=3000

RUN npm install

EXPOSE 3000

ENTRYPOINT ["node", "app.js"]

Vamos Fazer Mais Uma Alteração! Vamos atualizar agora a variável Разоблачить , daí então nos livraremos de Valores Estáticos E Contiaremos em variáveis, da seguinte forma:

FROM node:latest

WORKDIR /app

COPY . .

ENV PORT=3000

RUN npm install

EXPOSE $PORT

ENTRYPOINT ["node", "app.js"]

Наблюдайте Que, Mudamos o comando Разоблачить Para o $ Port Анкет Um Ponto Vative A a Aqui: Qualquer variavel que usamos, Precisa ser prefixada com Ум Карактер $

> EXPOSE $PORT

Lendo o Valor da variável de ambiente no arquivo app.js

Podemos ler Valores de variáveis de ambiente em node.js da seguinte forma:

> process.env.PORT

Então, Vamos atualizar o arquivo app.js , conforme abaixo:

/**
 * Arquivo: app.js
 * Descrição: arquivo principal e responsável pela execução da aplicação.
 * Data: 05/07/2019
 * Author: Glaucia Lemos
 */

const express = require('express');

const app = express();

const port = process.env.PORT;

app.get('/', (req, res) => {
  res.status(200).send({
    success: 'true',
    message: 'Seja Bem-Vindo(a) ao mundo Docker!',
    version: '1.0.0',
  });
});

app.listen(port);
console.log(`Aplicação executando na porta..: ${port}`);

Наблюдайте Que, Quando fizemos a Alteração no arquivo app.js Оу нет arquivo Dockerfile , Precisamos Reconstruir Nossa Imagem. Esso varietya Que Precisamos Exector O Comando de Compilação do Docker Novamente E, Antes Disso, Precisamos derrubar nosso contêiner com o comandos:

> docker stop
> docker rm

Vamos aprender um pouco mais sobre esses dois comandos nas próximas seções! 😉

Геренсиандо О продолжительность

Ótimo! Você acabou de iniciar o seu continginer e percebe que não terminar/fechar a execução без терминала. Эаааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааааа 😳😳

Nesse Caso, Você Pode Fazer o Seguinte, Abre Uma upta Janela do Terminal E исполнить O Seguinte Comando abaixo:

> docker ps

ESSE COMANDO LISTARá TODOS OS COMENTERES QUE ESTãO EM Execução na Sua Máquina. Você poderá ver o nome dos contingineres e os seus uessivos i D, Conforme A Imagem abaixo:

Como Você Pode Perceber Acima, Temos A Coluna Container_id E Coluna Имена Анкет Ambos Esses Valores Funcionarão Para Interromper Nosso Continginer, Porque é Isso Que Precisamos Fazer, Assim:

> docker stop 3da

Nós Optamos por usar a coluna Container_id E SO PRECISAMOS COLOCAR OS 3 PRIMEIROS DIGITOS, SEM NEDIDADE DE OLCUIR TODO O Id Анкет Depois de Exemare Esse Comando, Percebam Que Após Digitar Docker PS nionao aparecerá mais nenhum contêiner e parará de Exemare nossa Imagem!

MODO DAEMON

Podemos fazer Como fizemos acima e abrir um novo terminal seperado. Porém, Exemar no MODO DAEMON , que nesse caso é a melhor opção. Isso targina Que regemores o continginer em segundo plano e todas в роли Saídas dele nionao estarão visíveis. Para Que isso aconteça, basta adicionar a flag -d. Vamos Tentar Fazer Isso?!

> docker run -d -p 8000:3000 exemplo-2-node-docker/node

Наблюдайте Que agora temos o Я делаю продолжительность. Agora fica mais fácil parar de Exemare! BASTA DIGITARMOS OS 3 PRIMEIROS Dígitos Do ID ACIMA. Пример:

> docker stop 014 

Docker Kill vs Docker Stop

Até agora temos usado o comando Docker Stop Como forma de parar o continginer. Porém, Essaine uma utra maneira de pararmos o contêiner, ou seja, executando o comando Docker Kill Анкет Мас, квалификация

  • Docker Stop : Esse Comando Envia o Sinal Sigterm seguido por Sigkill Após Um Período de Carência. Resumindo, Essa é uma maneira de reduzir o contêiner de uma maneira mais elegante, o que que que ele libera recursos e salva o estado.

  • Docker Kill : Esse Comando Envia Sigkill Imediatamente. ИССО ЗНАЧЕНИЯ Em desenvolvimento, não importa Qual dos dois comandos está sendo usado, mas, em um cenário de produção é mais prudente conseiar Нет comando Docker Stop

Limpando OS ContEineres

EM Algum Momento, Durante O Percurso do desenvolvimento de alguma aplicação, você acabará criando inúmeros contingineres. Então, para garantir de Remover/Limpar Esses contingineres, Bastam Digitar O Comando Abaixo:

> docker rm 

Пример:

> docker rm -f ef8
> docker ps

Палавры Финас

Агора Сим … Aprendemos nesse artgo como criar uma aplicação node.js & express.js usando docker de maneira prática e passo a passo. Aprendemos alguns comandos Pois ainda teremos muitas coisas Важные пара -апендер, Como por exemplo: como trabalhar com bancos de dados, тома, como vincular contêineres e por que e como gerenciar vários contingineres, também conhecidos como orquestraçáo.

Mas Esta é Uma Série de Artigos! E Temos Que Parar em algum lugar ouste artgo será muito longo. Fiquem ligados e atentos para a próxima parte, onde falaremos sobre Тома E Bancos de Dados Анкет

Палавры Финас

Hoje aprendemos na prática como é fácil criar uma aplicação node.js & express.js usando o docker.

Caso Queiram Aprender e Aprofundar Mais os Estudos em Docker, Recomendo os cursos de docker abaixo:

Curso grátis — Criando Um applicativo Web em Contêiner com o Docker

Vários cursos grátis de docker

E, para ficarem por dentro das últimas atualizauses nion deixem de seguir no твиттер!

E Desde Já, Agradezo Novamente Ao Крис Норинг POR CEDER ESSA Excelente Série de Artigos Sobre Docker. E Sigam Ao Chris Noring Também no Twitter:

Até Aróxima Pessoal!

Оригинал: «https://dev.to/azure/desenvolvendo-aplicacao-node-js-express-js-com-docker-2e7a»