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 eth02. 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.conf4. 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: bridge4.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_password5. 运维监控与问题排查
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 性能优化建议
对于写密集型应用,考虑以下配置:
appendfsync everysec no-appendfsync-on-rewrite yes auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb网络优化:
sysctl -w net.core.somaxconn=65535 sysctl -w vm.overcommit_memory=1监控方案建议:
- 使用Redis Exporter + Prometheus + Grafana
- 配置报警规则监控内存使用、连接数等关键指标
6. 安全加固措施
必须设置强密码:
requirepass参数禁用危险命令:
rename-command FLUSHDB "" rename-command FLUSHALL "" rename-command CONFIG ""限制网络访问:
- 使用Docker网络隔离
- 配置防火墙规则
- 考虑使用SSL/TLS加密
定期备份策略:
# RDB备份 docker exec redis-server redis-cli -a your_password SAVE # AOF备份 cp /data/appendonly.aof /backup/版本更新策略:
- 定期检查安全公告
- 测试新版本兼容性
- 使用滚动更新策略:
docker-compose pull docker-compose up -d