博客目录
一、Docker Compose 部署 Redis 的核心优势
二、基础部署配置
2.1 项目目录结构
2.2 基础 docker-compose.yml
2.3 环境变量文件(.env)
三、生产环境部署方案
3.1 完整配置示例
四、高级集群配置
4.1 Redis 主从复制
4.2 Redis 哨兵模式
五、安全加固方案
5.1 安全配置示例
5.2 网络隔离配置
六、监控与维护
6.1 Prometheus 监控集成
6.2 备份策略实现
七、性能优化建议
7.1 资源限制配置
7.2 内核参数优化
7.3 持久化策略
八、日常运维管理
8.1 常用命令
8.2 版本升级流程
8.3 故障排查指南
一、Docker Compose 部署 Redis 的核心优势 Docker Compose 为 Redis 部署提供了比单纯使用docker run更强大的管理能力,主要体现在以下几个方面:
声明式配置管理:所有服务参数通过 YAML 文件定义,实现配置即代码 多服务协同部署:轻松实现 Redis 与应用程序、监控系统的集成部署 环境变量支持:敏感信息与配置分离,提高安全性 快速环境重建:一键完成整个 Redis 集群的停止、重建和启动 版本控制集成:docker-compose.yml 文件可纳入 Git 等版本控制系统
二、基础部署配置 2.1 项目目录结构 推荐的标准目录布局:
redis-project/
├── docker-compose.yml
├── config/
│ └── redis.conf
├── data/
│ └── redis/
└── .env
2.2 基础 docker-compose.yml
version: "3.8"
services:
redis:
image: redis:7.0
container_name: redis-server
ports:
- "6379:6379"
volumes:
- ./data/redis:/data
- ./config/redis.conf:/usr/local/etc/redis/redis.conf
command: redis-server /usr/local/etc/redis/redis.conf
restart: unless-stopped
2.3 环境变量文件(.env)
REDIS_PASSWORD=your_strong_password_here
REDIS_PORT=6379
三、生产环境部署方案 3.1 完整配置示例
version: "3.8"
services:
redis:
image: redis:7.0
container_name: production_redis
environment:
- REDIS_PASSWORD=${REDIS_PASSWORD}
- TZ=Asia/Shanghai
ports:
- "${REDIS_PORT}:6379"
volumes:
- redis_data:/data
- ./config/redis.conf:/usr/local/etc/redis/redis.conf:ro
networks:
- redis_network
deploy:
resources:
limits:
cpus: "2"
memory: 4G
healthcheck:
test:
[
"CMD",
"redis-cli",
"--no-auth-warning",
"-a",
"${REDIS_PASSWORD}",
"ping",
]
interval: 30s
timeout: 5s
retries: 3
volumes:
redis_data:
driver: local
driver_opts:
type: none
device: ./data/redis
o: bind
networks:
redis_network:
driver: bridge
四、高级集群配置 4.1 Redis 主从复制
services:
redis-master:
image: redis:7.0
command: redis-server --requirepass ${REDIS_PASSWORD} --appendonly yes
ports:
- "6379:6379"
volumes:
- master_data:/data
redis-replica:
image: redis:7.0
command: >
redis-server --requirepass ${REDIS_PASSWORD}
--masterauth ${REDIS_PASSWORD}
--replicaof redis-master 6379
--appendonly yes
depends_on:
- redis-master
volumes:
- replica_data:/data
volumes:
master_data:
replica_data:
4.2 Redis 哨兵模式
services:
redis-master:
image: redis:7.0
command: redis-server --requirepass ${REDIS_PASSWORD} --appendonly yes
networks:
- redis-net
redis-replica:
image: redis:7.0
command: >
redis-server --requirepass ${REDIS_PASSWORD}
--masterauth ${REDIS_PASSWORD}
--replicaof redis-master 6379
--appendonly yes
depends_on:
- redis-master
networks:
- redis-net
redis-sentinel1:
image: redis:7.0
command: redis-sentinel /sentinel.conf
volumes:
- ./sentinel1.conf:/sentinel.conf
depends_on:
- redis-master
networks:
- redis-net
networks:
redis-net:
driver: bridge
五、安全加固方案 5.1 安全配置示例
services:
redis:
image: redis:7.0
user: "999:999"
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
environment:
- REDIS_PASSWORD=${REDIS_PASSWORD}
command: >
redis-server
--requirepass ${REDIS_PASSWORD}
--rename-command FLUSHDB ""
--rename-command FLUSHALL ""
--rename-command CONFIG ""
volumes:
- ./tls:/tls
5.2 网络隔离配置
networks:
redis_internal:
internal: true
redis_external:
driver: bridge
services:
redis:
networks:
- redis_internal
app:
networks:
- redis_internal
- redis_external
六、监控与维护 6.1 Prometheus 监控集成
services:
redis:
image: redis:7.0
command: redis-server --enable-prometheus-metrics
ports:
- "6379:6379"
- "9121:9121"
depends_on:
- redis-exporter
redis-exporter:
image: oliver006/redis_exporter
ports:
- "9121:9121"
environment:
- REDIS_ADDR=redis://redis:6379
- REDIS_PASSWORD=${REDIS_PASSWORD}
prometheus:
image: prom/prometheus
ports:
- "9090:9090"
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
6.2 备份策略实现
services:
redis:
# ...原有配置...
volumes:
- redis_data:/data
- ./backups:/backups
redis-backup:
image: redis:7.0
depends_on:
- redis
volumes:
- ./backups:/backups
command: >
sh -c 'while true; do
sleep 86400;
redis-cli -h redis -a $${REDIS_PASSWORD} --rdb /backups/dump-$$(date +%Y%m%d).rdb;
done'
environment:
REDIS_PASSWORD: ${REDIS_PASSWORD}
七、性能优化建议 7.1 资源限制配置
services:
redis:
deploy:
resources:
limits:
cpus: "4"
memory: 8G
reservations:
memory: 4G
environment:
- MAXMEMORY=6gb
- MAXMEMORY_POLICY=allkeys-lru
7.2 内核参数优化
services:
redis:
sysctls:
- net.core.somaxconn=65535
- vm.overcommit_memory=1
privileged: true
7.3 持久化策略
services:
redis:
command: >
redis-server
--save 900 1
--save 300 10
--save 60 10000
--appendonly yes
--appendfsync everysec
--auto-aof-rewrite-percentage 100
--auto-aof-rewrite-min-size 64mb
八、日常运维管理 8.1 常用命令 启动所有服务:
docker-compose up -d
查看服务日志:
docker-compose logs -f redis
执行 Redis CLI:
docker-compose exec redis redis-cli -a ${REDIS_PASSWORD}
8.2 版本升级流程 备份现有数据 修改 docker-compose.yml 中的镜像版本 执行滚动更新:
docker-compose pull redis
docker-compose up -d --force-recreate redis
验证数据完整性 8.3 故障排查指南 检查服务状态:
docker-compose ps
docker-compose top redis
分析性能问题:
docker-compose exec redis redis-cli --latency
docker-compose exec redis redis-cli INFO STATS