Docker Redis 部署指南
本文介绍如何使用 Docker 和 Docker Compose 部署 Redis 服务。Redis 是一个高性能的内存键值存储系统,常用于缓存、消息队列和会话存储。
📋 前置要求
- Docker 20.10+ 已安装
- Docker Compose V2 已安装(推荐)或 Docker Compose V1
- 如需使用 Docker Swarm,需要初始化 Swarm 集群
🚀 快速部署(Docker Compose)
1. 克隆项目(如果使用项目模板)
1 2
| git clone https://github.com/noahzaozao/docker-redis.git cd docker-redis
|
2. 配置环境变量
1 2
| cp .env-trunk .env vi .env
|
编辑 .env 文件,设置 Redis 密码:
1
| REDIS_PASS=your_strong_password_here
|
3. 使用 Docker Compose 部署
1 2 3 4 5
| docker compose up -d
docker-compose up -d
|
4. 验证部署
1 2 3 4 5
| docker compose ps
docker compose exec redis redis-cli -a $REDIS_PASS ping
|
🐳 Docker Swarm 部署
1. 初始化 Swarm(如果尚未初始化)
2. 配置环境变量
1 2 3
| cp .env-trunk .env vi .env REDIS_PASS=your_strong_password_here
|
3. 部署 Stack
1
| docker stack deploy -c docker-compose.yml stack_redis
|
4. 查看服务状态
1 2
| docker stack services stack_redis docker service logs stack_redis_redis
|
📝 Docker Compose 配置示例
基础配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| version: '3.8'
services: redis: image: redis:7-alpine container_name: redis command: redis-server --requirepass ${REDIS_PASS} ports: - "6379:6379" volumes: - redis_data:/data restart: unless-stopped healthcheck: test: ["CMD", "redis-cli", "--raw", "incr", "ping"] interval: 30s timeout: 10s retries: 3
volumes: redis_data:
|
生产环境配置(带持久化)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| version: '3.8'
services: redis: image: redis:7-alpine container_name: redis command: > redis-server --requirepass ${REDIS_PASS} --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru ports: - "6379:6379" volumes: - redis_data:/data - ./redis.conf:/usr/local/etc/redis/redis.conf restart: unless-stopped healthcheck: test: ["CMD", "redis-cli", "-a", "${REDIS_PASS}", "ping"] interval: 30s timeout: 10s retries: 3
volumes: redis_data:
|
Docker Swarm 配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| version: '3.8'
services: redis: image: redis:7-alpine command: redis-server --requirepass ${REDIS_PASS} ports: - "6379:6379" volumes: - redis_data:/data deploy: replicas: 1 restart_policy: condition: on-failure delay: 5s max_attempts: 3 networks: - redis_network
volumes: redis_data:
networks: redis_network: driver: overlay
|
🔧 常用操作
连接 Redis
1 2 3 4 5
| docker compose exec redis redis-cli -a $REDIS_PASS
docker exec -it redis redis-cli -a your_password
|
查看 Redis 信息
1
| docker compose exec redis redis-cli -a $REDIS_PASS INFO
|
查看日志
1
| docker compose logs -f redis
|
备份数据
1 2 3 4 5
| docker compose exec redis redis-cli -a $REDIS_PASS BGSAVE
docker compose exec redis redis-cli -a $REDIS_PASS SAVE
|
重启服务
1
| docker compose restart redis
|
🔐 安全配置建议
1. 使用强密码
确保 .env 文件中的密码足够复杂:
1
| REDIS_PASS=$(openssl rand -base64 32)
|
2. 限制网络访问
生产环境建议不暴露端口,或使用防火墙限制:
1 2 3 4 5 6
|
networks: - internal_network
|
3. 使用 Redis 配置文件
创建 redis.conf:
1 2 3 4 5 6
| requirepass your_strong_password bind 127.0.0.1 protected-mode yes maxmemory 256mb maxmemory-policy allkeys-lru appendonly yes
|
4. 启用 TLS(生产环境)
1 2 3 4 5 6 7
| command: > redis-server --tls-port 6380 --port 0 --tls-cert-file /tls/redis.crt --tls-key-file /tls/redis.key --tls-ca-cert-file /tls/ca.crt
|
📊 监控与维护
查看内存使用
1
| docker compose exec redis redis-cli -a $REDIS_PASS INFO memory
|
查看连接数
1
| docker compose exec redis redis-cli -a $REDIS_PASS INFO clients
|
清理过期键
1
| docker compose exec redis redis-cli -a $REDIS_PASS --scan --pattern "*" | xargs redis-cli -a $REDIS_PASS DEL
|
🐛 常见问题
1. 连接被拒绝
- 检查密码是否正确
- 确认容器是否正常运行:
docker compose ps - 检查端口是否被占用:
netstat -tuln | grep 6379
2. 内存不足
调整 maxmemory 和 maxmemory-policy 配置。
3. 数据丢失
确保启用了持久化(appendonly yes)并定期备份数据。
📚 参考资源