目录
docker pull mongo
docker run --name lqs-mongodb -p 27017:27017 mongo
上面步骤2启动的MongoDB容器后,数据默认存储在Docker容器里面,一旦删除该容器,数据就会丢失,如果需要数据不丢失,解决办法就是将Docker中MongoDB存储数据的路径映射到宿主机。这样,只要宿主机不删除数据,Docker中的MongoDB就有数据。
例如:将容器中/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
docker run --name mongo -p 27017:27017 -vE:\MongoDB\data:/data/db -d mongo
-d表示后台运行,命令运行后,打开宿主机的/home/lqs/data/mongodb目录,可以看到已经有数据存储了,如下所示:

docker run -d --restart=always -p 27017:27017 --name mongo -v D:/MongoDB/data:/data/db -d mongo
MongoDB默认没有设置用户名和密码,使用IP+端口就能直接访问数据库。
这里以在Ubuntu的Docker设置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
# 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'}]});
docker rm -f mongo
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
# 验证:尝试使用上面创建的管理员账户进行验证连接,返回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




docker pull 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
#获取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