Node.js 和 Express.js com Docker 的开发应用
Chris Noring 原创作品 - AQUI
没有任何关于 Docker、图像和内容的基本概念。 Agora 是一个开发应用程序的时间,并且可以与 Docker 应用程序一起使用。
Vamos nessa?!
Vamos por a mão na massa!
这是 Docker 和用户开发的一个广泛的讨论,这是一个关于 Docker 和算法应用的快速实践的时刻!
Bom, vamos precisar de um arquivo que é bastante usado no Docker: DockerFile。 DockerFile具有特定的功能和精确的功能,可以在操作系统、环境变量和应用程序中执行。
Vamos nos aprofundar agora nessaparte。 Vamos 解压应用程序和Dockerizar ele。执行此操作时,请执行与外部世界隔离的应用程序,并在每个端口上进行操作。
Vamos seguir os seguintes passos:
- Node.js 中的应用
Vamos 是 Node.js com Express 的开发者。 REST API 的功能。
- 创建 'Dockerfile' 文件
请参阅 Docker 来构建我们的应用程序。
- Criar uma imagem
使用 Docker 的应用程序来开发图像。
- Criar um contêiner
最后,我们将详细介绍 Docker 的功能和容器部分图像的应用程序。
Vamos seguir esses passos agora?!
Criando 与 Node.js 和 Express com Docker 的应用
在 Visual Studio Code 中进行操作,调用意大利面:exemplo-2和数字意大利面或接下来的命令:
> npm init -y
请使用以下命令来打开package.json padrão。
没有最终的,o 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,通过 git 克隆或下载 projeto AQUI
Bom,dando 继续 vamos criar dentro da Pasta exemplo-2或 arquivo app.js和 depois 或 arquivo Dockerfile
没有最后,一个 estrutura do projeto ficará da seguinte maneira:
Agora,dentro da Pasta exemplo-2执行命令:
> npm install
必须安装所有必需的项目和节点模块
奥蒂莫! Agora vamos começar a desenvolver!
开发或获取“App.js”
项目和安装的术语说明是应用程序所必需的,可以使用app.js或附加程序或继续进行操作:
/**
* 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 的命令提示符和执行命令:nodemon和 postman 和 url:http://localhost:3000/以及 API 功能:
您可以通过以下方式获得完美的图像! Vamos 继续 com o nosso 教程!
处理“Dockerfile”
您可以通过以下方式查看Dockerfile。在此之前,我们已发表了宣言,但仍可作为编译和执行应用程序所需的说明。执行Dockerfile的应用程序是否有必要? Vamos 精密:
-
复制容器docker 上应用程序的所有待办事项。
-
安装依赖项
-
abrir uma porta no contêiner que será acessado, por assim dizer, no lado de fora。
-
介绍应用程序的容器
主要应用程序,主要信息如下:配置环境变量或定义数据源的凭据或执行数据源中的确定源。使用简单的应用程序,可以轻松地使用Dockerfile:
//==> Dockerfile
FROM node:latest
WORKDIR /app
COPY . .
RUN npm install
EXPOSE 3000
ENTRYPOINT ["node", "app.js"]
Vamos entender o que cada comando faz:
-
来自Docker Hub 操作系统的最佳选择。 Docker Hub 是一个全球存储库,可提供本地化图像。没有任何情况,我们无法在 Ubuntu 上安装 Node.js,而是安装 Node.js。最近 Node.js 的一些具体情况,使用了一个seguinte 标签:
latest -
WORKDIR是对 trabalho 指令的简单定义。您可以在稍后的时间进行配置,但不可以再进行操作。
-
复制您所获得的指令,具体为指令中的指令。
-
RUN aqui executaremos um comando no termina。没有任何问题,请安装所有作为构建 Node.js com Express 中的应用程序的参考书目。
-
暴露aqui 意义 que estaremos abrindo uma determinada porta。该端口是 comunicaremos 或 nosso contêiner 的端口。
-
入口点是在开发过程中声明并启动应用程序的。需要注意的是数组的具体情况,例如:[“node”,“app.js”]。在没有终端的情况下执行:'node app.js'
Criando uma Imagem
Para criarmos uma imagem,precisaremos seguir 2 passos,são elas:
-
Criando uma imagem: com ajuda do arquivo 'Dockerfile' eo comando
docker buildcriaremos uma imagem -
容器启动:集会图像,预览容器。
Vamos 实现了 ess passos agora! Abre a pasta do projeto exemplo-2e run o seguinte comando: ( não se esqueçam de executar o Docker Desktop!!! )
> docker build -t exemplo-2-node-docker/node:latest .
注意 que tem um ponto(.)没有结尾。 Ele precisa ser incluso para criar a nossa imagem!有关 Docker 的操作和 Dockerfile 的信息已本地化,因此无需直接操作。您可以使用 Docker Hub 和 Dockerfile 来操作系统映像,也可以FROM使用 Docker Hub 或 Dockerfile 来指定映像。 O 提示commando de vocês deverá parecer como no gif abaixo(取决于互联网上的comando pode levar alguns minutos para ser concluído):
O que vemos no gif acima é como a imagem do so node:latestestá sendo trazido e baixado pelo Docker Hub.接下来,我们将执行此操作,WORKDIR并RUN执行此操作。 Docker 可以以智能方式执行操作并缓存所有数据,以快速完成不同的任务。没有最后,vemos a mensagem:successfully builtindicando que a nossa imagem foi construída com sucesso! Vamos dar uma olhada e ver como foi criada a nossa imagem。 Abre o 提示 e digitale o seguinte 命令:
> docker images
如果您想获得一个形象,请与我们一起完成图像!
Criando um Contêiner
O próximo passo é pegar a nossa imagem criada e contêiner dela.我们只需要执行一个应用程序就可以了。 Nós criamos um contêiner executando o comando: docker run.继续执行命令或执行命令:
> docker run -p 8000:3000 exemplo-2-node-docker/node
Lembra que no arquivo Dockerfiledefinimos uma porta? E que já explicamos no artigo anterior que precisamos de uma porta interna mapeando para uma porta externa, na maquina host。您可以在没有浏览器的情况下执行该应用程序。 Por isso devemos mapear da seguinte maneira:
-p [porta externa]:[porta interna]
观察执行命令的 gif:
请注意,如果没有浏览器,请不要使用外部端口:8000。
Porém,执行容器的执行命令:
- 最初的开发列表是执行中的内容
> docker container ls
- 删除容器或执行容器或执行命令:
> docker kill <Id do Container>
Vejam no gif abaixo:
轻松配置环境变量
展示德博拉!我在 Docker 上预装了 Node.js 和 Express 的镜像,然后开始执行容器并执行应用程序或应用程序DockerFile。 Porém, podemos melhorar a variável PORT no arquivo DockerFile。如果是这样,可能会犯错误。
解决这个问题的方法包括环境变量。 Com isso, vamos fazer duas alteraçõe:
- Dockerfile环境的附加说明
- 与app.js中的环境变量有关
环境变化的建议
Para isso, precisamos usar o comando ENV。 Abram o arquivo DockerFilee alteram conme 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!在不同的EXPOSE 上,我们将讨论不同的价值和内容,如下所示:
FROM node:latest
WORKDIR /app
COPY . .
ENV PORT=3000
RUN npm install
EXPOSE $PORT
ENTRYPOINT ["node", "app.js"]
观察,mudamos o comando EXPOSE para o $PORT。 Um ponto importante a ser falado aqui: qualquer variável que usamos, precisa ser prefixada com um caractere$
> EXPOSE $PORT
App.js 中环境变量的价值
Node.js 中环境变量的价值如下:
> 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}`);
app.js观察一下,无论是否有任何改变Dockerfile,都可以重新构建我们的形象。重要的是要执行 docker novamente 的编译命令,首先要执行以下操作:
> docker stop
> docker rm
Vamos aprender um pouco mais sobre esses dois nas próximas seções! 😉
Gerenciando o contêiner
奥蒂莫!您可以启动一个容器并在终端上看到/在没有终端的情况下执行。 É aí que bate aquele panico! 😳😳
然后,继续执行,然后在终端中执行以下操作:
> docker ps
请列出要执行的所有待办事项。 Você poderá ver o nome dos contêineres e os seus个人身份,符合图像 abaixo:
例如,可以感知到列CONTAINER_ID和列NAMES。 Abos esses valores funcionarão para interromper nosso contêiner, porque é isso que precisamos fazer, assim:
> docker stop 3da
使用CONTAINER_ID栏的选项是3 个数字的首选,似乎需要包含待办事项或ID。 Depois de executar esse comando,percebam que após digitalar docker psnão aparecerá mais nenhum contêiner and parará de executar a nossa imagem!
Modo Daemon
Podemos fazer como fizemos acima 和 abrir um novo 终端分开。 Porém 是Modo Daemon 的执行者,是一个很好的操作。这对于执行或控制第二个计划和所有内容来说非常重要。 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
观察集市上的情况或 Id do Contêiner。 Agora fica mais fácil parar de executar! Basta digitalarmos os 3 primeiros dígitos do ID acima.示例:
> docker stop 014
Docker kill 与 Docker stop
在集会上,我们将使用您的命令docker stop来进行战斗或控制。 Porém 存在于参数或容器、或命令、执行或命令之外docker kill。玛斯,有什么不同吗?
-
docker stop: esse comando envia 或SIGTERM seguido 或SIGKILL após um período de carência。总结一下,我的马内拉是一个优雅的马内拉,它对自由和国家的意义重大。
-
docker Kill : esse comando envia SIGKILL imediatamente。这对于递归的释放或在平面上的功能上的保护是很重要的。 Em desenvolvimento, no importa qual dos dois dois comando está sendo usado, mas, em um cenário de produção é mais prudente confiar no comando
docker stop
Limpando os Contêineres
当算法发生的时候,在算法应用的发展过程中,你会发现一切都在继续。请确保去除剂/清洁剂的清洁剂、清洁剂或清洁剂:
> docker rm <id-do-contêiner>
例如:
> docker rm -f ef8
> docker ps
Palavras Finais
Agora sim...可以使用 Node.js 和 Express.js 来使用 Docker 来进行实践。了解 Docker 的重要组成部分以及相关信息。重要的一点是,例如:与银行、卷、文库相关的内容以及各种不同内容的内容,以及与这些内容相关的内容。
Mas esta é uma série de artigos! E temos que parar em algum lugar ou este artigo será muito longo。 Fiquem ligados 和 atentos para a próxima parte, onde falaremos sobre Volumes和Bancos de Dados。
Palavras Finais
您可以轻松地使用 Node.js 和 Express.js 使用 Docker 进行应用。
如果您对 Docker 的研究有兴趣,建议您使用 Docker abaixo:
Curso Grátis - Criando um 应用程序 Web 和 Docker 容器
E,para ficarem por dentro das ultimas atualizações não deixem de me seguir no Twitter!
Chris Noring 在Docker 系列中表现出色。 Chris Noring 没有推特:
Até a próxima pessoal!
文章来源:https://dev.to/azure/desenvolvendo-aplicacao-node-js-express-js-com-docker-2e7a









