ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

CentOS 10下Docker部署Redis全流程指南

CentOS 10下Docker部署Redis全流程指南

1. 环境准备与基础配置

在VirtualBox中运行CentOS 10并部署Docker环境,需要先完成基础的系统配置。我推荐使用CentOS 10 Minimal镜像进行安装,这样可以减少不必要的资源占用。安装完成后,首先需要确保系统更新到最新状态:

sudo yum update -y sudo yum install -y epel-release

对于VirtualBox的增强功能支持,建议安装以下包来改善虚拟机体验:

sudo yum install -y kernel-devel kernel-headers gcc make perl

注意:安装VirtualBox Guest Additions前,需要确保内核版本与kernel-devel包完全匹配,可以通过uname -r和rpm -q kernel-devel命令验证。

网络配置方面,建议使用桥接模式以获得更好的网络性能。如果遇到网络问题,可以检查以下配置:

sudo nmcli connection modify eth0 ipv4.method auto sudo nmcli connection up eth0

2. Docker环境安装与优化

在CentOS 10上安装Docker需要先添加官方仓库。以下是经过验证的安装步骤:

sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo yum install -y docker-ce docker-ce-cli containerd.io

安装完成后,需要对Docker进行必要的配置优化。创建或修改/etc/docker/daemon.json文件:

{ "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" }, "storage-driver": "overlay2", "storage-opts": [ "overlay2.override_kernel_check=true" ] }

启动Docker并设置开机自启:

sudo systemctl enable --now docker sudo usermod -aG docker $USER

重要提示:执行完用户组修改后,需要完全退出当前会话重新登录才能使权限生效。

3. Redis容器化部署实践

3.1 单容器部署方案

对于简单的开发测试环境,可以直接运行Redis官方镜像:

docker run -d --name redis-server \ -p 6379:6379 \ -v /data/redis:/data \ --restart unless-stopped \ redis:latest \ --requirepass "your_strong_password" \ --appendonly yes

这个命令实现了:

  • 将容器6379端口映射到主机
  • 挂载数据卷实现持久化
  • 设置访问密码
  • 启用AOF持久化模式

3.2 生产环境配置建议

对于生产环境,建议使用自定义配置文件。首先创建配置文件redis.conf:

bind 0.0.0.0 protected-mode yes port 6379 tcp-backlog 511 timeout 0 tcp-keepalive 300 daemonize no supervised systemd pidfile /var/run/redis_6379.pid loglevel notice logfile "" databases 16 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir /data requirepass your_strong_password

然后使用以下命令启动容器:

docker run -d --name redis-production \ -p 6379:6379 \ -v /path/to/redis.conf:/usr/local/etc/redis/redis.conf \ -v /data/redis:/data \ --restart unless-stopped \ --memory 2g \ --cpus 2 \ redis:latest \ redis-server /usr/local/etc/redis/redis.conf

4. Docker Compose编排方案

4.1 基础Compose文件

创建docker-compose.yml文件实现更复杂的部署:

version: '3.8' services: redis: image: redis:latest container_name: redis-server restart: unless-stopped ports: - "6379:6379" volumes: - ./data:/data - ./conf/redis.conf:/usr/local/etc/redis/redis.conf command: redis-server /usr/local/etc/redis/redis.conf environment: - TZ=Asia/Shanghai networks: - redis-net deploy: resources: limits: cpus: '2' memory: 2G networks: redis-net: driver: bridge

4.2 高可用集群配置

对于需要高可用的场景,可以使用Redis Sentinel模式。扩展后的Compose文件:

version: '3.8' services: redis-master: image: redis:latest command: redis-server --appendonly yes --requirepass your_strong_password ports: - "6379:6379" volumes: - ./master-data:/data redis-slave1: image: redis:latest command: redis-server --slaveof redis-master 6379 --masterauth your_strong_password --appendonly yes depends_on: - redis-master volumes: - ./slave1-data:/data redis-slave2: image: redis:latest command: redis-server --slaveof redis-master 6379 --masterauth your_strong_password --appendonly yes depends_on: - redis-master volumes: - ./slave2-data:/data sentinel1: image: redis:latest command: redis-sentinel /usr/local/etc/redis/sentinel.conf volumes: - ./sentinel1.conf:/usr/local/etc/redis/sentinel.conf depends_on: - redis-master - redis-slave1 - redis-slave2 sentinel2: image: redis:latest command: redis-sentinel /usr/local/etc/redis/sentinel.conf volumes: - ./sentinel2.conf:/usr/local/etc/redis/sentinel.conf depends_on: - redis-master - redis-slave1 - redis-slave2 sentinel3: image: redis:latest command: redis-sentinel /usr/local/etc/redis/sentinel.conf volumes: - ./sentinel3.conf:/usr/local/etc/redis/sentinel.conf depends_on: - redis-master - redis-slave1 - redis-slave2

对应的sentinel配置文件示例:

port 26379 sentinel monitor mymaster redis-master 6379 2 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 60000 sentinel auth-pass mymaster your_strong_password

5. 运维监控与问题排查

5.1 常用监控命令

进入Redis容器执行CLI操作:

docker exec -it redis-server redis-cli -a your_strong_password

关键监控命令:

  • INFO- 查看服务器信息
  • CLIENT LIST- 查看客户端连接
  • SLOWLOG GET- 获取慢查询日志
  • MEMORY STATS- 内存使用情况

5.2 常见问题解决

问题1:Docker容器无法启动Redis

  • 检查日志:docker logs redis-server
  • 常见原因:配置文件错误、端口冲突、权限问题
  • 解决方案:修正配置文件,确保6379端口未被占用

问题2:客户端连接超时

  • 检查网络连通性
  • 验证防火墙设置:sudo firewall-cmd --list-all
  • 检查Redis绑定地址和protected-mode配置

问题3:内存不足

  • 调整Docker内存限制
  • 配置Redis最大内存:maxmemory 2gb
  • 设置内存淘汰策略:maxmemory-policy allkeys-lru

5.3 性能优化建议

  1. 对于写密集型应用,考虑以下配置:

    appendfsync everysec no-appendfsync-on-rewrite yes auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb
  2. 网络优化:

    sysctl -w net.core.somaxconn=65535 sysctl -w vm.overcommit_memory=1
  3. 监控方案建议:

    • 使用Redis Exporter + Prometheus + Grafana
    • 配置报警规则监控内存使用、连接数等关键指标

6. 安全加固措施

  1. 必须设置强密码:requirepass参数

  2. 禁用危险命令:

    rename-command FLUSHDB "" rename-command FLUSHALL "" rename-command CONFIG ""
  3. 限制网络访问:

    • 使用Docker网络隔离
    • 配置防火墙规则
    • 考虑使用SSL/TLS加密
  4. 定期备份策略:

    # RDB备份 docker exec redis-server redis-cli -a your_password SAVE # AOF备份 cp /data/appendonly.aof /backup/
  5. 版本更新策略:

    • 定期检查安全公告
    • 测试新版本兼容性
    • 使用滚动更新策略:
      docker-compose pull docker-compose up -d
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进