首页 / 资讯中心 / 文章详情

Docker Compose部署Redis:从入门到生产环境优化

Docker Compose部署Redis:从入门到生产环境优化 ★ FEATURED ARTICLE
1. Redis容器化部署背景Redis作为高性能的键值数据库在缓存、会话存储、消息队列等场景中广泛应用。传统物理机或虚拟机安装方式需要手动处理依赖、配置环境变量、设置开机启动等繁琐步骤。而通过Docker Compose部署Redis可以实现一键启动标准化环境版本统一、配置一致快速复制到其他机器开发/测试/生产环境一致资源隔离不污染宿主机环境版本切换便捷只需修改镜像标签我在多个微服务项目中采用这种部署方式实测从零开始到Redis服务可用只需3分钟。下面分享具体实现方案和踩坑经验。2. 环境准备与工具选型2.1 基础环境要求已安装Docker Engine版本≥19.03已安装Docker Compose版本≥1.25磁盘空间≥100MBRedis镜像约30MB验证环境docker --version docker-compose --version2.2 镜像版本选择官方Redis镜像提供多个变体redis:latest- 最新稳定版生产慎用redis:6.2-alpine- 基于Alpine的轻量版推荐开发使用redis:6.2- 完整Debian基础版适合生产环境建议根据场景选择开发测试redis:6.2-alpine资源占用少生产环境redis:6.2稳定性更高3. Compose文件详解创建docker-compose.yml文件version: 3.8 services: redis: image: redis:6.2-alpine container_name: my_redis restart: unless-stopped ports: - 6379:6379 volumes: - ./data:/data environment: - REDIS_PASSWORDyour_strong_password command: redis-server --requirepass $${REDIS_PASSWORD}关键配置说明网络端口映射6379:6379将容器Redis端口映射到宿主机如需修改端口保持右边容器端口不变只改左边宿主机端口数据持久化./data:/data挂载数据目录到宿主机Redis默认将持久化数据保存在容器内的/data目录安全配置通过requirepass设置访问密码密码通过环境变量注入避免硬编码重启策略unless-stopped保证服务异常退出时自动重启4. 服务启动与管理4.1 启动Redis服务docker-compose up -d输出示例Creating network redis_default with the default driver Creating my_redis ... done4.2 验证服务状态docker-compose ps正常状态应显示Name Command State Ports -------------------------------------------------------------------- my_redis docker-entrypoint.sh redis ... Up 0.0.0.0:6379-6379/tcp4.3 连接测试使用Redis CLI测试连接docker exec -it my_redis redis-cli -a your_strong_password成功连接后执行127.0.0.1:6379 ping PONG5. 生产环境优化配置5.1 内存限制在compose文件中添加资源限制deploy: resources: limits: memory: 1G cpus: 0.55.2 持久化配置修改command部分启用AOF持久化command: redis-server --requirepass $${REDIS_PASSWORD} --appendonly yes --appendfsync everysec5.3 多配置文件管理创建自定义配置文件redis.confrequirepass $${REDIS_PASSWORD} appendonly yes maxmemory 1gb修改compose文件挂载配置volumes: - ./data:/data - ./redis.conf:/usr/local/etc/redis/redis.conf command: redis-server /usr/local/etc/redis/redis.conf6. 常见问题排查6.1 端口冲突错误错误现象Error starting userland proxy: listen tcp4 0.0.0.0:6379: bind: address already in use解决方案修改宿主机端口6380:6379或停止占用端口的服务sudo lsof -i :6379找到PID后kill6.2 认证失败错误现象(error) NOAUTH Authentication required检查步骤确认compose文件中的REDIS_PASSWORD值重启服务docker-compose restart进入容器检查配置docker exec -it my_redis cat /usr/local/etc/redis/redis.conf6.3 数据目录权限错误现象Cant open the append-only file: Permission denied解决方法mkdir -p data chmod -R 777 data7. 运维管理命令集7.1 日常维护查看日志docker-compose logs -f redis停止服务docker-compose stop删除容器docker-compose down保留数据卷完全清理docker-compose down -v删除数据卷7.2 备份方案手动备份数据卷docker run --rm --volumes-from my_redis -v $(pwd):/backup alpine \ tar cvf /backup/redis_backup.tar /data定时任务每天2点备份0 2 * * * cd /path/to/compose docker run --rm --volumes-from my_redis -v $(pwd):/backup alpine tar cvf /backup/redis_$(date \%Y\%m\%d).tar /data8. 性能监控方案8.1 内置监控命令docker exec -it my_redis redis-cli -a your_password info重点关注指标used_memory内存使用量connected_clients客户端连接数instantaneous_ops_per_sec每秒操作数8.2 Prometheus监控修改compose文件command: redis-server --requirepass $${REDIS_PASSWORD} --enable-prometheus-exporter yes添加监控端口ports: - 6379:6379 - 9121:9121 # Redis Exporter端口配置Prometheus抓取scrape_configs: - job_name: redis static_configs: - targets: [redis:9121]9. 集群部署方案9.1 主从复制配置修改compose文件实现一主一从services: redis-master: image: redis:6.2-alpine command: redis-server --requirepass $${REDIS_PASSWORD} redis-replica: image: redis:6.2-alpine command: redis-server --requirepass $${REDIS_PASSWORD} --replicaof redis-master 6379 --masterauth $${REDIS_PASSWORD}9.2 Redis Cluster方案需要6个节点3主3从建议使用官方cluster模式services: redis-node1: image: redis:6.2-alpine command: redis-server --cluster-enabled yes # 其他5个节点配置类似...初始化集群docker-compose exec redis-node1 \ redis-cli --cluster create \ redis-node1:6379 redis-node2:6379 \ redis-node3:6379 redis-node4:6379 \ redis-node5:6379 redis-node6:6379 \ --cluster-replicas 110. 安全加固建议禁用危险命令command: redis-server --requirepass $${REDIS_PASSWORD} --rename-command FLUSHDB --rename-command FLUSHALL --rename-command CONFIG 网络隔离networks: redis-internal: internal: true定期轮换密码docker-compose exec redis redis-cli -a old_password CONFIG SET requirepass new_password
阅读完成 · 觉得有帮助?
咨询建站