前言
MongoDB 是一款开源的非关系型数据库系统,具有高性能,高可靠性,易扩展等特点,广泛用于 Web 开发中的大数据存储和处理。而容器化部署则是当今云原生时代的必然选择,可以方便地管理和部署应用程序及其依赖环境。本文将详细介绍 MongoDB 容器化部署需要注意的问题和解决方案,适用于前端及相关从业人员。
Docker 安装 MongoDB
Docker 安装
Docker 是一种虚拟化技术,可以让开发人员在应用程序中打包他们的应用程序和依赖项,并将其转换为可移植的镜像。在本文中,在 Docker 容器中运行 MongoDB 数据库引擎。
Docker 安装步骤:
官网下载安装 Docker
在命令行运行以下命令,检查是否安装成功
docker run hello-world
从 Docker Hub 设置 MongoDB 镜像,在命令行中运行以下命令
docker pull mongo
运行 MongoDB,运行以下命令
docker run -d -p 27017-27019:27017-27019 --name mongodb mongo
目前为止,MongoDB 就已经在 Docker 容器中安装成功了。
MongoDB 安装
Docker 中安装 MongoDB:
创建一个名为 MongoDB 的目录。这个目录会在 MongoDB 容器中创建一个持久化目录。
mkdir -p ~/mongodb/data
运行以下命令以安装 MongoDB,数据库文件将存储在 ~/mongodb/data 中。
docker run -d -p 27017-27019:27017-27019 --name mongodb -v ~/mongodb/data:/data/db mongo
遇到问题
- 如果无法从 Docker 下载 MongoDB 镜像,可以尝试其他源 -- 修改 Docker 配置文件或安装 Docker 镜像加速器。
- 如果创建容器时出现权限不足错误,则可以在命令前加上 sudo。
MongoDB 配置
1. 数据目录
MongoDB 的数据存储在一个数据目录中,该数据目录由一个 mongod 进程访问。在 Docker 容器中,数据目录位于容器的 /data/db 目录。
如果需要在宿主系统中持久化 MongoDB,可以使用以下命令将宿主目录与容器中的数据目录连接。
docker run -d -p 27017-27019:27017-27019 --name mongodb -v /my/own/datadir:/data/db mongo
2. 确定 MongoDB 容器 IP
由于 Docker 中的容器无法使用宿主系统中的 localhost URL,需要先确定容器的 IP 地址。可以使用以下命令确定 MongoDB 容器的 IP 地址:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mongodb
因此,通常我们使用容器的 IP 地址,例如:
mongodb://172.17.0.2:27017/mydatabase
3. MongoDB 访问控制
MongoDB 默认情况下没有启用身份验证,这意味着任何人都可以对数据库进行读写操作。尽管 MongoDB 具有默认的安全设置,但它们不足以保护 MongoDB 数据库免受网络安全威胁。
当 MongoDB 身份验证被激活时,MongoDB 将验证连接到 MongoDB 的客户端是否拥有操作数据库的权限。我们可以通过以下一组命令在 MongoDB 中启用身份验证:
use admin db.createUser({ user: "admin", pwd: "password", roles: [“userAdminAnyDatabase”, “dbAdminAnyDatabase”, “readWriteAnyDatabase”] })
这段代码:
- 创建一个名为 admin 的数据库。
- 在 admin 数据库中创建一个名为 admin 的超级用户,并为该用户分配了三个数据库角色:userAdminAnyDatabase,dbAdminAnyDatabase 和 readWriteAnyDatabase。
如果有多个用户需要访问相同的数据库,请使用不同的角色分配不同的权限。
4. MongoDB 备份和恢复
备份 MongoDB 非常重要,可以通过两种方法进行备份:mongodump 和 mongorestore。mongodump 是 MongoDB 的备份工具,它可以将数据备份到一个可导入的格式,mongorestore 可以将生成的备份文件导入到 MongoDB 数据库中。
使用 mongodump 命令进行备份:
mongodump --host mongodb --port 27017 --db content_management_system --out ~/backup
这段代码备份了名为 content_management_system 的数据库,并导出到主机文件系统的 ~/backup 目录中。注意,--host 和 --port 选项下文之前已经讲到。
使用 mongorestore 命令进行恢复:
mongorestore --host mongodb --port 27017 --db content_management_system ~/backup/content_management_system/
这段代码将 ~/backup/content_management_system 目录中的数据恢复到远程 MongoDB 数据库中。
5. MongoDB 集群
MongoDB 支持内置的分片和副本集技术,可以用于实现高可用性和自动故障切换。这些功能非常适合在 Docker 容器中部署 MongoDB 时使用。
下面是一个 MongoDB 副本集 Docker 容器的例子:
docker run --name mongo-replica-set \ --net my-net \ -p 37017:27017 \ -v /data/mongo3:/data/db \ -d mongo:3.4 \ --replSet rs0 --bind_ip_all --smallfiles
--replSet rs0 选项将容器设为副本集组件。其他容器启动命令与之类似。然后加入集合。
mongo --host $HOST_IP --port $HOST_PORT config = { _id:"rs0", members:[ {_id:0, host:"mongo-replica-set:27017"} ] }; rs.initiate(config);
其中,HOST_IP 和 HOST_PORT 分别表示您的 MongoDB 容器的 IP 和端口。
结论
这篇文章详细讲述了 MongoDB 在 Docker 容器中的安装、配置、备份和恢复、集群等知识,介绍了最佳实践,适用于前端及相关从业人员。注意本文仅为参考;实际情况下可能需要根据实际需求进行调整。
参考
- MongoDB 官方文档:https://docs.mongodb.com/
- Docker 中文社区文档:https://www.docker.org.cn/
- MongoDB 管理工具:Robo 3T https://robomongo.org/
- MongoDB 图形化界面:Studio 3T https://studio3t.com/
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/672d774addd3a70eb6da759e