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 ImagemIniciando 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:
- Primeiro Devemos Listar OS ContEreses Que Estão Executando
> docker container ls
- 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»