zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Windows 上 Docker 部署 MongoDb 并构建数据持久化

2023-04-18 15:18:55 时间

拉取镜像

老样子先拉取一个镜像。

docker pull mongo:latest

运行容器

docker run -p 27017:27017 --name mongo -v /d/mongo/data:/data/db -e MONGO_INITDB_ROOT_USERNAME=sa -e MONGO_INITDB_ROOT_PASSWORD=Aa123456 -e TZ=Asia/Shanghai -d mongo:latest
  • -p 27017:27017:映射27017端口
  • -v /d/docker/mongo/data:/data/db:主机上的 /d/mongo/data 目录映射到容器内部的 /data/db 目录,这样容器内的数据将持久化保存在主机上;
  • -e MONGO_INITDB_ROOT_USERNAME=sa:创建一个 sa 的用户;
  • -e MONGO_INITDB_ROOT_PASSWORD=Aa123456:并设置密码为 Aa123456;
  • -e TZ=Asia/Shanghai:时区设置为 亚洲 / 上海;
  • -d:将容器放入后台运行

通过设置环境变量 "MONGO_INITDB_ROOT_USERNAME" 和 "MONGO_INITDB_ROOT_PASSWORD",这俩个变量结合使用,创建一个新用户并设置该用户的密码。这个用户是在身份验证数据库中创建的,并被赋予root角色,这是一个“超级用户”角色。

现在可以使用 MongoDBCompass 或者 Navicat 来进行测试(记得禁用 ssl):

MongoDBCompass:
MongoDBCompass 测试

Navicat:

然后随便创建一些数据保存,删除容器,再运行容器查看刚刚创建的数据是否存在,如果存在则数据持久化成功。

开启远程连接

为什么要开启远程连接?开启远程连接可以让用户在其他计算机或云服务器上使用MongoDB数据库,从而实现数据共享和数据协作。

开启远程连接的方法有俩种

第一种:进入容器内部修改 mongod.conf.orig 文件

打开 PowerShell

# 进入容器内部
docker exec -it mongo /bin/bash # 这边的 mongo 是因为我们之前命名了 mongo 没有命名的话就是要输入 容器id

apt update

apt install vim # 安装 vim 编辑器

vim /etc/mongod.conf.orig # 编辑 mongod.conf.orig

找到 bindIp: 127.0.0.1 给他注释或者删除,然后加上 bindIp: 0.0.0.0 这样就开启远程连接了。

设置完成之后可能要重启一下容器或者服务

第二种:在本地创建好配置文件然后把配置文件挂载到容器里

我们这边先示范 Windows 上挂载到容器内部,Linux 上的话操作也差不多:

D:dockermongoconf里面创建一个 mongod.conf文件。详细配置文件参数请看:配置文件选项 — MongoDB 手册

systemLog:
   destination: file
   path: "/var/log/mongodb/mongod.log" 	# mongod或mongos应该将所有诊断日志信息发送到的日志文件的路径,而不是标准输出或主机的syslog。MongoDB在指定的路径上创建日志文件。
   logAppend: true # 当为true时,当mongos或mongod实例重新启动时,mongos或mongod将新条目追加到现有日志文件的末尾。如果没有这个选项,mongod将备份现有日志并创建一个新文件。

storage:
   # journal: enabled: true 启用了 MongoDB 的日志
   journal:
      enabled: true
      
# 要求连接到 MongoDB 服务器的客户端必须通过身份验证,才能执行任何操作。
security:
  authorization: enabled

net:
   # bindIp是 ,它强制 服务器,以仅侦听本地主机 IP 上的请求。仅绑定到 应用程序级系统可以访问的安全接口 系统网络过滤提供的访问控制 (即”localhost防火墙").
   bindIp: 0.0.0.0 # 改成 0.0.0.0 就变成远程连接了
   port: 27017
   
setParameter:
   enableLocalhostAuthBypass: false
   # 当 enableLocalhostAuthBypass 参数设置为 true 时,MongoDB 允许来自本地主机(即 127.0.0.1 或 localhost)的连接不需要进行身份验证就可以访问数据库。
   # 而当 enableLocalhostAuthBypass 参数设置为 false 时,则需要对来自本地主机的连接进行身份验证,才能访问 MongoDB 数据库。

然后运行容器的时候把配置文件挂载上去

docker run -p 27017:27017 --name mongo -v /d/docker/mongo/data:/data/db -v /d/docker/mongo/conf:/etc/mongo -e MONGO_INITDB_ROOT_USERNAME=sa -e MONGO_INITDB_ROOT_PASSWORD=p@ssw0rd -e TZ=Asia/Shanghai -d mongo:latest --config /etc/mongo/mongod.conf
  • -v /d/docker/mongo/conf:/etc/mongo:主机上的 /d/docker/mongo/conf 目录映射到容器内部的 /etc/mongo 目录;
  • --config /etc/mongo/mongod.conf:指定使用 mongod.conf 文件;

个人学习笔记,方便他人也方便自己。