如何构建Docker Node.js应用程序

106 阅读5分钟

如何构建Docker Node.js应用程序

How to Build Node.js Application With Docker

目录

从Netflix到LinkedIn,有一种软件开发技术被全球业务中的一些大公司所使用--DockerNode.js。自从2009年成立以来,这项技术一直在改变着软件开发的格局。那么,在如此短的时间内,其流行背后的原因究竟是什么?用Node.js实时构建网络应用真的那么简单吗?本文将通过用Docker创建一个简单的Node.js应用程序来帮助你理解Node.js到底是什么

那么,让我们开始吧。

什么是Node.js?

Docker Node.js或简单地说,Node.js是一个开源的软件平台,用于构建可扩展的服务器端和网络应用。这些Node.js应用程序是用JavaScript编写的,可以在Linux、Windows或Mac OS上的Node.js运行时中运行,而不需要改变。它在设计之初就考虑到了实时和基于推送的架构。现在,它主要用于非阻塞的、事件驱动的服务器,如后端API服务和传统网站。

Docker Node.js使用谷歌V8 JavaScript来执行代码,并有自己的内置库用于文件、套接字和HTTP通信。这使得Node.js可以在不需要额外软件支持的情况下自行充当网络服务器。

先决条件

要构建一个应用程序,你需要具备以下条件:

  • Node.js 12.18版或更高版本
  • 本地运行的Docker
  • 一个文本编辑器或IDE来编辑你的文件

启用BuildKit

BuildKit使你能够构建Docker镜像。在Docker桌面上,它对所有用户都是默认启用的。如果你没有安装Docker Desktop,你将不得不手动启用BuildKit。

Build_Node.js_1

要在运行docker build命令时设置BuildKit环境变量,请运行:

如果你想默认启用docker BuildKit,你需要将/etc/docker/daemon.json功能中的守护进程配置设置为'true'。一旦设置完毕,请重新启动守护进程。如果你的系统中不存在daemon.json文件,请创建一个名为daemon.json的新文件,然后向该文件添加以下命令。

Build_Node.js_2.

添加完毕后,重新启动Docker Daemon。

使用Node.js创建一个应用程序

现在我们已经启用了BuildKit,让我们创建一个简单的Docker Node.js应用程序。在你的本地机器上,创建一个名为node-docker的目录。现在使用以下步骤创建一个简单的REST API。

Build_Node.js_3.

一旦REST API被创建,我们可以添加一些代码来处理我们的REST请求。我们将为此使用一个名为ronin.js的模拟服务器。在你的IDE中,打开工作目录,在server.js文件中,添加以下代码。

Build_Node.js_4.

嘲讽服务器将默认监听端口为8000。现在你可以向根(/)端点发出POST请求。任何发送到服务器的JSON结构将被保存。

你也可以在同一个端点发出GET请求,并接收你之前POST的JSON对象。

测试应用程序

现在让我们测试一下这个应用程序,确保它能正常工作。打开你的终端,转到你创建的工作目录。

Build_Node.js_5.

我们将向API发送一些JSON,然后做一个GET请求,看看数据是否已经被保存。打开一个新的终端,运行以下curl命令。

Build_Node.js_6.

现在,当你切换回服务器正在运行的终端时,你会在服务器日志中看到这些请求。

Build_Node.js_7.

这意味着该应用程序正在工作。你已经成功地在本地完成了服务器脚本的测试。现在按CTRL-c来停止测试。

Build_Node.js_8.

现在我们将继续在Docker中构建和运行该应用程序。

为Node.JS创建一个Dockerfile

Dockerfile是一个文本文件,包含构建Docker镜像的说明。Docker从Dockerfile中读取指令,执行它们,并创建一个Docker镜像。

在你的项目的根部创建一个名为 "Dockerfile "的文件。转到你的文本编辑器,打开这个文件。

你可以在文件中添加的第一行是一个#语法分析器指令。这一步是可选的,但它将帮助Docker builder知道在解析Dockerfile时要使用哪种语法。你可以使用docker/dockerfile:1语法,它总是指向最新版本的1语法。

Build_Node.js_9

接下来,在Dockerfile中添加以下一行。这将帮助Docker检测出要为应用程序使用哪一个基础镜像。

Build_Node.js_10.

NODE_ENV是一个环境变量,用于指定应用程序的环境。如果你把NODE_ENV设置为生产环境,它将有助于提高应用程序的性能。

Build_Node.js_11

现在让我们创建一个工作目录。这将使运行其他命令时更加容易。Docker将使用这个路径作为所有后续命令的默认位置。现在你不需要输入完整的文件路径,而是使用基于这个工作目录的相对路径。

Build_Node.js_12

我们现在将复制一些包到工作目录中。package.json和package-lock.json这两个包将帮助我们运行npm install。

Build_Node.js_13.

现在我们有了镜像内的文件,我们可以通过使用RUN命令来执行npm install命令。

Build_Node.js_14.

下一步,让我们把我们的源代码添加到镜像中。为此我们将再次使用COPY命令。这个命令将把位于当前目录下的所有文件复制到镜像中。

Build_Node.js_15.

现在,我们将运行CMD命令来告诉Docker我们要运行什么命令。

Build_Node.js_16.

最后的代码将是这样的。

Build_Node.js_17.

为Node.js创建一个Dockerfile

Dockerfile将参考指令中指定的文件,以便在构建环境中使用。我们需要创建一个.dockerignore文件以改善上下文的加载时间,并在其中添加node_modules目录。

Build_Node.js_18.

构建图像

一旦我们创建了Docker文件,我们就可以使用docker build命令来构建我们的镜像。构建命令可以接受一个--tag标志,用来设置镜像的名称。如果你没有标签,Docker将使用 "最新 "作为默认标签。

你可以用以下命令建立你的第一个Docker镜像。

Build_Node.js_19

查看本地镜像

我们可以通过CLI或Docker桌面查看本地机器上的镜像列表。

运行images命令,使用CLI查看本地镜像。

Build_Node.js_20.

标记图像

一个图像可以有多个标签。让我们为图像创建第二个标签,看看它的层次。运行下面的命令。

Build_Node.js_21

你也可以运行docker images命令来查看本地图像的列表。

Build_Node.js_22.