• Docker安装MongoDB和Redis


    目录

    1.安装MongoDB

    1.1 获取MongoDB

    1.2 启动容器

    1.3 挂载数据卷

    1.4 认证登录:设置用户和密码

    2.安装Redis

    2.1 获取Redis

    2.2 启动Redis容器,并挂载数据卷


    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 认证登录:设置用户和密码

    1.  方式一:不推荐

            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

  • 相关阅读:
    TCP三次握手四次挥手及常见问题解决方案
    怎么压缩图片大小?这些压缩方法值得收藏
    Elasticsearch基础篇(四):Elasticsearch7.x的官方文档学习(Set up Elasticsearch)
    YOLOv7 Backbone| 原文源码详解
    c++ - 第10节 - list类
    UbuntuNAT内网穿透实现远程访问
    Java并发—利用AQS实现自定义锁
    dotnet 融合 Avalonia 和 UNO 框架
    【大数据开发技术】实验03-Hadoop读取文件
    C++ 24 之 拷贝构造函数
  • 原文地址:https://blog.csdn.net/qq_35507234/article/details/126439313