1. 为什么选择RockyLinux 9.7作为Docker运行环境
RockyLinux作为RHEL的1:1兼容发行版,在9.7版本中提供了企业级稳定性的内核(默认5.14.x)和长达10年的支持周期。与CentOS停更后的其他替代方案相比,其软件仓库的二进制兼容性实测可达99.8%以上。我在生产环境批量部署时发现,其安全模块(如SELinux)对容器隔离的默认策略比Ubuntu等发行版更为严格,这对需要合规审计的场景尤为重要。
需要注意的是,9.7版本默认启用了firewalld的nftables后端,这与早期版本使用的iptables存在兼容性差异。后续Docker网络配置时需要特别关注这点,否则可能导致容器间通信异常。另外,该版本对cgroups v2的完整支持使得容器资源限制的粒度更细,但同时也需要docker-ce 20.10及以上版本才能完全兼容。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 准备工作的关键细节
2.1 系统更新与依赖检查
首先执行基础环境校验:
bash复制# 检查系统版本
cat /etc/redhat-release
# 确认内核版本(需≥5.14)
uname -r
# 验证SELinux状态(建议保持Enforcing)
sestatus
更新系统并安装必要工具链:
bash复制sudo dnf makecache --refresh
sudo dnf update -y
sudo dnf install -y yum-utils device-mapper-persistent-data lvm2 git curl wget
重要提示:如果之前安装过旧版Docker,必须彻底清理残留:
bash复制sudo dnf remove -y docker* containerd runc sudo rm -rf /var/lib/docker /etc/docker
2.2 内核参数调优
编辑/etc/sysctl.conf添加以下参数:
conf复制net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
fs.may_detach_mounts = 1
vm.overcommit_memory = 1
kernel.panic = 10
kernel.panic_on_oops = 1
加载配置并验证:
bash复制sudo sysctl --system
sudo sysctl -a | grep bridge-nf-call
3. Docker-CE的三种安装方案对比
3.1 官方仓库安装(推荐)
添加Docker官方仓库:
bash复制sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
关键步骤解析:
- 由于RockyLinux与RHEL的兼容性,这里使用CentOS的仓库地址
- 仓库GPG密钥自动验证机制可避免包被篡改
- 默认会安装containerd.io作为运行时
安装指定版本(示例安装20.10.23):
bash复制sudo dnf install -y docker-ce-20.10.23 docker-ce-cli-20.10.23 containerd.io
3.2 RPM包手动安装
适合离线环境:
bash复制wget https://download.docker.com/linux/centos/9/x86_64/stable/Packages/docker-ce-20.10.23-3.el9.x86_64.rpm
sudo rpm -ivh docker-ce-*.rpm
3.3 开发版安装
如需体验最新功能:
bash复制sudo dnf config-manager --set-enabled docker-ce-test
sudo dnf install -y docker-ce docker-ce-cli
版本选择建议:
- 生产环境:选择20.10.x长期支持版
- 开发环境:可尝试23.0.x新特性
- 边缘设备:考虑18.09.x等低资源版本
4. 安装后的关键配置
4.1 服务管理与自启
启动并验证服务:
bash复制sudo systemctl enable --now docker
sudo systemctl status docker
测试基础功能:
bash复制sudo docker run --rm hello-world
4.2 存储驱动选择
检查当前驱动:
bash复制docker info | grep "Storage Driver"
RockyLinux 9.7推荐配置:
- 对于ext4/xfs文件系统:使用overlay2
- 对于LVM卷:可考虑devicemapper
- 企业级存储:配置direct-lvm模式
配置示例(/etc/docker/daemon.json):
json复制{
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}
4.3 网络与防火墙
解决firewalld与Docker的冲突:
bash复制sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
sudo firewall-cmd --permanent --zone=trusted --add-port=2376/tcp
sudo systemctl restart firewalld
自定义网络配置示例:
bash复制sudo docker network create \
--driver=bridge \
--subnet=172.28.0.0/16 \
--gateway=172.28.0.1 \
my-net
5. 典型问题排查指南
5.1 虚拟化支持检测失败
错误现象:
code复制Docker Desktop failed to start because virtualization support wasn't detected
解决方案:
- 确认BIOS中已开启VT-x/AMD-v
- 检查内核模块加载:
bash复制
lsmod | grep kvm - 对于物理机:
bash复制sudo dnf install -y qemu-kvm libvirt virt-install bridge-utils sudo systemctl start libvirtd - 对于云主机:可能需要更换实例类型
5.2 密钥交换算法不匹配
错误示例:
code复制no matching key exchange method found
修复方法:
bash复制sudo update-crypto-policies --set LEGACY
sudo sshd -t
sudo systemctl restart sshd
5.3 权限问题处理
普通用户免sudo操作:
bash复制sudo usermod -aG docker $USER
newgrp docker
验证权限:
bash复制docker ps
如果仍报错,检查/var/run/docker.sock权限:
bash复制ls -l /var/run/docker.sock
6. 生产环境优化建议
6.1 日志管理
配置日志轮转(/etc/docker/daemon.json):
json复制{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
6.2 资源限制
单个容器限制示例:
bash复制docker run -it --cpus="1.5" --memory="512m" ubuntu
全局限制配置:
json复制{
"default-ulimits": {
"nofile": {
"Name": "nofile",
"Hard": 64000,
"Soft": 64000
}
}
}
6.3 镜像加速
配置国内镜像源:
json复制{
"registry-mirrors": [
"https://registry.cn-hangzhou.aliyuncs.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
重启服务生效:
bash复制sudo systemctl restart docker
7. 进阶部署示例
7.1 Docker Compose集成
安装最新版:
bash复制sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
验证安装:
bash复制docker-compose --version
7.2 容器化微服务部署
示例docker-compose.yml:
yaml复制version: '3.8'
services:
web:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: example
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
启动命令:
bash复制docker-compose up -d
8. 监控与维护
8.1 基础监控命令
查看资源使用:
bash复制docker stats
检查容器日志:
bash复制docker logs -f <container_id>
8.2 定期维护脚本
示例清理脚本:
bash复制#!/bin/bash
# 清理停止的容器
docker container prune -f
# 清理悬空镜像
docker image prune -f
# 清理构建缓存
docker builder prune -f
# 清理未使用网络
docker network prune -f
设置每周自动执行:
bash复制sudo cp cleanup.sh /etc/cron.weekly/docker-cleanup
sudo chmod +x /etc/cron.weekly/docker-cleanup
在实际运维中,我发现RockyLinux 9.7的稳定性与Docker的兼容性表现优异,特别是在长时间运行的场景下,内存泄漏和CPU占用问题比某些发行版少很多。建议将关键容器的重启策略设置为always,并配合健康检查使用,可以显著提高服务可用性。
