Docker 是一个功能强大的开发平台,而 Docker 的优势很容易让 Web 开发人员所忽略。在专栏《面向WEB开发人员的Docker》中介绍了在 WEB 开发中可以提高效率的使用方式。容器可以在任何机器上运行,也可以在公共云或私有云中运行。由于 Docker 的轻量级运行时和独立运行进程的能力,多个容器可以在同一虚拟机或服务器上同时运行。
而 MongoDB 是一种 NoSQL 数据库服务,具有无缝性能和扩展选项,在基于 NODE.js 的全栈开发中经常使用的数据库类型之一。它使用类似 JSON 的存储模型,不需要预定义的数据库架构。在现实世界中,大多数数据都是非结构化的------它不遵循特定的模式。 NoSQL 数据库对于存储此类数据非常有用。只需输入数据,就会创建新字段。在缺少大量数据的情况下,还可以将字段留空。
MongoDB 可以在 Docker 容器中运行, Docker Hub 上有官方映像,其中包含用于开发环境的 MongoDB 社区版本。对于生产,可以使用 MongoDB 企业版自定义构建容器。
如果想在多台机器上使用 MongoDB 数据库,使用 Docker 容器托管 MongoDB 是一个很好的方法。这种方式可以轻松创建新的隔离实例。此外,在开发过程中,启动 Docker 实例比手动配置服务器更容易。如果正在开发多个应用程序,则可以使用 docker-compose.yaml
文件快速启动多个容器。
安装 Docker
要启动 MongoDB 之前先要确保安装好 Docker (安装文档),可以通过终端输入命令安装,也可以使用 Docker Desktop 以获得无缝体验。
启动 MongoDB
对于开发,最好连接到本地 Docker 容器内运行的 MongoDB 实例(而不是云托管实例)以节省资源。可以拉取最新的 MongoDB 镜像并在 Docker 容器中运行它。对于生产,应用程序可以使用 MongoDB Atlas 或 MongoDB Enterprise Server 连接到云托管数据库。
在开发中,建议使用 Docker 在本地托管 MongoDB 实例。首先通过指定相应的标签来拉取所需 MongoDB 版本的镜像:
docker pull mongo:7.0
现在使用以下命令启动运行 MongoDB:
arduino
docker run -d -p 27017:27017 --name test-mongo mongo:7.0
-d
标志意思是 Docker 容器作为后台进程运行,-p
标签表示容器绑定的端口号 27017
,在程序中可以使用 localhost:27017
连接到 MongoDB。
如果需要更改端口号,可以将 -p
标志参数更改为 8000:27017
,这样在程序中的连接地址为 localhost:8000
。还可以使用 --port
标志来更改映射的端口号。使用自定义端口映射可以避免多版本冲突。
使用以下命令进入 MongoDB 容器中。
bash
docker exec -it test-mongo bash
进入后输入命令 mongosh
,可以看到如下效果:
show dbs
命令将显示所有现有数据库,如下所示。
关于 shell
中命令的详细信息,输入 help
命令可以看到所有的指令。
要检查容器日志,可以使用 docker logs
命令,后跟容器的名称或者ID:
使用 --follow
标志,容器日志将在终端上实时更新。
持久保存数据
在 Docker 中运行 MongoDB 时,如果按照上面的命令运行,数据库的数据将存储在容器中,一旦容器重启或者被删除数据就会丢失。通常使用卷 volume
来确保映射容器中的一些目录,默认情况下,MongoDB 镜像将其数据存储在容器中 /data/db
目录中。可以将卷映射到此位置以启用数据持久性。使用下面的命令将创建一个 test-mongo
容器,并在其上数据映射到目录 data-vol
:
javascript
docker run -d \
-p 27017:27017 \
--name test-mongo \
-v data-vol:/data/db \
mongo:7.0
-v
标记就是用来映射容器路径,如果需要查看卷,可以使用 docker volume inspect
命令来执行此操作。也可以使用 docker volume ls
检查所有现有卷以显示哪些卷附加到哪些容器:
bash
docker volume ls
配置 MongoDB
如果要更改默认的 MongoDB 配置,使用 --config
标志将位置传递到包含配置的文本文件,配置文件遵循YAML格式,命令如下:
bash
docker run -d
--name test-mongo
-v mongo-data:/data/db
-v ./mongo.conf:/etc/mongo/mongo.conf
mongo:7.0 --config /etc/mongo/mongo.conf
MongoDB 安全配置
需要确保数据库安全,向 MongoDB 容器添加身份验证,阻止未经授权的人员连接到服务器。通过在容器创建期间使用环境变量设置用户名和密码来添加数据库用户帐户。使用 -e
标志指定环境变量 MONGODB_INITDB_ROOT_USERNAME
和 MONGODB_INITDB_ROOT_PASSWORD
:
ini
docker run -d
-p 27017:27017
--name test-mongo
-v mongo-data:/data/db
-e MONGODB_INITDB_ROOT_USERNAME=sample-db-user
-e MONGODB_INITDB_ROOT_PASSWORD=sample-password
mongo:7.0
数据备份
在 Mongodb 中使用 mongodump
命令来备份 MongoDB 数据,可以导出所有数据到指定目录中。
mongodump -h dbhost -d dbname -o dbdirectory
-h
:MongoDB 所在服务器地址,例如:127.0.0.1:27017
-d
:需要备份的数据库实例名称,例如:admin
-o
:备份的数据存放位置,该目录需要提前建立,在备份完成后,系统自动在dump
目录下建立一个admin
目录,这个目录里面存放该数据库实例的备份数据。
在这里进入容器,数据命令:
bash
mongodump -h 127.0.0.1:27017 -d admin -o /data/dump/
数据还原
备份好了数据之后,需要用到备份数据,就要还原,在 Mongodb 中使用 mongorestore
命令来恢复备份的数据,命令语法如下:
mongorestore -h dbhost -d dbname dbdirectory
-h
:MongoDB 所在服务器地址,例如:127.0.0.1:27017
-d
:需要备份的数据库实例名称,例如:admin
--drop
:恢复的时候,先删除当前数据,然后恢复备份的数据,需要慎用dbdirectory
:备份数据所在位置,如data/dump/admin
同样这里进入容器,运行命令:
bash
mongorestore -h 127.0.0.1:27017 -d admin /data/dump/admin
总结
在上面介绍了使用 Docker 托管 MongoDB 服务器,作为WEB开发人员,使用容器作为日常生活的一部分有很多优点。容器确保了跨操作系统的一致性,通过使用它们,可以确保整个团队的一致性。而部署容器相对容易,并可以确保生产环境和开发环境的一致性。