目录
1.安装MongoDB
1.1 获取MongoDB
docker pull mongo
1.2 启动容器
docker run --name lqs-mongodb -p 27017:27017 mongo
1.3 挂载数据卷
上面步骤2启动的MongoDB容器后,数据默认存储在Docker容器里面,一旦删除该容器,数据就会丢失,如果需要数据不丢失,解决办法就是将Docker中MongoDB存储数据的路径映射到宿主机。这样,只要宿主机不删除数据,Docker中的MongoDB就有数据。
- Linux系统
例如:将容器中/data/db目录(MongoDB镜像默认存储数据在此目录下),映射到宿主机的/home/lqs/data/mongodb目录,这样容器中MongoDB产生的所有数据都会保持到宿主机上:
docker run --name mongo -p 27017:27017 -v /home/lqs/database/mongodb/data:/data/db -d mongo
- Windows系统
docker run --name mongo -p 27017:27017 -vE:\MongoDB\data:/data/db -d mongo
-d表示后台运行,命令运行后,打开宿主机的/home/lqs/data/mongodb目录,可以看到已经有数据存储了,如下所示:
- Windows系统
docker run -d --restart=always -p 27017:27017 --name mongo -v D:/MongoDB/data:/data/db -d mongo
1.4 认证登录:设置用户和密码
- 方式一:不推荐
MongoDB默认没有设置用户名和密码,使用IP+端口就能直接访问数据库。
这里以在Ubuntu的Docker设置MongoDB用户为例:
- ①首先创建一个不需要认证校验的MongoDB容器
docker run --name mongo -p 27017:27017 -v /home/lqs/database/mongodb/data:/data/db -v /Users/qsliu/database/docker-log/mongo:/data/log -d mongo:latest
- ②进入MongoDB,创建管理员账户,授予root权限
# Docker里面的MongoDB容器已运行,且容器名称为mongo
# 还可以使用docker exec -it 容器名称 mongo admin,来直接进入MongoDB数据库中
> docker exec -it mongo bash
# 使用mongo命令,进入MongoDB数据库
> mongo
# 切换到MongoDB自带的数据库admin,用于创建管理员账户
> use admin
# 创建管理员账户,授予root权限
> db.createUser({user:'admin',pwd:'123456',roles:[{role:'root',db:'admin'}]});
- ③删除正在运行的MongoDB容器
docker rm -f mongo
- ④重新创建一个开启权限认证的MongoDB容器
docker run --name mongo -p 27017:27017 -v /Users/qsliu/database/docker-data/mongo:/data/db -v /Users/qsliu/database/docker-log/mongo:/data/log -d mongo:latest --auth
- ⑤进入MongoDB容器,使用管理员账户admin进行认证后,再进行其他操作
# 验证:尝试使用上面创建的管理员账户进行验证连接,返回1就表示认证成功。 > db.auth('admin', '123456') # 切换到数据库sms-send(如果没有该数据库,则会创建该数据库),用于给该数据库创建普通用户。 > use sms-send # 创建一个名为 lqs,密码为 123456 的普通用户,授予读写权限。 > db.createUser({ user:'lqs',pwd:'123456',roles:[ { role:'readWrite', db: 'sms-send'}]}); # 修改密码 db.changeUserPassword('lqs','123'); # 查看当前数据库里面的所有用户 > show users # 查看所有用户(pretty()格式化显示,只能在admin数据库下执行) > db.system.users.find().pretty() # 删除用户 > db.dropUser("lqs") # 退出 > exit
2.方式二:推荐
直接输入以下命令创建MongoDB容器:
docker run --name mongo -p 27017:27017 -v /Users/qsliu/database/docker-data/mongo:/data/db -v /Users/qsliu/database/docker-log/mongo:/data/log -d mongo:latest --auth
然后输入以下命令:
#进入MongoDB容器
docker exec -it mongo /bin/bash
#进入mongo shell
mongosh
#进入admin数据库
use admin
# 创建超级权限root角色的用户,或者userAdminAnyDatabase 等角色权限比较大的用户,我创建的是拥有超级权限root角色的用户root
# 用户名:root,密码:root,角色:root,数据库:admin
db.createUser({user:'root',pwd:'root',roles:[{role:'root',db:'admin'}]})
# 认证登录db.auth('用户名','密码'),打印1则代表认证通过db.auth('root','root')
# 退出重新登陆
#接下来给数据库test_a_collection创建用户zhangsan
use test_a_collection # 切换至数据库test_a_collection# 创建用户zhangsan,角色为dbOwner,即代表zhangsan拥有对test_a_collection数据库的所有权限
db.createUser({user:"zhangsan", pwd:"123456", roles:[{role: "dbOwner", db:"test_a_collection" }]})# zhangsan用户登录
db.auth('zhangsan','123456')# 查看当前数据库的集合,因为是新的数据库,所以集合为空,不打印任何东西则代表成功
show collections
使用MongoDB Compass连接MongoDB
- 使用admin账户进行连接,可以看到admin账户是超级管理员,可以操作所有数据库
- 使用lqs账户进行连接,只能操作sms-send数据库
2.安装Redis
2.1 获取Redis
docker pull redis
2.2 启动Redis容器,并挂载数据卷
docker run --name redis -p 6379:6379 -v /Users/qsliu/database/docker-data-config/redis-7.0.8/redis.conf:/etc/redis/redis.conf -v /Users/qsliu/database/docker-data/redis:/data -d redis:latest
3.安装MySQL
#获取MySQL
docker pull mysql
#创建并运行MySQL容器
docker run --restart=always --privileged=true \
-v /Users/qsliu/database/docker-data/mysql/:/var/lib/mysql \
-v /Users/qsliu/database/docker-log/mysql/:/var/log/mysql \
-v /Users/qsliu/database/docker-data-config/mysql/mysq.cnf:/etc/mysql/my.cnf \
-p 3306:3306 --name my-mysql \
-e MYSQL_ROOT_PASSWORD=mstsc123. -d mysql