互联网技术 / 互联网资讯 · 2024年3月15日

使用卷与网络实现数据持久化的云计算核心技术 Docker 教程

本文将介绍在容器中运行数据库、如何通过卷和网络实现数据持久化,以及应用程序与数据库之间的通信。随后,我们将把所有步骤整合到一个 Compose 文件中,便于通过单条命令设置并运行本地开发环境。最后,我们将展示如何将调试器连接到容器内运行的应用程序。

可直接使用 MongoDB 的官方 Docker 镜像,在容器中运行数据库,而无需在本地安装、配置并将数据库作为服务独立运行。

在启动 MongoDB 之前,需要创建若干卷,容器引擎会管理这些卷以存储持久数据和配置信息。推荐使用 Docker 提供的托管卷功能,而非绑定挂载。

现在就创建需要的卷。为数据创建一个卷,另一个用于 MongoDB 的配置。

$ docker volume create mongodb

$ docker volume create mongodb_config

接着创建一个网络,应用程序与数据库需要通过该网络进行互联。所创建的网络将是用户自定义的桥接网络,提供良好的 DNS 发现服务,便于在连接字符串中使用。

$ docker network create mongodb

现在即可在容器中运行 MongoDB,并将其挂载到前面创建的卷和网络。Docker 将从 Docker Hub 拉取镜像并在本地运行。

$ docker run -it –rm -d -v mongodb:/data/db -v mongodb_config:/data/configdb -p 27017:27017 –network mongodb –name mongodb mongodb

好,MongoDB 已经在运行。接下来更新应用的服务器端代码以使用 MongoDB,而不是内存数据存储。

const Ronin = require(‘Ronin-server’)

const Mocks = require(‘Ronin-Mocks’)

const database = require(‘Ronin-database’)

const server = Ronin.server()

database.connect(process.env.connectionSTRING)

server.use(‘/’, Mocks.server(server.router(), false, false))

server.start()

我们已添加了 Ronin-database 模块并更新了代码以连接数据库,将内存中的标志设置为 false。现在需要重新构建镜像以包含这些更改。

首先使用 NPM 将模块添加到应用程序中:

$ npm install Ronin-database

随后构建应用镜像:

$ docker build –tag node-docker .

接下来运行容器,此次需要设置 connectionSTRING 环境变量,确保应用程序知道如何连接数据库。通过 docker run 的环境变量参数传递即可。

$ docker run -it –rm -d –network mongodb –name rest-server -p 8000:8000 -e connectionSTRING=mongodb://mongodb:27017/yoda_notes node-docker

可以测试应用是否成功连接数据库并可新增注释:

$ curl –request POST –url http://localhost:8000/notes –header ‘content-type: application/json’ –data ‘{“name”: “This is a note”, “text”: “This is a note that I wanted to take while I was working on writing a blog post.”, “owner”: “Peter”}’

你应该会收到如下 JSON 响应:

{“code”:”SUCCESS”,”payload”:{“_id”:”5efd0a1552cd422b59d4f994″,”name”:”This is a note”,”text”:”This is a note that I wanted to take while I was working on writing a blog post.”,”owner”:”Peter”,”createDate”:”2020-07-01T22:11:33.256Z”}}