Ubuntu 22.04(WSL2)使用Docker安装Redis
本教程将指导您在运行于WSL2的Ubuntu 22.04上通过Docker安装Redis 7.4.3。您将获得一个配置了自定义设置、持久化存储和安全选项的Redis实例。
前提条件
- WSL2上已安装Ubuntu 22.04。
- WSL2上已安装并运行Docker,确保Docker守护进程已启动。
- 熟悉基本的终端命令。
步骤1:创建Redis目录
为了确保数据持久化和配置管理,创建用于存储Redis数据和配置文件的目录。
# /home/redis/data:存储Redis数据文件(如dump.rdb、appendonly.aof)
# /home/redis/conf:存储Redis配置文件
mkdir -p /home/redis/data /home/redis/conf
步骤2:准备Redis配置文件
在/home/redis/conf
目录下创建redis.conf
文件,内容如下。每个参数均附带注释说明其作用。
sudo touch redis.conf
chmod -R 777 /home/redis/*
# 允许来自任何IP地址的连接,WSL2网络需要此设置
bind 0.0.0.0
# 设置认证密码,替换your_password为强密码
requirepass your_password
# 禁用保护模式以允许外部连接
protected-mode no
# TCP连接队列长度,建议值511
tcp-backlog 511
# 客户端空闲超时时间(秒),0表示无限制
timeout 0
# TCP保活时间(秒),检测客户端连接状态
tcp-keepalive 300
# 是否以守护进程方式运行,Docker环境设置为no
daemonize no
# 是否启用系统监督,Docker环境设置为no
supervised no
# 日志级别,notice为标准信息级别
loglevel notice
# 日志文件路径,空字符串表示输出到标准输出
logfile ""
# 数据库数量,默认为16,此处设置为30
databases 30
# 是否在启动时显示Redis logo
always-show-logo yes
# 快照保存策略:900秒内至少1次更改触发
save 900 1
# 快照保存策略:300秒内至少10次更改触发
save 300 10
# 快照保存策略:60秒内至少10000次更改触发
save 60 10000
# 后台保存失败时是否停止写入
stop-writes-on-bgsave-error yes
# 是否启用RDB文件压缩
rdbcompression yes
# 是否在RDB文件中启用校验和
rdbchecksum yes
# RDB文件名
dbfilename dump.rdb
# 数据文件存储目录,映射到容器/data
dir /data
# 主从复制中,从节点是否提供过期数据
replica-serve-stale-data yes
# 从节点是否为只读
replica-read-only yes
# 是否启用无磁盘同步
repl-diskless-sync no
# 是否禁用TCP_NODELAY,影响延迟和吞吐量
repl-disable-tcp-nodelay no
# 从节点优先级,用于主节点选举
replica-priority 100
# 是否启用惰性删除以释放内存
lazyfree-lazy-eviction no
# 是否在键过期时启用惰性删除
lazyfree-lazy-expire no
# 是否在删除服务端键时启用惰性删除
lazyfree-lazy-server-del no
# 是否在从节点刷新时启用惰性删除
replica-lazy-flush no
# 是否启用追加日志文件(AOF)持久化
appendonly yes
# AOF文件名
appendfilename "appendonly.aof"
# 是否在AOF重写时禁用fsync
no-appendfsync-on-rewrite no
# AOF自动重写触发百分比
auto-aof-rewrite-percentage 100
# AOF自动重写最小大小
auto-aof-rewrite-min-size 64mb
# 是否加载截断的AOF文件
aof-load-truncated yes
# 是否在AOF中使用RDB前缀
aof-use-rdb-preamble yes
# Lua脚本执行时间限制(毫秒)
lua-time-limit 5000
# 慢查询日志最大条目数
slowlog-max-len 128
# 键空间事件通知,空字符串表示禁用
notify-keyspace-events ""
# Hash数据结构使用ziplist的键最大数量
hash-max-ziplist-entries 512
# Hash数据结构使用ziplist的值最大长度
hash-max-ziplist-value 64
# List数据结构使用ziplist的最大大小
list-max-ziplist-size -2
# List数据结构压缩深度
list-compress-depth 0
# Set数据结构使用intset的最大条目数
set-max-intset-entries 512
# Zset数据结构使用ziplist的键最大数量
zset-max-ziplist-entries 128
# Zset数据结构使用ziplist的值最大长度
zset-max-ziplist-value 64
# HyperLogLog稀疏表示的最大字节数
hll-sparse-max-bytes 3000
# Stream节点最大字节数
stream-node-max-bytes 4096
# Stream节点最大条目数
stream-node-max-entries 100
# 是否启用主动重哈希
activerehashing yes
# 服务器运行频率(Hz),影响性能
hz 10
# 是否启用动态Hz调整
dynamic-hz yes
# 是否启用AOF重写的增量fsync
aof-rewrite-incremental-fsync yes
# 是否启用RDB保存的增量fsync
rdb-save-incremental-fsync yes
# 最大内存限制,1GB(1073741824字节)
maxmemory 1073741824
# 内存满时淘汰策略:使用LRU算法淘汰所有键
maxmemory-policy allkeys-lru
步骤3:运行Redis Docker容器
使用以下Docker命令启动Redis容器,加载指定的配置和卷挂载。
# -d:后台运行容器
# --name redis:容器命名为redis
# -p 6379:6379:映射主机端口6379到容器端口6379
# --restart unless-stopped:容器自动重启,除非手动停止
# -v /home/redis/data:/data:挂载主机数据目录到容器/data
# -v /home/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf:挂载配置文件
# redis:7.4.3:使用Redis 7.4.3镜像
# redis-server /usr/local/etc/redis/redis.conf:使用指定配置文件启动Redis
docker run -d --name redis -p 6379:6379 --restart unless-stopped \-v /home/redis/data:/data \-v /home/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf \redis:7.4.3 redis-server /usr/local/etc/redis/redis.conf
步骤4:验证安装
-
检查容器是否正在运行:
# 显示运行中的容器列表 docker ps
您应该看到
redis
容器在列表中。 -
使用
redis-cli
连接到Redis:# 进入容器并启动redis-cli docker exec -it redis redis-cli
-
使用密码认证:
# 使用配置文件中的密码进行认证 AUTH your_password
-
测试Redis功能,设置并获取一个键:
# 设置键值对 SET testkey "Hello, Redis!" # 获取键值 GET testkey
如果成功,将输出
"Hello, Redis!"
。
步骤5:从主机访问Redis
由于WSL2的网络配置复杂,您可能需要获取WSL2实例的IP地址以从Windows主机连接。
-
查看WSL2的IP地址:
# 显示eth0网卡的IP地址 ip addr show eth0 | grep inet
找到IP地址(如
172.18.0.1
)。
当然,如果跟之前的一样,windows操作系统的
C:\Users\Administrator\.wslconfig
配置了networkingMode=mirrored
,我们也可以直接使用127.0.0.1
或者是localhost
。
- 在Windows主机上使用
redis-cli
或Redis客户端连接到<WSL2_IP>:6379
,并使用密码认证。
故障排除
-
容器无法启动:
查看日志:
# 显示容器日志 docker logs redis
确保
redis.conf
文件权限正确:# 设置配置文件权限 chmod 644 /home/redis/conf/redis.conf
-
连接问题:确认6379端口未被防火墙阻止,且
redis.conf
中设置了bind 0.0.0.0
。 -
权限错误:
确保/home/redis
目录对Docker用户可写:# 设置目录权限(测试用) chmod -R 777 /home/redis
结论
您已在Ubuntu 22.04(WSL2)上通过Docker成功运行Redis 7.4.3实例,配置了持久化存储、安全密码和内存限制。此设置适用于开发或小型生产环境。如需进一步自定义,请参考Redis官方文档。