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安装有两种方式:
- Docker自动化安装
- 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
文件,或者手动创建一个。
-
启动临时 Redis 容器来获取配置文件:
docker run --name redis_test -d redis:6
-
复制
redis.conf
文件到本地目录:docker cp redis_test:/usr/local/etc/redis/redis.conf "$DIR/redis/conf/redis.conf"
-
删除临时 Redis 容器:
docker rm -f redis_test
-
在 redis.conf 配置文件中,你可以通过设置 requirepass 来启用密码保护。打开 redis.conf 文件,找到以下配置并取消注释:
requirepass yourpassword
将
yourpassword
替换为你希望设置的密码(例如123456
)。如果你希望修改其他配置(如监听端口),也可以在这个文件中进行修改。常见的 Redis 配置项:
port
:设置 Redis 的监听端口,默认是 6379。bind
:指定 Redis 监听的 IP 地址,确保只允许来自特定 IP 的连接。requirepass
:启用密码保护。
例如,如果你希望将 Redis 监听端口修改为 6380,可以修改配置文件中的
port
配置项:port 6380
-
启动 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 映射模式。
-
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
- 优点
- 容器共享宿主机的网络,性能较高。
- 无需显式端口映射,容器与宿主机共享相同的网络。
- 缺点
- 容器与宿主机的网络完全共享,可能会有端口冲突,尤其是多个容器或服务同时运行时。
- 容器的端口与宿主机端口相同,可能存在安全隐患。
- 优点
-
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 映射模式则更灵活且能有效避免端口冲突。