当前位置: 首页 > 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 映射模式则更灵活且能有效避免端口冲突。

http://www.lryc.cn/news/542140.html

相关文章:

  • MySQL 连表查询:原理、语法与优化
  • 实战技巧:如何快速提高网站收录的权威性?
  • vue语法v-model例子单选题和多选题
  • 计算机网络面试知识点总结
  • JVM生产环境问题定位与解决实战(二):JConsole、VisualVM到MAT的高级应用
  • c++入门-------命名空间、缺省参数、函数重载
  • Lua语言入门(自用)
  • 大数据开发平台的框架
  • X86_64位下的GS寄存器
  • #6【TIP2023】Dif-Fusion
  • 科普:“git“与“github“
  • unplugin-vue-components,unplugin-auto-import,借用ai去学习
  • 蓝桥杯 2013 省 B 翻硬币
  • 【硬件设计】DDR3、DDR4、DDR5、DDR6性能对比与硬件设计要点
  • 生成式AI核心技术:扩散模型原理与实战优化
  • 从网络基础到安全防护:网安运维小白的入门学习路线
  • Python 进阶特性深度解析:从语法糖到内存管理的统一视角
  • Linux DMA Engine 基础
  • 【JavaEE】SpringMVC 请求传参
  • 观察者模式说明(C语言版本)
  • LeetCode 230.二叉搜索树中第K小的元素
  • 11、集合框架
  • git常用指令详解
  • Debezium 报错:“The db history topic is missing” 的处理方法
  • Grok 3.0 Beta 版大语言模型评测
  • AcWing 3691:有向树形态 ← 卡特兰数 + 复旦大学考研机试题
  • 便携式动平衡仪Qt应用层详细设计方案(基于Qt Widgets)
  • SpringBoot源码解析(十一):准备应用上下文
  • CSS 使用white-space属性换行
  • 论文笔记(七十二)Reward Centering(四)