Redis作为高性能的内存数据库,在缓存、会话存储、消息队列等场景中应用广泛。传统安装方式需要手动编译或通过包管理器安装,而容器化部署只需一条命令即可获得开箱即用的Redis服务。Docker的轻量级特性让Redis实例的创建、销毁和迁移变得极其灵活,特别适合以下场景:
Redis官方维护的Docker镜像提供多个版本标签:
redis:latest - 最新稳定版redis:6.2 - 特定主版本redis:6.2-alpine - 基于Alpine Linux的轻量版本对于生产环境,建议锁定具体版本号避免意外升级。开发环境可使用alpine版本节省磁盘空间:
bash复制docker pull redis:6.2-alpine
最简启动方式会使用默认配置:
bash复制docker run --name myredis -d redis
这将在后台启动一个容器,暴露6379端口,使用匿名卷存储数据。但实际使用时需要关注以下参数:
-p 6379:6379:端口映射(主机端口:容器端口)-v ./redis-data:/data:数据卷挂载--restart unless-stopped:自动重启策略完整示例:
bash复制docker run --name myredis \
-p 6379:6379 \
-v $(pwd)/redis-data:/data \
-d redis:6.2-alpine
默认配置不适合生产环境,应挂载自定义redis.conf:
bash复制docker run --name myredis \
-v $(pwd)/redis.conf:/usr/local/etc/redis/redis.conf \
-v redis-data:/data \
redis:6.2-alpine \
redis-server /usr/local/etc/redis/redis.conf
关键配置项建议:
code复制bind 0.0.0.0
protected-mode no
requirepass yourpassword
appendonly yes
maxmemory 1gb
maxmemory-policy allkeys-lru
Docker需要显式设置内存限制以避免OOM:
bash复制docker run --name myredis \
--memory 1g \
--memory-swap 1g \
--cpus 2 \
-d redis
重要提示:Redis的maxmemory应小于Docker内存限制,建议预留20%作为缓冲区
创建专属网络提升安全性:
bash复制docker network create redis-net
docker run --name myredis \
--network redis-net \
-d redis
Redis 6+支持ACL,建议创建受限用户:
code复制# redis.conf
user default off
user deployer on >password +@all ~*
启动时通过环境变量设置密码:
bash复制docker run --name myredis \
-e REDIS_PASSWORD=yourpassword \
-d redis:6.2-alpine \
redis-server --requirepass ${REDIS_PASSWORD}
| 方式 | 触发条件 | 恢复速度 | 数据完整性 |
|---|---|---|---|
| RDB | 定时/手动SAVE | 快 | 可能丢失 |
| AOF | 每条写命令实时记录 | 慢 | 完整 |
推荐组合方案:
code复制save 900 1
save 300 10
appendonly yes
appendfsync everysec
命名卷更适合生产环境:
bash复制docker volume create redis-data
docker run --name myredis \
-v redis-data:/data \
-d redis
备份方法示例:
bash复制docker exec myredis redis-cli SAVE
docker cp myredis:/data/dump.rdb ./backup/
启动主节点:
bash复制docker run --name redis-master \
-p 6379:6379 \
-d redis:6.2-alpine \
redis-server --appendonly yes
启动从节点并关联:
bash复制docker run --name redis-replica \
-p 6380:6379 \
-d redis:6.2-alpine \
redis-server --appendonly yes --replicaof redis-master 6379
官方提供cluster模式启动脚本:
bash复制docker run -it --rm \
-v $(pwd)/cluster-config:/usr/local/etc/redis \
redis:6.2-alpine \
redis-cli --cluster create \
172.17.0.1:7000 172.17.0.1:7001 \
172.17.0.1:7002 172.17.0.1:7003 \
172.17.0.1:7004 172.17.0.1:7005 \
--cluster-replicas 1
通过redis-cli获取运行状态:
bash复制docker exec -it myredis redis-cli INFO
关键监控指标:
used_memory:内存使用量connected_clients:客户端连接数instantaneous_ops_per_sec:QPSkeyspace_hits/keyspace_misses:缓存命中率查看实时日志:
bash复制docker logs -f myredis
推荐日志配置:
code复制# redis.conf
logfile /var/log/redis/redis.log
loglevel notice
通过volumes挂载日志目录:
bash复制docker run --name myredis \
-v $(pwd)/redis-logs:/var/log/redis \
-d redis:6.2-alpine
检查列表:
docker ps | grep redisdocker port myredisiptables -L -nbind 0.0.0.0典型优化措施:
maxmemory并设置合理淘汰策略KEYS *命令,改用SCAN示例docker-compose.yml:
yaml复制version: '3.8'
services:
redis:
image: redis:6.2-alpine
ports:
- "6379:6379"
volumes:
- redis-data:/data
environment:
- REDIS_PASSWORD=yourpassword
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 3
volumes:
redis-data:
启动命令:
bash复制docker-compose up -d
示例StatefulSet配置片段:
yaml复制apiVersion: apps/v1
kind: StatefulSet
metadata:
name: redis
spec:
serviceName: redis
replicas: 3
template:
spec:
containers:
- name: redis
image: redis:6.2-alpine
ports:
- containerPort: 6379
volumeMounts:
- name: redis-data
mountPath: /data
args: ["redis-server", "--appendonly", "yes"]
volumeClaimTemplates:
- metadata:
name: redis-data
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 1Gi