1. Docker启动Redis概述
Redis作为当前最流行的内存数据库之一,在缓存、消息队列等场景中广泛应用。而Docker作为轻量级容器化技术,能够快速部署和运行Redis服务。通过Docker启动Redis,我们可以避免复杂的编译安装过程,实现秒级启动和版本切换。
在实际生产环境中,我经常使用Docker部署Redis集群。相比传统部署方式,Docker方案具有以下优势:
- 环境隔离:每个Redis实例运行在独立容器中
- 快速部署:一条命令即可完成Redis服务启动
- 版本管理:轻松切换不同Redis版本
- 资源控制:可精确配置CPU、内存等资源
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 准备工作
2.1 Docker环境安装
在启动Redis容器前,需要确保已正确安装Docker引擎。以Ubuntu系统为例:
bash复制# 更新软件包索引
sudo apt-get update
# 安装依赖包
sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 设置稳定版仓库
echo \
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Docker引擎
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 验证安装
sudo docker run hello-world
注意:生产环境建议使用特定版本而非最新版,以避免兼容性问题。
2.2 Redis镜像获取
Docker Hub提供了官方Redis镜像,我们可以直接拉取:
bash复制# 拉取最新版Redis镜像
docker pull redis
# 拉取特定版本(如6.2)
docker pull redis:6.2
镜像拉取完成后,可以通过以下命令查看:
bash复制docker images | grep redis
3. 启动Redis容器
3.1 基础启动命令
最简单的启动方式:
bash复制docker run --name my-redis -d redis
这个命令会:
- 创建名为my-redis的容器
- 使用后台模式运行(-d)
- 使用默认配置启动Redis服务
3.2 常用参数配置
实际生产环境中,我们通常需要自定义配置:
bash复制docker run --name my-redis \
-p 6379:6379 \
-v /myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-v /myredis/data:/data \
-d redis \
redis-server /usr/local/etc/redis/redis.conf
参数说明:
-p 6379:6379:端口映射,主机端口:容器端口-v /myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf:挂载自定义配置文件-v /myredis/data:/data:持久化数据目录挂载
3.3 内存限制设置
为防止Redis占用过多内存,可以设置内存限制:
bash复制docker run --name my-redis \
--memory 1g \
--memory-swap -1 \
-d redis \
redis-server --maxmemory 512mb --maxmemory-policy allkeys-lru
这里:
--memory 1g:容器最多使用1GB物理内存--memory-swap -1:允许使用交换空间--maxmemory 512mb:Redis实例最大使用512MB--maxmemory-policy allkeys-lru:内存满时的淘汰策略
4. Redis配置详解
4.1 常用配置项
以下是生产环境常用的Redis配置:
conf复制# 绑定IP地址
bind 0.0.0.0
# 保护模式
protected-mode no
# 端口
port 6379
# 超时设置
timeout 0
# 日志级别
loglevel notice
# 数据库数量
databases 16
# 持久化设置
save 900 1
save 300 10
save 60 10000
# 最大内存
maxmemory 1gb
# 内存淘汰策略
maxmemory-policy volatile-lru
4.2 配置文件挂载
将配置文件挂载到容器中:
bash复制# 创建本地配置目录
mkdir -p /myredis/conf
# 下载默认配置文件
wget http://download.redis.io/redis-stable/redis.conf -O /myredis/conf/redis.conf
# 修改配置
sed -i 's/^bind 127.0.0.1/bind 0.0.0.0/' /myredis/conf/redis.conf
sed -i 's/^protected-mode yes/protected-mode no/' /myredis/conf/redis.conf
# 启动容器
docker run --name my-redis \
-v /myredis/conf/redis.conf:/usr/local/etc/redis/redis.conf \
-d redis \
redis-server /usr/local/etc/redis/redis.conf
5. 持久化方案
5.1 RDB持久化
RDB是Redis默认的持久化方式,配置示例:
conf复制# 900秒内至少1个key变化则触发保存
save 900 1
# 300秒内至少10个key变化
save 300 10
# 60秒内至少10000个key变化
save 60 10000
# RDB文件名称
dbfilename dump.rdb
# 工作目录
dir /data
5.2 AOF持久化
AOF提供更可靠的持久化:
conf复制# 开启AOF
appendonly yes
# AOF文件名
appendfilename "appendonly.aof"
# 同步策略
appendfsync everysec
# AOF重写时是否同步
no-appendfsync-on-rewrite no
# 自动重写触发条件
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
5.3 数据目录挂载
为确保数据安全,必须挂载数据目录:
bash复制docker run --name my-redis \
-v /myredis/data:/data \
-d redis \
redis-server --appendonly yes
6. 安全配置
6.1 密码认证
在redis.conf中配置:
conf复制requirepass yourstrongpassword
启动时指定密码:
bash复制docker run --name my-redis \
-d redis \
redis-server --requirepass yourstrongpassword
连接时使用密码:
bash复制redis-cli -a yourstrongpassword
6.2 网络隔离
建议使用自定义网络:
bash复制# 创建网络
docker network create redis-net
# 启动容器
docker run --name my-redis \
--network redis-net \
-d redis
7. 性能优化
7.1 内存优化
conf复制# 使用jemalloc内存分配器
jemalloc-bg-thread yes
# 关闭透明大页
disable-thp yes
# 设置内存碎片整理
activedefrag yes
7.2 内核参数调整
bash复制# 设置overcommit_memory
echo 1 > /proc/sys/vm/overcommit_memory
# 增加TCP backlog
sysctl -w net.core.somaxconn=65535
8. 监控与维护
8.1 常用监控命令
bash复制# 查看Redis信息
docker exec -it my-redis redis-cli info
# 监控命令执行
docker exec -it my-redis redis-cli monitor
# 查看慢查询
docker exec -it my-redis redis-cli slowlog get
8.2 日志查看
bash复制# 查看容器日志
docker logs my-redis
# 实时日志
docker logs -f my-redis
9. 常见问题解决
9.1 连接问题排查
bash复制# 检查端口监听
docker exec my-redis netstat -tulnp | grep 6379
# 测试连接
docker exec -it my-redis redis-cli ping
9.2 性能问题排查
bash复制# 查看Redis统计信息
docker exec -it my-redis redis-cli info stats
# 查看内存使用
docker exec -it my-redis redis-cli info memory
9.3 数据恢复
从RDB文件恢复:
bash复制# 停止Redis
docker stop my-redis
# 复制备份文件
cp /myredis/data/dump.rdb /myredis/data/dump.rdb.bak
# 启动Redis
docker start my-redis
10. 生产环境建议
根据多年运维经验,生产环境部署Redis容器时应注意:
- 资源限制:必须设置内存和CPU限制
- 持久化:至少使用RDB+AOF一种持久化方式
- 监控:配置Prometheus+Granfa监控体系
- 备份:定期备份RDB和AOF文件
- 高可用:考虑使用Redis Sentinel或Cluster
示例生产环境启动命令:
bash复制docker run --name redis-prod \
--memory 4g \
--cpus 2 \
-p 6379:6379 \
-v /data/redis/conf:/usr/local/etc/redis \
-v /data/redis/data:/data \
--restart unless-stopped \
-d redis:6.2 \
redis-server /usr/local/etc/redis/redis.conf \
--requirepass 'ComplexPassword123!' \
--appendonly yes \
--maxmemory 3gb \
--maxmemory-policy volatile-lru
