1.连接本地mongodb
mongodb://jevy:112244@localhost:27017/?authSource=admin&readPreference=primary&appname=MongoDB%20Compass&ssl=false
- 在阿里云上安装 mongodb数据库,然后用docker 数据卷指定到数据库的位置。
我这里是直接使用docker 安装的mongodb
参考链接:www.runoob.com/docker/dock…
使用以下命令来查看是否已安装了 mongo:
docker images
2.2 进入镜像 并启动
现在没有启动:
2.3 安装mongodb 并启动镜像:
3.MongoDB 有三种集群部署模式,分别为主从复制(Master-Slaver)、副本集(Replica Set)和分片(Sharding)模式。
- Master-Slaver 是一种主从副本的模式,目前已经不推荐使用。
- Replica Set 模式取代了 Master-Slaver 模式,是一种互为主从的关系。Replica Set 将数据复制多份保存,不同服务器保存同一份数据,在出现故障时自动切换,实现故障转移,在实际生产中非常实用。
- Sharding 模式适合处理大量数据,它将数据分开存储,不同服务器保存不同的数据,所有服务器数据的总和即为整个数据集。 Sharding 模式追求的是高性能,而且是三种集群中最复杂的。在实际生产环境中,通常将 Replica Set 和 Sharding 两种技术结合使用
- 从新安装mongodb,并写入数据,这次条理清晰一些, 首先安全组通道设置好了。
参考我以前写的文章 juejin.cn/post/704965…
docker run -itd --name docker_mongo -p 27018:27017 mongo:4.4.10 --auth
-p 27017:27017 :映射容器服务的 27017 端口到宿主机的 27017 端口。外部可以直接通过 宿主机 ip:27017 访问到 mongo 的服务
我这里设置为 容器的27018 端口:为了方便以后区分分布式。
5. 查看所有的容器 包括未运行的
docker ps -a
首先启动容器,
然后进入容器。
- 进入容器之后 ,运行mongodb数据库, 在没有创建角色时候,是没办法使用的。
> show dbs;
> use admin;
switched to db admin
> db.createUser({ user:'admin',pwd:'112244',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
Successfully added user: {
"user" : "admin",
"roles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
},
"readWriteAnyDatabase"
]
}
> db.auth('admin', '112244');
1
> show dbs;
admin 0.000GB
config 0.000GB
local 0.000GB
使用Windows 本地远程链接:失败了
在docker中的三种链接方式:
也就是说上面设置的docker:27018 并没用。
7. 查看 容器
有没有一种可能,Windows远程链接 不上,是因为我27017端口映射到容器的27018,启动不了。
juejin.cn/post/704965… 这里的必须在容器里面设置用户名,远程链接的时候是无法创建的
8、再新建一个容器,
新开一个 安全组。
9. 删除 容器:
www.jianshu.com/p/79caa1cc4… 创建用户名和密码:
退出容器,并停止容器。
docker 常用命令:cloud.tencent.com/developer/a…
root@iZwz96a370w2rviffw4q2wZ:~# docker rm docker_mongo
10. 映射一个新的端口 进行测试:
docker run -itd --name docker_mongo -p 27017:27018 mongo:4.4.10 --auth
容器已经运行了,
设置好账号+密码:切记要重启才能生效:
不然链接不上
11. 重启一下:
要从容器中退出,才可以重启
root@iZwz96a370w2rviffw4q2wZ:~# docker restart docker_mongo
在已经有用户的情况下,再次想添加用户,行不通
只有通过了 身份验证,也就是说第一次数据库为空的时候创建的用户名,
12.
mongo 47.106.188.124:27018 -u 'admin' -p '112244' --authenticationDatabase "admin"
连接不上,
13.设置数据卷的方式尝试:
juejin.cn/post/704965… 参考
docker run --name jevy_mongo -p 27017:27019 -v /home/mongo/jevy_mongo:/data/db -d mongo:4.4.10 --auth
跟第10条进行对比:
docker run -itd --name docker_mongo -p 27017:27018 mongo:4.4.10 --auth
也就是说 前面的是服务器 的端口 : 后面的是 容器的端口
数据卷也是 前面-本地文件路劲:容器的数据路劲
所以远程启动不了。
正确的做法是:
#创建3个mongo容器
docker create --name mongo01 -p 27017:27017 -v /home/mongo/rs0-data-01:/data/db mongo:4.4.6 --replSet "rs0" --bind_ip_all
docker create --name mongo02 -p 27018:27017 -v /home/mongo/rs0-data-02:/data/db mongo:4.4.6 --replSet "rs0" --bind_ip_all
docker create --name mongo03 -p 27019:27017 -v /home/mongo/rs0-data-03:/data/db mongo:4.4.6 --replSet "rs0" --bind_ip_all
#启动容器
docker start mongo01 mongo02 mongo03
#进入容器操作
docker exec -it mongo01 /bin/bash
rs.initiate({
_id : "rs0",
members: [
{ _id: 0, host: "192.168.2.118:27017" },
{ _id: 1, host: "192.168.2.118:27018" },
{ _id: 2, host: "192.168.2.118:27019" }
]
})
# 响应
{ "ok" : 1 }
#查询集群状态
rs.status()
后面就简单了,删掉 容器 将正确的 端口对应好: 27018:27107