如何构建Docker Node.js应用程序
![]()
目录
从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。
![]()
要在运行docker build命令时设置BuildKit环境变量,请运行:
如果你想默认启用docker BuildKit,你需要将/etc/docker/daemon.json功能中的守护进程配置设置为'true'。一旦设置完毕,请重新启动守护进程。如果你的系统中不存在daemon.json文件,请创建一个名为daemon.json的新文件,然后向该文件添加以下命令。
![]()
添加完毕后,重新启动Docker Daemon。
使用Node.js创建一个应用程序
现在我们已经启用了BuildKit,让我们创建一个简单的Docker Node.js应用程序。在你的本地机器上,创建一个名为node-docker的目录。现在使用以下步骤创建一个简单的REST API。
![]()
一旦REST API被创建,我们可以添加一些代码来处理我们的REST请求。我们将为此使用一个名为ronin.js的模拟服务器。在你的IDE中,打开工作目录,在server.js文件中,添加以下代码。
![]()
嘲讽服务器将默认监听端口为8000。现在你可以向根(/)端点发出POST请求。任何发送到服务器的JSON结构将被保存。
你也可以在同一个端点发出GET请求,并接收你之前POST的JSON对象。
测试应用程序
现在让我们测试一下这个应用程序,确保它能正常工作。打开你的终端,转到你创建的工作目录。
![]()
我们将向API发送一些JSON,然后做一个GET请求,看看数据是否已经被保存。打开一个新的终端,运行以下curl命令。
![]()
现在,当你切换回服务器正在运行的终端时,你会在服务器日志中看到这些请求。
![]()
这意味着该应用程序正在工作。你已经成功地在本地完成了服务器脚本的测试。现在按CTRL-c来停止测试。
![]()
现在我们将继续在Docker中构建和运行该应用程序。
为Node.JS创建一个Dockerfile
Dockerfile是一个文本文件,包含构建Docker镜像的说明。Docker从Dockerfile中读取指令,执行它们,并创建一个Docker镜像。
在你的项目的根部创建一个名为 "Dockerfile "的文件。转到你的文本编辑器,打开这个文件。
你可以在文件中添加的第一行是一个#语法分析器指令。这一步是可选的,但它将帮助Docker builder知道在解析Dockerfile时要使用哪种语法。你可以使用docker/dockerfile:1语法,它总是指向最新版本的1语法。
![]()
接下来,在Dockerfile中添加以下一行。这将帮助Docker检测出要为应用程序使用哪一个基础镜像。
![]()
NODE_ENV是一个环境变量,用于指定应用程序的环境。如果你把NODE_ENV设置为生产环境,它将有助于提高应用程序的性能。
![]()
现在让我们创建一个工作目录。这将使运行其他命令时更加容易。Docker将使用这个路径作为所有后续命令的默认位置。现在你不需要输入完整的文件路径,而是使用基于这个工作目录的相对路径。
![]()
我们现在将复制一些包到工作目录中。package.json和package-lock.json这两个包将帮助我们运行npm install。
![]()
现在我们有了镜像内的文件,我们可以通过使用RUN命令来执行npm install命令。
![]()
下一步,让我们把我们的源代码添加到镜像中。为此我们将再次使用COPY命令。这个命令将把位于当前目录下的所有文件复制到镜像中。
![]()
现在,我们将运行CMD命令来告诉Docker我们要运行什么命令。
![]()
最后的代码将是这样的。
![]()
为Node.js创建一个Dockerfile
Dockerfile将参考指令中指定的文件,以便在构建环境中使用。我们需要创建一个.dockerignore文件以改善上下文的加载时间,并在其中添加node_modules目录。
![]()
构建图像
一旦我们创建了Docker文件,我们就可以使用docker build命令来构建我们的镜像。构建命令可以接受一个--tag标志,用来设置镜像的名称。如果你没有标签,Docker将使用 "最新 "作为默认标签。
你可以用以下命令建立你的第一个Docker镜像。
![]()
查看本地镜像
我们可以通过CLI或Docker桌面查看本地机器上的镜像列表。
运行images命令,使用CLI查看本地镜像。
![]()
标记图像
一个图像可以有多个标签。让我们为图像创建第二个标签,看看它的层次。运行下面的命令。
![]()
你也可以运行docker images命令来查看本地图像的列表。
![]()