1. 为什么需要彻底重装Docker-CE?
最近在排查一个容器网络异常问题时,发现现有Docker环境存在残留配置冲突。作为运维老手,我决定对测试环境的CentOS7服务器进行Docker-CE的彻底重装。这种"推倒重来"的操作在以下场景特别必要:
- 升级大版本时出现依赖冲突(比如从18.06升级到20.10)
- 配置文件被误修改导致服务异常
- 存储驱动需要从devicemapper切换为overlay2
- 磁盘空间被占满需要清理镜像缓存
重要提示:生产环境请谨慎操作,务必先备份/var/lib/docker目录!
2. 完整卸载流程解析
2.1 停止并清理运行中的容器
首先确保所有容器服务已停止:
bash复制# 停止所有运行中的容器
docker stop $(docker ps -aq)
# 删除所有容器(包括已停止的)
docker rm $(docker ps -aq)
# 强制删除所有镜像
docker rmi -f $(docker images -q)
2.2 卸载Docker软件包
CentOS7上需要同时移除主包和依赖:
bash复制# 列出已安装的docker相关包
yum list installed | grep docker
# 典型输出示例:
# docker-ce.x86_64 20.10.5-3.el7 @docker-ce-stable
# docker-ce-cli.x86_64 20.10.5-3.el7 @docker-ce-stable
# 执行卸载(根据实际输出调整包名)
sudo yum remove -y docker-ce docker-ce-cli containerd.io
2.3 深度清理残留文件
官方卸载不会删除这些关键目录:
bash复制# 配置文件目录
sudo rm -rf /etc/docker
# 数据存储目录(包含镜像、容器等)
sudo rm -rf /var/lib/docker
# 存储驱动目录
sudo rm -rf /var/lib/containerd
# 旧版docker的socket文件
sudo rm -f /var/run/docker.sock
3. 全新安装最佳实践
3.1 配置官方YUM源
推荐使用国内镜像加速下载:
bash复制# 安装依赖工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加阿里云镜像源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新元数据
sudo yum makecache fast
3.2 选择特定版本安装
生产环境建议锁定版本号:
bash复制# 查看可用版本
yum list docker-ce --showduplicates | sort -r
# 安装指定版本(示例为20.10.9)
sudo yum install -y docker-ce-20.10.9 docker-ce-cli-20.10.9 containerd.io
3.3 关键配置优化
新建daemon.json配置文件:
bash复制sudo mkdir /etc/docker
cat <<EOF | sudo tee /etc/docker/daemon.json
{
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2",
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
4. 服务启动与验证
4.1 启动及开机自启
bash复制sudo systemctl start docker
sudo systemctl enable docker
4.2 健康检查要点
验证核心功能是否正常:
bash复制# 检查服务状态
systemctl status docker
# 测试客户端连接
docker info
# 运行测试容器
docker run --rm hello-world
# 检查存储驱动
docker info | grep "Storage Driver"
# 检查Cgroup驱动
docker info | grep "Cgroup Driver"
5. 常见问题排错指南
5.1 存储驱动切换问题
从devicemapper迁移到overlay2时可能遇到:
code复制Error starting daemon: error initializing graphdriver: /var/lib/docker contains several valid graphdrivers
解决方案:
- 完全备份/var/lib/docker
- 清空目录:
sudo rm -rf /var/lib/docker/* - 重启docker服务
5.2 镜像拉取失败
典型报错:
code复制Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled
处理方法:
- 检查
registry-mirrors配置 - 测试网络连通性:
bash复制
curl -v https://registry-1.docker.io - 临时使用HTTP代理(需符合公司网络策略)
5.3 权限拒绝问题
非root用户操作时报错:
code复制Got permission denied while trying to connect to the Docker daemon socket
永久解决方案:
bash复制sudo usermod -aG docker ${USER}
newgrp docker # 立即生效
6. 维护建议与经验分享
经过多次实战,总结出几个关键经验:
-
磁盘空间监控:定期清理无用镜像
bash复制# 自动清理超过30天的临时镜像 docker system prune -a --filter "until=720h" --force -
版本升级策略:
- 测试环境先验证
- 生产环境采用滚动升级
- 保留旧版本安装包以备回滚
-
配置版本化管理:
- 将/etc/docker/daemon.json纳入Git管理
- 使用Ansible等工具维护配置一致性
-
日志管理技巧:
bash复制# 查看实时日志(调试用) journalctl -u docker.service -f
最后提醒:每次重大变更前,建议使用docker checkpoint保存容器状态。对于有状态服务,务必确保数据卷已正确挂载。