在Docker上安装Mongo及Redis-NOSQL数据库

应用环境
Ubuntu 20.04.6 LTS (GNU/Linux 5.15.0-139-generic x86_64)
Docker version 28.1.1, build 4eba377

文章目录

    • 一、部署Mongo
      • 1. 拉取容器镜像
      • 2. 生成Run脚本
        • 2.1 准备条件
        • 2.2 参数解读
        • 2.3 实例脚本
      • 3. 实例操作
        • 3.1 Mongo bash控制台
        • 3.2 库表操作
      • 4. MongoDB Compass (GUI)
        • 登录连接配置
    • 二、安装Redis:7.4.1
      • 1. 拉取容器镜像
      • 2. 生成Run脚本
        • 2.1 实例脚本
        • 2.2 运维管理
    • 参考资料

一、部署Mongo

MongoDB是一个流行的开源文档型数据库,它使用类似 JSON 的文档模型存储数据,这使得数据存储变得非常灵活。它基于文档的 NoSQL 数据库,由 MongoDB Inc. 公司用C++语言编写,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

1. 拉取容器镜像

# mongo:8.0
sudo docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mongo:8.0# 添加标签名Tag
sudo docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mongo:8.0 docker.io/mongo:8.0# 移除标签名Tag
docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/mongo:8.0

国内镜像参考:
渡渡鸟镜像

2. 生成Run脚本

可参考:渡渡鸟-Run助手

2.1 准备条件

创建实例存储路径目录

# 创建mongo实例目录及config配置子目录
sudo mkdir -p /mongo/config

创建实例配置文件sudo vim mongod.conf,内容如下

# Dbase path
dbpath=/mongo/data# logs file path
logpath=/mongo/logs/mongod.log# lisen port
port=27017# All IP addresses are allowed to connect.
bind_ip=0.0.0.0# Enable log recording
journal=true# Whether to run in the background
fork=true# Enable authentication
auth=true

由于docker run卷映射**-v**参数是会自动创建不存在的宿主机路径目录的,只需要把配置文件所在路径及配置信息保存一下就可以了。

2.2 参数解读
# 将镜像进实例化成容器并运行
docker run# 【i】保持STDIN(标准输入)开放,即使没有附加任何东西。这通常用于让容器的进程保持运行,即使没有附加到终端。例如,你可以在容器内部运行一个交互式shell
# 【t】分配一个伪终端(pseudo-TTY),这对于交互式shell非常重要,比如当你想要在容器中运行bash或sh时。
# 【d】后台运行,即所谓的“detached”模式。容器会在后台启动,并且你会得到容器的ID或名称
-itd# 容器命名
--name mongo# 重启策略
## no:不自动重启,缺省时默认
## always:始终重启
## unless-stopped:Docker 服务重启后自动启动容器,除非容器被手动停止。可指定最大重试次数,例如 --restart=on-failure:3(最多重启3次)。
## on-failure:仅在容器非正常退出(退出状态码非0)时重启。
--restart=always \# 【p】映射策略,<宿主端口>:<容器端口>
-p 27017:27017 \# 使用本地时区
-e TimeZone='Asia/Shanghai' \
-e TZ='Asia/Shanghai' \
-v /etc/localtime:/etc/localtime \# 挂载卷映射(宿主:容器)
## /data/config/mongod.conf:实例化配置文件
## /data/db:应用数据
## /mongo/logs:运行日志
-v /mongo/config/mongod.conf:/etc/mongod.conf \
-v /mongo/db:/data/db \
-v /mongo/logs:/var/log/mongodb \# 让容器获取宿主机root权限
--privileged=true \# 最后一行所引用的docker镜像源
2.3 实例脚本

此处在卷标映射时,将配置文件以及数据库一起存放到mongo父目录,以便于维护和使用。

sudo docker run -itd --restart=always \
-p 17017:27017 \
-e TimeZone='Asia/Shanghai' \
-e TZ='Asia/Shanghai' \
-v /etc/localtime:/etc/localtime \
-v /mongo/config/mongod.conf:/etc/mongod.conf \
-v /mongo/db:/data/db \
-v /mongo/logs:/var/log/mongodb \
-e MONGO_INITDB_ROOT_USERNAME=root \
-e MONGO_INITDB_ROOT_PASSWORD="123456" \
--privileged=true \
--name mongo \
docker.io/mongo:8.0

3. 实例操作

3.1 Mongo bash控制台
# 登录到bash控制台
sudo docker exec -it mongo mongosh
# 当配置文件,启用auth=true时。需要以root身份登录
sudo docker exec -it mongo mongosh -u root -p '123456' --authenticationDatabase admin
## 如果不指定,切换到admin库,创建db用户时会报错
## 认证失败:MongoServerError[AuthenticationFailed]: Authentication failed.# 打开系统admin库
use admin
# 创建root用户
db.auth("admin","123456")

执行结果如下
在这里插入图片描述
常用运维管理指令

# 更新用户密码
db.changeUserPassword("admin","123456")# 新增用户权限
db.updateUser("admin",{roles:[{role:"readWrite",db:"admin"}]})# 删除用户
db.dropUser({'admin'})
# 查询所有用户
show users
3.2 库表操作

具体请见官方文档中文版,下面以创建一个库表数据集并执行查询为例

# 创建库
use huchi
# 新增一个库用户并分配读写权限
db.createUser({user: "admin",pwd: "admin",roles:["readWrite"]})
# 开启身份权限权限
db.auth('admin','admin')# 创建数据集
db.temp_sales.insert({ name:"abc", age:22, 'weight': '50斤'} )# 查询数据集
db.temp_sales.find()

执行结果如下
在这里插入图片描述

4. MongoDB Compass (GUI)

MongoDB Compass 是一款功能强大的 GUI,用于在可视环境中查询、聚合和分析 MongoDB 数据。
Compass 可免费使用并提供源代码,并且可以在 macOS、Windows 和 Linux 上运行。
详细操作文档请见官方使用文档,下载地址MongoDB Compass(GUI)。

登录连接配置

只是没有找到中文语言包,就这么用吧。
在这里插入图片描述
查询temp_sales数据内容如下
在这里插入图片描述

二、安装Redis:7.4.1

Redis 是由 Redis Ltd.开发的高性能开源内存数据库,以其极速响应和灵活的数据结构(如字符串、哈希、列表)著称,广泛应用于缓存、实时消息队列等场景。为应对复杂数据处理需求,它在Redis核心基础上增加了一些高级功能和模块,以支持更多的使用场景和需求。Redis Stack 包括以下几个主要组件:

  • JSON文档:RedisJSON用于在 Redis 中存储和操作 JSON 数据结构,支持复杂的 JSON 查询和更新操作。
  • 全文搜索:RediSearch提供全文搜索和二次索引功能,使得在 Redis 中可以进行复杂的搜索查询。
  • 图数据库:RedisGraph模块,支持图数据结构的存储和查询,适用于社交网络、推荐系统等场景。
  • 时序数据:RedisTimeSeries专门用于时间序列数据的存储和分析,支持高效的时间序列数据写入和查询。
  • 布隆过滤器:RedisBloom一种概率数据结构,旨在以高度节省内存的方式快速确定元素是否存在于集合中。

Redis Stack 通过这些模块的组合,使得开发者可以在一个统一的平台上处理多种类型的数据和查询需求,极大地扩展了 Redis 的应用场景。官方提供了两种镜像版本:

  • redis/redis-stack:包含 Redis Stack server 和 Redis Insight。该容器最适合本地开发。
  • redis/redis-stack-server:仅提供 Redis Stack server 。该容器最适合生产部署。

两者区别在于有没有带有 RedisInsight web可视化端。

1. 拉取容器镜像

# redis:7.4.1
sudo docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/redis:7.4.1# 添加标签名Tag
sudo docker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/redis:7.4.1 redis:7.4.1# 移除标签名Tag
sudo docker rmi swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/redis:7.4.1

国内镜像参考:
渡渡鸟镜像

2. 生成Run脚本

可参考:渡渡鸟-Run助手

2.1 实例脚本

首先,创建宿主机挂载目录sudo mkdir -p /docker/redis/{conf,data},配置内容如下

# 拉取配置文件(拉取不了就只能[手工下载]https://download.redis.io/releases/ 对应的版本包)
sudo wget -O https://raw.githubusercontent.com/redis/redis/7.4/redis.conf docker/redis/conf/redis-server.conf# 编辑配置
sudo vim docker/redis/conf/redis-server.conf## 修改内容如下(:wq!保存)
bind 127.0.0.1 或者 bind 127.0.0.1 -::1   #注释掉这部分,使redis可以外部访问
daemonize no        #用守护线程的方式启动
logfile "redis.log"	#日志文件路径(选配)
requirepass 123456  #给redis设置密码
appendonly yes    #redis持久化  默认是no
tcp-keepalive 300 #防止出现远程主机强迫关闭了一个现有的连接的错误 默认是300

再运行如下脚本

sudo docker run -itd \
--restart=unless-stopped \
-p 6379:6379 \
-e TimeZone='Asia/Shanghai' \
-e TZ='Asia/Shanghai' \
-v /etc/localtime:/etc/localtime \
-v /docker/redis/conf/redis-server.conf:/conf/redis.conf \
-v /docker/redis/data:/data \
--name redis \
--privileged=true \
redis:7.4.1 redis-server /etc/redis/redis.conf
2.2 运维管理
# 检查容器状态
sudo docker ps -a | grep redis
sudo docker inspect redis# 登录bash后端
sudo docker exec -it redis bash# 直连Redis库
sudo docker exec -it redis bash -c "redis-cli"
## 有密码连接Redis
sudo docker exec -it redis bash -c "redis-cli -a 123456"
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379>## 也可以登录bash控制台后
root@57a9462ebf07:/data# redis-cli -h 127.0.0.1 -p 6379 -a 123456
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6379># Redis数据测试
127.0.0.1:6379> set a 1
OK
127.0.0.1:6379> get a
"1"# 报错:(error) NOAUTH Authentication required.
# 原因:redis身份验证失败,指令操作无效。# 获取密码
127.0.0.1:6379> config get requirepass
1) "requirepass"
2) "123456"# 修改密码
config set requirepass 777888
## 需注意的是,该密码不再重写conf中该配置参数(重启服务则仍以conf配置为主)。

参考资料

docker安装Redis
Docker 安装 Redis 详细指南
docker安装redis7.0
Docker部署redis,并挂载存储,日志,配置文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/88057.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/88057.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java 编程之责任链模式

一、什么是责任链模式&#xff1f; 责任链模式&#xff08;Chain of Responsibility Pattern&#xff09; 是一种行为型设计模式&#xff0c;它让多个对象都有机会处理请求&#xff0c;从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链&#xff0c;沿着这条…

1、做中学 | 一年级上期 Golang简介和安装环境

一、什么是golang Golang&#xff0c;通常简称 Go&#xff0c;是由 Google 公司的 Robert Griesemer、Rob Pike 和 Ken Thompson 于 2007 年创建的一种开源编程语言&#xff0c;并在 2009 年正式对外公布。 已经有了很多编程语言&#xff0c;为什么还要创建一种新的编程语言&…

Linux--迷宫探秘:从路径解析到存储哲学

上一篇博客我们说完了文件系统在硬件层面的意义&#xff0c;今天我们来说说文件系统在软件层是怎么管理的。 Linux--深入EXT2文件系统&#xff1a;数据是如何被组织、存储与访问的&#xff1f;-CSDN博客 &#x1f30c; 引言&#xff1a;文件系统的宇宙观 "在Linux的宇宙中…

淘宝商品数据实时获取方案|API 接口开发与安全接入

在电商数据获取领域&#xff0c;除了官方 API&#xff0c;第三方数据 API 接入也是高效获取淘宝商品数据的重要途径。第三方数据 API 凭借丰富的功能、灵活的服务&#xff0c;为企业和开发者提供了多样化的数据解决方案。本文将聚焦第三方数据 API 接入&#xff0c;详细介绍其优…

什么是防抖和节流?它们有什么区别?

文章目录 一、防抖&#xff08;Debounce&#xff09;1.1 什么是防抖&#xff1f;1.2 防抖的实现 二、节流&#xff08;Throttle&#xff09;2.1 什么是节流&#xff1f;2.2 节流的实现方式 三、防抖与节流的对比四、总结 在前端开发中&#xff0c;我们经常会遇到一些高频触发的…

Springboot集成阿里云OSS上传

Springboot集成阿里云OSS上传 API 接口描述 DEMO提供的四个API接口&#xff0c;支持不同方式的文件和 JSON 数据上传&#xff1a; 1. 普通文件上传接口 上传任意类型的文件 2. JSON 字符串上传接口 上传 JSON 字符串 3. 单个 JSON 压缩上传接口 上传并压缩 JSON 字符串…

删除大表数据注意事项

数据库是否会因删除操作卡死&#xff0c;没有固定的 “安全删除条数”&#xff0c;而是受数据库配置、表结构、操作方式、当前负载等多种因素影响。以下是关键影响因素及实践建议&#xff1a; 一、导致数据库卡死的核心因素 硬件与数据库配置 CPU / 内存瓶颈&#xff1a;删除…

Redis 是单线程模型?|得物技术

一、背景 使用过Redis的同学肯定都了解过一个说法&#xff0c;说Redis是单线程模型&#xff0c;那么实际情况是怎样的呢&#xff1f; 其实&#xff0c;我们常说Redis是单线程模型&#xff0c;是指Redis采用单线程的事件驱动模型&#xff0c;只有并且只会在一个主线程中执行Re…

[特殊字符] AIGC工具深度实战:GPT与通义灵码如何彻底重构企业开发流程

&#x1f50d; 第一模块&#xff1a;理念颠覆——为什么AIGC不是“玩具”而是“效能倍增器”&#xff1f; ▍企业开发的核心痛点图谱&#xff08;2025版&#xff09; ​​研发效能瓶颈​​&#xff1a;需求膨胀与交付时限矛盾持续尖锐&#xff0c;传统敏捷方法论已触天花板​…

(LeetCode 面试经典 150 题) 169. 多数元素(哈希表 || 二分查找)

题目&#xff1a;169. 多数元素 方法一&#xff1a;二分法&#xff0c;最坏的时间复杂度0(nlogn)&#xff0c;但平均0(n)即可。空间复杂度为0(1)。 C版本&#xff1a; int nnums.size();int l0,rn-1;while(l<r){int mid(lr)/2;int ans0;for(auto x:nums){if(xnums[mid]) a…

(17)java+ selenium->自动化测试-元素定位大法之By css上

1.简介 CSS定位方式和xpath定位方式基本相同,只是CSS定位表达式有其自己的格式。CSS定位方式拥有比xpath定位速度快,且比CSS稳定的特性。下面详细介绍CSS定位方式的使用方法。相对CSS来说,具有语法简单,定位速度快等优点。 2.CSS定位优势 CSS定位是平常使用过程中非常重要…

【软考高级系统架构论文】企业集成平台的技术与应用

论文真题 企业集成平台是一个支持复杂信息环境下信息系统开发、集成和协同运行的软件支撑环境。它基于各种企业经营业务的信息特征,在异构分布环境(操作系统、网络、数据库)下为应用提供一致的信息访问和交互手段,对其上运行的应用进行管理,为应用提供服务,并支持企业信息…

i.MX8MP LVDS 显示子系统全解析:设备树配置与 DRM 架构详解

&#x1f525; 推荐&#xff1a;《Yocto项目实战教程&#xff1a;高效定制嵌入式Linux系统》 京东正版促销&#xff0c;欢迎支持原创&#xff01; 链接&#xff1a;https://item.jd.com/15020438.html i.MX8MP LVDS 显示子系统全解析&#xff1a;设备树配置与 DRM 架构详解 在…

keep-alive实现原理及Vue2/Vue3对比分析

一、keep-alive基本概念 keep-alive是Vue的内置组件&#xff0c;用于缓存组件实例&#xff0c;避免重复渲染。它具有以下特点&#xff1a; 抽象组件&#xff1a;自身不会渲染DOM&#xff0c;也不会出现在父组件链中包裹动态组件&#xff1a;缓存不活动的组件实例&#xff0c;…

安卓jetpack compose学习笔记-Navigation基础学习

目录 一、Navigation 二、BottomNavigation Compose是一个偏向静态刷新的UI组件&#xff0c;如果不想要自己管理页面切换的复杂状态&#xff0c;可以以使用Navigation组件。 页面间的切换可以NavHost&#xff0c;使用底部页面切换栏&#xff0c;可以使用脚手架的bottomBarNav…

基于大数据技术的在UGC数据分析与路线推荐的研究

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…

flask通过表单自动产生get请求的参数、form表单实现POST请求的自动提交

通过表单自动产生get请求的参数 相关代码如下&#xff1a; import flaskapp flask.Flask(__name__)app.route(/) def login():html <!DOCTYPE html><html lang"en"><head><meta charset"UTF-8"><title>flask表单实现get…

《情感反诈模拟器》2025学习版

1.2 专业内容支持 67篇情感诈骗案例研究14万字心理学分析资料783条专业配音对白 二、安装与运行 2.1 系统要求 最低配置&#xff1a; 显卡&#xff1a;GTX 1060CPU&#xff1a;i5-8400存储&#xff1a;25GB空间 2.2 运行步骤 解压游戏文件&#xff08;21.7GB&#xff09;…

预训练 vs. 微调:大模型落地的核心两步,究竟有何不同?

在人工智能领域&#xff0c;尤其是自然语言处理&#xff08;NLP&#xff09;和计算机视觉&#xff08;CV&#xff09;&#xff0c;大型模型如GPT系列、BERT、Stable Diffusion等取得了令人瞩目的成就。支撑这些模型广泛应用的关键技术流程&#xff0c;通常包含两个核心阶段&…

微信原生小程序转uniapp过程及错误总结

https://ask.dcloud.net.cn/article/35786 此文章尤为重要&#xff0c;可以使用辅助工具 1、this.setData 源代码&#xff1a; this.setData({dateTime: obj.dateTime, });需更换为 this.dateTime obj.dateTime2、cookie问题 在此文章有解释 https://blog.csdn.net/ni155…