引言
Docker平台允许开发者将应用程序打包并运行为容器。容器是一个在共享操作系统上运行的隔离进程,提供了一种比虚拟机更轻量级的替代方案。尽管容器并不是新事物,但它们提供的好处——包括进程隔离和环境标准化——随着越来越多的开发者使用分布式应用程序架构,这些好处的重要性日益增加。
在本教程中,你将为一个使用Express框架和Bootstrap的静态网站创建应用程序镜像。然后,你将使用该镜像构建一个容器,并将其推送到Docker Hub以备将来使用。最后,你将从你的Docker Hub仓库中拉取存储的镜像,并构建另一个容器,演示你如何重现和扩展你的应用程序。
前提条件
要遵循本教程,你将需要:
需要一个已设置的Ubuntu服务器,具有非root用户,具有sudo
权限,并启用了防火墙以阻止非必要的端口。
设置完成后,以的非root用户身份登录并进行第一步。
建议使用至少有以下配置的服务器:
4 核心的 CPU,4GB 的内存
选择服务器提供商
为了本教程的演示,我将以一个具体的云服务提供商为例,展示如何进行操作。选择哪个提供商根据个人偏好和需求来决定。
雨云注册链接:https://www.rainyun.com/NTE2NDM3_?s=blog
以下步骤仅供参考,请根据实际需求选择配置。
获得5折优惠券:NTE2NDM3
购买云服务器
本示例中,我们选择了香港作为服务器区域。
点击 云产品 → 云服务器 → 立即购买
选择操作系统
在创建服务器实例时,选择 Ubuntu 作为操作系统。
连接到服务器
使用 X-shell 或偏好的 SSH 客户端,通过远程用户名和密码连接到服务器。成功连接后,将看到特定的欢迎信息,表明已成功登录。
- 在你的服务器上安装了Docker
- 安装了Node.js和npm
- 一个Docker Hub账户
使用Docker构建NodeJS应用程序的步骤
- 安装应用程序依赖项
- 创建NodeJS应用程序文件
- 编写Dockerfile
- 创建DockerHub镜像仓库
第1步 — 安装你的应用程序依赖项
要创建你的镜像,你首先需要制作你的应用程序文件,然后你可以将它们复制到你的容器中。这些文件将包括你的应用程序的静态内容、代码和依赖项。
首先,在你的非root用户的主目录中为你的项目创建一个目录。我们将我们的项目目录命名为node_project
,但你可以用其他名称替换:
mkdir node_project
导航到这个目录:
cd node_project
这将是项目的根目录。
接下来,创建一个package.json
文件,包含你的项目依赖项和其他识别信息。用nano
或你喜欢的编辑器打开文件:
nano package.json
添加以下关于项目的信息,包括它的名称、作者、许可证、入口点和依赖项。确保将作者信息替换为你自己的姓名和联系详情:
~/node_project/package.json
{
"name": "nodejs-image-demo",
"version": "1.0.0",
"description": "nodejs image demo",
"author": "Sammy the Shark <sammy@example.com>",
"license": "MIT",
"main": "app.js",
"keywords": [
"nodejs",
"bootstrap",
"express"
],
"dependencies": {
"express": "^4.16.4"
}
}
这个文件包括了项目名称、作者和共享许可证。npm建议使你的项目名称简短且描述性,并避免在npm注册表中重复。我们在许可证字段中列出了MIT许可证,允许自由使用和分发应用程序代码。
此外,文件指定了:
"main"
: 应用程序的入口点,app.js
。你将在下一步创建这个文件。"dependencies"
: 项目依赖项——在这种情况下,是Express 4.16.4或更高版本。
尽管这个文件没有列出仓库,你可以通过遵循这些指南将仓库添加到你的package.json
文件中。如果你正在对应用程序进行版本控制,这是一个好的补充。
完成更改后保存并关闭文件。
要安装项目依赖项,请运行以下命令:
npm install
这将在你的项目目录中安装你在package.json
文件中列出的包。
现在我们可以继续构建应用程序文件。
第2步 — 创建应用程序文件
我们将创建一个网站,为用户提供有关鲨鱼的信息。我们的应用程序将有一个主入口点app.js
,以及一个views
目录,其中将包括项目的静态资产。登陆页面index.html
将为用户提供一些初步信息和一个链接到更详细的鲨鱼信息页面sharks.html
。在views
目录中,我们将创建登陆页面和sharks.html
。
首先,在主项目目录中打开app.js
定义项目的路由:
nano app.js
文件的第一部分将创建Express应用程序和Router对象,并定义基目录和端口作为常量:
~/node_project/app.js
const express = require('express');
const app = express();
const router = express.Router();
const path = __dirname + '/views/';
const port = 8080;
require
函数加载了express
模块,然后我们用它来创建app
和router
对象。router
对象将执行应用程序的路由功能,我们定义HTTP方法路由时,将它们添加到这个对象中,以定义我们的应用程序如何处理请求。
这部分文件还设置了两个常量,path
和port
:
path
: 定义了基目录,它将是当前项目目录中的views
子目录。port
: 告诉应用程序监听并绑定到端口8080
。
接下来,使用router
对象设置应用程序的路由:
~/node_project/app.js
...
router.use(function (req,res,next) {
console.log('/' + req.method);
next();
});
router.get('/', function(req,res){
res.sendFile(path + 'index.html');
});
router.get('