使用 Docker 构建 Node.js 微服务应用

Docker 简介

Docker 是一个开源项目,它提供了一个轻量级的容器化环境来运行应用程序。Docker 的优点在于不需要对主机进行任何改动,即可在容器中运行应用程序。由于容器化技术的出现,开发者们不再需要担心环境不一致、依赖冲突等问题。

什么是微服务

微服务是一种基于服务拆分的架构风格。它将系统拆分成多个小型服务,每个服务都可以独立运行、部署、扩展和维护。每个服务都有自己的数据库,服务之间通过 RESTful API 进行通信。由于每个微服务的规模较小,因此可以通过 Docker 实现容器化,使得微服务更容易部署、管理和维护。微服务架构也使得系统更加灵活、可扩展、可维护,并且更加容易实现自动化部署和持续集成。

在 Docker 中构建 Node.js 微服务应用

Node.js 可以作为一种非常适合微服务的后端开发语言,本篇文章将介绍如何在 Docker 中构建一个 Node.js 微服务应用。我们将构建一个简单的 To-do List 应用,该应用包括两个微服务:一个是负责前端展示的 Web 服务,一个是负责后端数据存储和业务逻辑的 API 服务。

准备工作

在开始构建 Node.js 微服务应用之前,我们需要进行以下准备工作:

  • 下载并安装 Docker
  • 创建一个 Node.js 项目,并安装 Express 和 Mongoose

构建 Docker 镜像

为了在 Docker 中运行 Node.js 应用,我们需要首先构建 Docker 镜像。Docker 镜像是 Docker 容器的基础,它包含了应用程序、运行环境和所有依赖项。在进行 Docker 镜像构建之前,我们需要编写 Dockerfile 文件。

以下是一个简单的 Dockerfile 文件示例:

在 Dockerfile 文件中,我们使用了官方的 Node.js 镜像作为基础镜像,并指定了工作目录、拷贝应用程序代码到容器中、安装依赖项和构建应用程序、暴露端口和启动应用程序等步骤。

接下来,在项目根目录下执行以下命令构建 Docker 镜像:

其中,-t 参数用于命名镜像,后面的 . 表示在当前目录下查找 Dockerfile 文件。

运行 Docker 容器

在成功构建 Docker 镜像之后,我们可以使用以下命令在 Docker 中运行容器:

其中,-p 参数用于指定端口映射,--name 参数用于指定容器名称,my-node-app 是构建好的镜像名称。

构建微服务应用

在 Docker 中运行 Node.js 应用程序时,我们通常需要将应用程序拆分成多个微服务独立运行。为了构建 Node.js 微服务应用,我们将应用程序拆分成两个微服务:负责前端展示的 Web 服务和负责后端数据存储和业务逻辑的 API 服务。

Web 服务

Web 服务是用户访问的入口,它负责呈现 To-do List 列表和提供添加 To-do List 的页面。在 Web 服务中,我们将使用 Express 框架作为 HTTP 服务器,使用 EJS 模板引擎渲染视图。

以下是 Web 服务的代码:

在以上代码中,我们首先引入了 Express、EJS 和 Axios 等模块,并将 Express 设置为 EJS 模板引擎。接下来,我们定义了两个路由:/ 和 /todo。

在 / 路由中,我们从后端 API 服务中获取 To-do List 数据,并将数据渲染到 EJS 模板中。在 /todo 路由中,我们从请求体中获取 To-do List 名称,然后将数据发送到后端 API 服务中进行添加。最后,我们使用 Express 监听 3000 端口,并打印出日志提醒 Web 服务已经成功启动。

API 服务

API 服务负责处理 HTTP 请求、与数据库交互以及处理业务逻辑。在 API 服务中,我们将使用 Express 框架作为 HTTP 服务器,使用 Mongoose 模块连接 MongoDB 数据库。

以下是 API 服务的代码:

在以上代码中,我们首先引入了 Express、Mongoose、Body Parser 等模块,并连接了名为 todo 的 MongoDB 数据库。接下来,我们定义了两个路由:/api/todo 和 /api/todo/:id。

在 /api/todo 路由中,我们使用 Mongoose 查询数据库中的所有 To-do List 数据,并将数据以 JSON 格式返回给前端 Web 服务。在 /api/todo/:id 路由中,我们从请求体中获取 To-do List 名称,然后将数据存储到 MongoDB 中。最后,我们使用 Express 监听 3001 端口,并打印出日志提醒 API 服务已经成功启动。

使用 Docker Compose 打包微服务应用

在运行 Node.js 微服务应用时,我们通常需要分别运行 Web 服务和 API 服务两个容器,并将它们连接起来。为了方便管理多个 Docker 容器,我们可以使用 Docker Compose 工具来打包和运行整个微服务应用。

以下是一个简单的 Docker Compose 文件示例:

在以上代码中,我们定义了三个服务:web、api 和 mongo。web 服务和 api 服务使用同一个 Dockerfile 文件构建,分别映射到本地 3000 和 3001 端口。api 服务依赖于 mongo 容器,我们使用官方的 MongoDB 镜像作为依赖项,并将端口映射到本地的 27017 端口。

在项目根目录下执行以下命令启动 Docker Compose:

此时,Docker Compose 将依次构建、启动和连接所有服务,并将整个微服务应用运行在 Docker 容器中。

总结

本篇文章介绍了如何使用 Docker 构建 Node.js 微服务应用。我们首先介绍了 Docker 和微服务两个概念,然后演示了如何使用 Docker 构建 Node.js 应用,并将应用拆分成多个微服务。最后,我们使用 Docker Compose 工具自动化打包和部署整个微服务应用。希望本篇文章可以帮助大家更好地理解 Docker、微服务以及如何在 Node.js 中应用这些技术。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6534f1fd7d4982a6eba9aa55


纠错
反馈