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 映射模式则更灵活且能有效避免端口冲突。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ Primer 容器适配器

欢迎阅读我的 【CPrimer】专栏 专栏简介:本专栏主要面向C初学者,解释C的一些基本概念和基础语言特性,涉及C标准库的用法,面向对象特性,泛型特性高级用法。通过使用标准库中定义的抽象设施,使你更加适应高级…

git上传gitee仓库---简单方便

安装完git以后 在资源管理器中右键: 选择Open Git Bash here 接着gitclone,从gitee上面复制链接: https://gitee.com/hekai666/python-deeplearning.git 粘贴过来: 回车: 然后在本地就会多出来一个文件: 打开文件夹以…

C语言(13)------------>do-while循环

1.do-while循环的语法 我们知道C语言有三大结构,顺序、选择、循环。我们可以使用while循环、for循环、do-while循环实现循环结构。之前的博客中提及到了前两者的技术实现。可以参考: C语言(11)------------->while循…

浏览器JS打不上断点,一点就跳到其他文件里。浏览器控制台 js打断点,指定的位置打不上断点,一打就跳到其他地方了。

关闭JavaScript 源代码映射,F12开发者模式 设置->偏好设置->源代码/来源->JavaScript 源代码映射。 肯定不是这个原因导致的,但这个办法可以暂时解决问题,点完这个东西就隐藏了webpack,有懂的来讲讲。 又浪费一个小时…

C++ 编程语言简介

C 是一种通用编程语言,它是作为 C 语言的增强而开发的,以包含面向对象的范例。它是一种命令式和编译语言。 C 是一种高级的通用编程语言,专为系统和应用程序编程而设计。它由贝尔实验室的 Bjarne Stroustrup 于 1983 年开发,作为…

山东大学软件学院nosql实验三

实验题目: 用Java做简单查询(2学时) 实验内容 用API方式,做简单查询。 实验要求 在以下要求中选择至少2个,使用Java语言实现数据查询,最终把数据输出到前端界面。 (1)找出年龄小于20岁的所有学生 &…

【NLP 38、激活函数 ④ GELU激活函数】

别盲目,别着急,慢慢走,没事的 —— 25.2.24 一、定义与数学表达式 GELU(Gaussian Error Linear Unit,高斯误差线性单元)是一种结合概率分布的非线性激活函数,其核心思想是通过输入值服从标准正…

突破性能极限:DeepSeek开源FlashMLA解码内核技术解析

引言:大模型时代的推理加速革命 在生成式AI大行其道的今天,如何提升大语言模型的推理效率已成为行业焦点。DeepSeek团队最新开源的FlashMLA项目凭借其惊人的性能表现引发关注——在H800 GPU上实现580 TFLOPS计算性能,这正是大模型推理优化的…

touchgfx的工作机制

touchgfx的工作机制 一.MVP软件架构 MVP的全称为Model-View-Presenter Model: 就是数据部分,在整个touchgfx应用中,只有一个Model类实例对象,它为所有的Screen屏幕界面服务,可以理解成是一个全局变量区,同时它还负责和后端系统通信 View: 就是UI界面部分,对应于View类,在整…

网站搭建wp

前置准备工作 需要下载Git,note.js,在官网上可以搜索并安装 搭建过程 这里借助hexo工具 1. 本地博客搭建 首先创建本地文件夹,并在该文件夹里面创建一个叫做hexo的文件夹在该文件夹中选择Git Bash 进入hexo官网将五条指令用bash运行运行…

现场可以通过手机或者pad实时拍照上传到大屏幕的照片墙现场大屏电子照片墙功能

现场可以通过手机或者pad实时拍照上传到大屏幕的照片墙现场大屏电子照片墙功能,每个人都可以通过手机实时拍照上传到大屏幕上,同时还可以发布留言内容,屏幕上会同步滚动播放展示所有人的照片和留言。相比校传统的照片直播功能更加灵活方便,而…

MySQL 主从复制原理及其工作过程

一、MySQL主从复制原理 MySQL 主从复制是一种将数据从一个 MySQL 数据库服务器(主服务器,Master)复制到一个或多个 MySQL 数据库服务器(从服务器,Slave)的技术。以下简述其原理,主要包含三个核…

【蓝桥杯单片机】第十三届省赛第二场

一、真题 二、模块构建 1.编写初始化函数(init.c) void Cls_Peripheral(void); 关闭led led对应的锁存器由Y4C控制关闭蜂鸣器和继电器 2.编写LED函数(led.c) void Led_Disp(unsigned char ucLed); 将ucLed取反的值赋给P0 开启锁存器 关闭锁存…

Android Coil3缩略图、默认占位图placeholder、error加载错误显示,Kotlin(3)

Android Coil3缩略图、默认占位图placeholder、error加载错误显示,Kotlin(3) Android Coil3缩略图、默认占位图placeholder、error加载错误显示,Kotlin(1)-CSDN博客文章浏览阅读667次,点赞18次&…

MariaDB 历史版本下载地址 —— 筑梦之路

MariaDB 官方yum源里面只有目前在维护的版本,而有时候对于老项目来说还是需要老版本的rpm包,国内很多镜像站都是同步的官方仓库,因此下载老版本也不好找,这里主要记录下从哪里可以下载到历史版本的MariaDB rpm包。 1. 官方归档网…

RoCBert:具有多模态对比预训练的健壮中文BERT

摘要 大规模预训练语言模型在自然语言处理(NLP)任务上取得了最新的最优结果(SOTA)。然而,这些模型容易受到对抗攻击的影响,尤其是对于表意文字语言(如中文)。 在本研究中&#xff0…

20250212:https通信

1:防止DNS劫持:使用 https 进行通信。 因为是SDK授权开发,需要尽量压缩so库文件和三方依赖。所以第一想法是使用 head only 的 cpp-httplib 进行开发。 cpp-httplib 需要 SSL 版本是 3.0及以上。但本地已经在开发使用的是1.0.2a版本,不满足需求。 方案1:升级OpenSSL 将Op…

数据驱动未来!天合光能与永洪科技携手开启数字化新篇章

在信息化时代的今天,企业间的竞争早就超越了传统产品与服务的范畴,新的核心竞争力即——数据处理能力和信息技术的应用。作为数据技术领域的领军者,永洪科技凭借其深厚的技术积累和丰富的行业经验,成功助力天合光能实现数字化升级…

Android之图片保存相册及分享图片

文章目录 前言一、效果图二、实现步骤1.引入依赖库2.二维码生成3.布局转图片保存或者分享 总结 前言 其实现在很多分享都是我们自定义的,更多的是在界面加了很多东西,然后把整个界面转成图片保存相册和分享,而且现在分享都不需要第三方&…

政安晨的AI大模型训练实践 十一 - 基于千问的Qwen2.5-VL-3B-Instruct 多模态模型进行微调参数认知 2

政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正! 微调一个大模型要准备的背景知识还是很多的。 本节我们介绍训练阶段的一些主要参数。 这是训…