Docker Redis Setup

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 V2(推荐)
docker compose up -d

# 或使用旧版
docker-compose up -d

4. 验证部署

1
2
3
4
5
# 查看容器状态
docker compose ps

# 测试 Redis 连接
docker compose exec redis redis-cli -a $REDIS_PASS ping

🐳 Docker Swarm 部署

1. 初始化 Swarm(如果尚未初始化)

1
docker swarm init

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
docker compose exec redis redis-cli -a $REDIS_PASS

# 或使用 Docker
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
# 不暴露端口,仅内部网络访问
# ports:
# - "6379:6379"

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. 内存不足

调整 maxmemorymaxmemory-policy 配置。

3. 数据丢失

确保启用了持久化(appendonly yes)并定期备份数据。

📚 参考资源

0%