当前位置: 首页 > news >正文

Docker 搭建 Redis 数据库

Docker 搭建 Redis 数据库

  • 前言
  • 一、准备工作
  • 二、创建 Redis 容器的目录结构
  • 三、启动 Redis 容器
    • 1. 通过 redis.conf 配置文件设置密码
    • 2. 通过 Docker 命令中的 requirepass 参数设置密码
  • 四、Host 网络模式与 Port 映射模式
  • 五、检查 Redis 容器状态
  • 六、访问 Redis 服务
  • 总结


前言

Redis 是一个开源的高性能键值对存储系统,广泛用于缓存、消息队列等场景。通过 Docker 部署 Redis,能够让你轻松快速地运行 Redis 服务,同时灵活地进行配置和管理。

本篇文章将指导你通过 Docker 部署 Redis 容器,并讲解如何挂载配置文件来设置密码、监听端口及其他自定义设置。


一、准备工作

首先,确保你的系统上已经安装了 Docker。

Linux上进行Docker安装有两种方式:

  1. Docker自动化安装
  2. Docker手动安装

可以根据该文章的步骤进行安装:https://blog.csdn.net/weixin_44876263/article/details/136714078?spm=1001.2014.3001.5502

二、创建 Redis 容器的目录结构

为了更好地管理 Redis 的数据和配置文件,我们首先创建一些本地目录,用于存放 Redis 的配置文件和数据文件。

# 安装路径
DIR="/opt/docker/demo"
DOCKER_NAME="docker-redis"# 创建目录结构
mkdir -p "$DIR/redis/data"
mkdir -p "$DIR/redis/conf"
  • conf:存放 Redis 的配置文件(如 redis.conf)。
  • data:存放 Redis 数据文件。

三、启动 Redis 容器

1. 通过 redis.conf 配置文件设置密码

在启动 Redis 容器之前,我们需要准备好 Redis 的配置文件。在容器内,Redis 使用 redis.conf 配置文件来管理服务的行为。你可以选择自定义这个文件中的设置,如密码、端口、持久化方式等。

获取配置文件:你可以从 Redis 官方镜像容器中复制 redis.conf 文件,或者手动创建一个。

  1. 启动临时 Redis 容器来获取配置文件:

    docker run --name redis_test -d redis:6
    
  2. 复制 redis.conf 文件到本地目录:

    docker cp redis_test:/usr/local/etc/redis/redis.conf "$DIR/redis/conf/redis.conf"
    
  3. 删除临时 Redis 容器:

    docker rm -f redis_test
    
  4. 在 redis.conf 配置文件中,你可以通过设置 requirepass 来启用密码保护。打开 redis.conf 文件,找到以下配置并取消注释:

    requirepass yourpassword
    

    yourpassword 替换为你希望设置的密码(例如 123456)。如果你希望修改其他配置(如监听端口),也可以在这个文件中进行修改。

    常见的 Redis 配置项:

    • port:设置 Redis 的监听端口,默认是 6379。
    • bind:指定 Redis 监听的 IP 地址,确保只允许来自特定 IP 的连接。
    • requirepass:启用密码保护。

    例如,如果你希望将 Redis 监听端口修改为 6380,可以修改配置文件中的 port 配置项:

    port 6380
    
  5. 启动 Redis 容器
    一旦准备好了 redis.conf 配置文件,我们可以通过以下命令启动 Redis 容器,并挂载本地目录到容器内:

    docker run -d \--restart=always \--privileged=true \--log-opt max-size=100m \--log-opt max-file=2 \--name "$DOCKER_NAME" \--network host \-v "$DIR/redis/conf/redis.conf:/etc/redis/redis.conf" \-v "$DIR/redis/data:/data" \-v /etc/localtime:/etc/localtime \redis:6 redis-server /etc/redis/redis.conf --appendonly yes
    

    解释参数:

    • -d:后台运行容器。
    • --restart=always:容器在崩溃或系统重启后自动重启。
    • --privileged=true:授予容器额外权限,通常用于需要特殊访问权限的操作。
    • --log-opt max-size=100m--log-opt max-file=2:配置日志文件大小和最大文件数,避免日志文件过大。
    • --name "$DOCKER_NAME":指定容器名称,这里是 docker-redis
    • --network host:容器将使用宿主机的网络栈,直接暴露端口。
    • -v "$DIR/redis/conf/redis.conf:/etc/redis/redis.conf":将本地的 redis.conf 配置文件挂载到容器内。
    • -v "$DIR/redis/data:/data":将 Redis 数据文件挂载到容器内,确保数据持久化。
    • -v /etc/localtime:/etc/localtime:确保容器的时区与宿主机一致。
    • redis:6 redis-server /etc/redis/redis.conf --appendonly yes:指定 Redis 镜像并使用自定义配置文件启动 Redis,开启 appendonly 持久化。

优点:

  • 配置灵活,可以同时设置 Redis 的多项参数(如端口、密码、持久化等)。
  • 容器内部的 Redis 配置和密码设置与容器外部一致,便于管理。

缺点:

  • 需要手动准备和维护 redis.conf 文件。
  • 配置文件较为复杂,可能需要额外的操作才能适应不同的需求。

2. 通过 Docker 命令中的 requirepass 参数设置密码

直接在 Docker 启动命令中通过 requirepass 参数来设置密码是一种简便快速的方法。适用于简单场景,尤其是只需要设置密码而不需要更改其他配置时。

使用以下命令启动 Redis 容器,并通过 requirepass 参数直接设置密码:

docker run -d \--restart=always \--privileged=true \--log-opt max-size=100m \--log-opt max-file=2 \--name "$DOCKER_NAME" \--network host \-v "$DIR/redis/data:/data" \-v /etc/localtime:/etc/localtime \redis:6 redis-server --appendonly yes --requirepass "123456"

这里,我们直接通过命令行中的 --requirepass 参数来设置密码,避免了配置文件的修改。

优点:

  • 快速简便,适合不需要修改其他 Redis 配置的场景。
  • 不需要手动编辑或管理 redis.conf 配置文件。

缺点:

  • 只能设置密码,无法进行其他复杂的配置(如修改端口、持久化等)。
  • 密码直接写在命令行中,可能会有安全隐患(尤其是日志中可能会记录命令)。

四、Host 网络模式与 Port 映射模式

在 Docker 中,容器的端口配置是非常关键的。Redis 容器支持两种主要的端口配置方式:Host 网络模式Port 映射模式

  1. Host 网络模式
    如果你使用 --network host,容器将共享宿主机的网络栈,这意味着容器直接使用宿主机的 IP 地址和端口来暴露服务。容器会监听宿主机的 Redis 默认端口(6379),而无需进行端口映射。

    配置命令:

    docker run -d \--restart=always \--privileged=true \--log-opt max-size=100m \--log-opt max-file=2 \--name "$DOCKER_NAME" \--network host \-v "$DIR/redis/conf/redis.conf:/etc/redis/redis.conf" \-v "$DIR/redis/data:/data" \-v /etc/localtime:/etc/localtime \redis:6 redis-server /etc/redis/redis.conf --appendonly yes
    
    • 优点
      • 容器共享宿主机的网络,性能较高。
      • 无需显式端口映射,容器与宿主机共享相同的网络。
    • 缺点
      • 容器与宿主机的网络完全共享,可能会有端口冲突,尤其是多个容器或服务同时运行时。
      • 容器的端口与宿主机端口相同,可能存在安全隐患。
  2. Port 映射模式
    如果你希望使用宿主机的特定端口来访问容器内的服务,可以使用 -p 参数进行端口映射。通过这种方式,容器内部的端口(例如 6379)将映射到宿主机的另一个端口(例如 6380)。

    配置命令:

    docker run -d \--restart=always \--privileged=true \--log-opt max-size=100m \--log-opt max-file=2 \--name "$DOCKER_NAME" \-p 6380:6379 \-v "$DIR/redis/conf/redis.conf:/etc/redis/redis.conf" \-v "$DIR/redis/data:/data" \-v /etc/localtime:/etc/localtime \redis:6 redis-server /etc/redis/redis.conf --appendonly yes
    

    在这个配置中:

    -p 6380:6379:将宿主机的 6380 端口映射到容器的 6379 端口。你可以通过宿主机的 http://localhost:6380 访问 Redis 服务。

    • 优点
      • 容器共享宿主机的网络,性能较高。
      • 无需显式端口映射,容器与宿主机共享相同的网络。
    • 缺点
      • 容器与宿主机的网络完全共享,可能会有端口冲突,尤其是多个容器或服务同时运行时。
      • 容器的端口与宿主机端口相同,可能存在安全隐患。

五、检查 Redis 容器状态

容器启动后,你可以通过以下命令查看容器状态,确保它在运行中:

docker ps

如果容器未正常运行,可以查看日志进行排查:

docker logs docker-redis

六、访问 Redis 服务

完成上述步骤后,你可以通过客户端连接到 Redis 容器并进行操作。使用 Redis CLI 连接时,需要提供密码:

redis-cli -h localhost -p 6379 -a 123456 # Host 网络模式

其中,localhost 是 Redis 服务所在的宿主机地址,6379 是 Redis 默认的监听端口,123456 是我们设置的密码。

或者如果使用了端口映射:

redis-cli -h localhost -p 6380 -a 123456   # Port 映射模式

总结

通过 Docker 部署 Redis 容器非常简便,并且可以灵活配置各个参数。你可以使用挂载本地目录来管理 Redis 的配置文件、数据文件和日志文件,这样可以确保配置和数据持久化存储。设置密码保护是保障 Redis 安全性的重要措施,推荐通过 redis.conf 配置文件来管理密码。

两种端口配置方式(Host 网络模式和 Port 映射模式)可以根据需求选择。Host 网络模式适合性能要求高的场景,而 Port 映射模式则更灵活且能有效避免端口冲突。

相关文章:

Docker 搭建 Redis 数据库

Docker 搭建 Redis 数据库 前言一、准备工作二、创建 Redis 容器的目录结构三、启动 Redis 容器1. 通过 redis.conf 配置文件设置密码2. 通过 Docker 命令中的 requirepass 参数设置密码 四、Host 网络模式与 Port 映射模式五、检查 Redis 容器状态六、访问 Redis 服务总结 前言…...

MySQL 连表查询:原理、语法与优化

目录 引言 什么是连表查询? 连表查询的类型 1. 内连接(INNER JOIN) 2. 左连接(LEFT JOIN) 3. 右连接(RIGHT JOIN) 4. 全连接(FULL JOIN) 5. 交叉连接(…...

实战技巧:如何快速提高网站收录的权威性?

快速提高网站收录的权威性是一个系统性的工作,涉及内容质量、网站结构、外部链接、用户体验等多个方面。以下是一些实战技巧,可以帮助你快速提升网站收录的权威性: 一、提升内容质量 原创性: 确保网站内容具备高质量与原创性&a…...

vue语法v-model例子单选题和多选题

<template><!-- 单选框 --><input type"radio" v-model"danxuan" value"a"><label for"a">a</label><input type"radio" v-model"danxuan" value"b"><label fo…...

计算机网络面试知识点总结

目录 1. 计算机网络的基本知识点2. OSI 七层模型3. TCP/IP 四层模型4. TCP 和 UDP4.1 TCP 协议4.2 TCP 流量控制4.3 TCP 拥塞控制4.4 TCP 三次握手4.5 TCP 四次挥手4.6 TCP 粘包问题4.7 TCP Socket交互流程4.8 UDP 协议以及和 TCP 协议的不同 5. HTTP协议5.1 HTTP 请求方法以及…...

JVM生产环境问题定位与解决实战(二):JConsole、VisualVM到MAT的高级应用

生产问题定位指南&#xff1a;几款必备的可视化工具 引言 在上一篇文章中&#xff0c;详细的介绍了JDK自带的一系列命令行工具&#xff0c;&#xff0c;如jps、jmap、jstat、jstack以及jcmd等&#xff0c;这些工具为排查和诊断Java虚拟机&#xff08;JVM&#xff09;问题提供…...

c++入门-------命名空间、缺省参数、函数重载

C系列 文章目录 C系列前言一、命名空间二、缺省参数2.1、缺省参数概念2.2、 缺省参数分类2.2.1、全缺省参数2.2.2、半缺省参数 2.3、缺省参数的特点 三、函数重载3.1、函数重载概念3.2、构成函数重载的条件3.2.1、参数类型不同3.2.2、参数个数不同3.2.3、参数类型顺序不同 前言…...

Lua语言入门(自用)

全局与非全局 在lua语言当中没有被local表示的是全局变量 反之则是本地变量(仅仅作用在某个文件,函数,或者代码块) 下面是实例代码和运行结果 --hello.luaA 10;--这样就是全局变量,然后这个编译器如果是大写就是默认的全局变量 local b 3;--这样就是局部变量--reference.…...

大数据开发平台的框架

根据你的需求&#xff0c;以下是从 GitHub 推荐的 10 个可以实现大数据开发平台的项目&#xff1a; 1. Apache Spark Apache Spark 是一个开源的分布式计算框架&#xff0c;适用于大规模数据处理和分析。它提供了强大的数据处理能力&#xff0c;支持实时数据处理、机器学习和…...

X86_64位下的GS寄存器

在 64 位模式下&#xff0c;段机制通常&#xff08;但不是完全&#xff09;被禁用&#xff0c;从而创建一个平坦的 64 位线性地址空间。处理器将 CS、DS、ES、SS 的段基地址视为零&#xff0c;从而创建一个与有效地址相等的线性地址。FS 和 GS 段是例外。这些段寄存器&#xff…...

#6【TIP2023】Dif-Fusion

📜 Dif-Fusion: Toward High Color Fidelity in Infrared and Visible Image Fusion With Diffusion Models 🍸 源码:https://github.com/GeoVectorMatrix/Dif-Fusion 🍺 前向扩散过程 前向过程看成是逐步加噪的Markov链,在每一个时间步 t t t ,...

科普:“git“与“github“

Git与GitHub的关系可以理解为&#xff1a;Git是一种软件工具&#xff0c;而GitHub则是一个在线平台&#xff0c;它们是“一家子”。二者的关联最直接体现在你通过Git在GitHub仓库中clone软件包到你的机器中来。 具体来说&#xff1a; 一、Git 定义&#xff1a;Git是一个开源的…...

unplugin-vue-components,unplugin-auto-import,借用ai去学习

好的&#xff0c;我现在需要帮助用户理解他们提供的这段Vite配置代码。用户之前已经询问过关于ElementPlusResolver的导入问题&#xff0c;现在他们展示了在vite.config.ts中使用该解析器的具体配置。我需要逐步分析这段代码&#xff0c;并解释每个部分的作用。 首先&#xff…...

蓝桥杯 2013 省 B 翻硬币

题目背景 小明正在玩一个“翻硬币”的游戏。 题目描述 桌上放着排成一排的若干硬币。我们用 * 表示正面&#xff0c;用 o 表示反面&#xff08;是小写字母&#xff0c;不是零&#xff09;&#xff0c;比如可能情形是 **oo***oooo&#xff0c;如果同时翻转左边的两个硬币&…...

【硬件设计】DDR3、DDR4、DDR5、DDR6性能对比与硬件设计要点

目录 一、各代DDR技术核心性能指标对比 二、各代DDR技术特性详解 三、硬件设计通用原则与差异化需求 四、技术演进趋势总结 一、各代DDR技术核心性能指标对比 指标DDR3DDR4DDR5DDR6&#xff08;预测&#xff09;发布时间2007年2014年2020年预计2026年5传输速率800-1600 MT…...

生成式AI核心技术:扩散模型原理与实战优化

一、数学原理与算法演进 前向扩散过程&#xff1a; 通过T次迭代逐渐添加高斯噪声&#xff0c;β_t遵循cosine调度策略&#xff0c;保证信号平滑湮灭 反向去噪过程&#xff1a; 使用U-Net结构预测噪声&#xff0c;DDPM论文证明可通过简化损失函数实现稳定训练&#xff1a; …...

从网络基础到安全防护:网安运维小白的入门学习路线

今天的主题是给网络安全运维小白的学习建议。 事情是这样的&#xff0c;最近有一位想学网安&#xff08;偏向网络运维&#xff09;的新手小白询问我学习的方向和建议。我建议他可以从网络和Linux入手。后来他问了一个我认为非常有价值的问题&#xff1a;“网络部分到底是指什么…...

Python 进阶特性深度解析:从语法糖到内存管理的统一视角

生成式(推导式)的用法与内存效率分析 Python 的推导式不仅仅是语法糖,它们在内存管理和性能方面有着深刻的影响。理解推导式的工作原理,有助于我们写出更高效的代码。 推导式的内存模型分析 列表推导式在 CPython 解释器中的实现实际上比等价的 for 循环更为高效: # 列…...

Linux DMA Engine 基础

1 DMA基础信息查看 /sys/class/dma root:~# ls /sys/class/dma/ dma0chan0 dma1chan10 dma1chan27 dma2chan14 dma2chan30 dma2chan47 dma2chan63 dma3chan21 dma3chan38 dma3chan54 dma0chan1 dma1chan11 dma1chan28 dma2chan15 dma2chan31 dma2chan48 dma2…...

【JavaEE】SpringMVC 请求传参

目录 一、请求二、传递单个参数三、传递多个参数四、传递对象五、RequestParam注解 后端参数重命名&#xff08;后端参数映射&#xff09;六、传递数组七、传递集合&#xff0c;RequestParam八、传递JSON数据8.1 JSON字符串和Java对象互转8.1.1 Test注解8.1.2 Java对象转JSON8.…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

初探Service服务发现机制

1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能&#xff1a;服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源&#xf…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...