云服务器和VPS的完整Docker清理指南
本文将全面介绍如何安全有效地清理 Docker 容器、镜像和卷。本指南包含实用技巧和安全准则。.

云服务器和VPS的完整Docker清理指南

本文将逐步讲解 Docker 清理方法,并包含重要的安全提示和最佳实践。.
0 股票
0
0
0
0

 

为什么 Docker 清理对云服务器和 VPS 至关重要?

定期清理 Docker 容器 防止根分区(/)被填满提升 CI/CD 和 Runner 性能降低脆弱性 在云服务器上,存储成本和 IOPS 可能会增加,因此释放磁盘空间可能至关重要。 成本节约 而且易于管理。.

 

一种通用且安全的清理容器、图像和卷的方法

以下是分步说明,重点在于安全性和备份。在生产环境中进行任何操作之前,务必做好备份并安排维护。.

 

清洁的主要步骤

1. 回顾现状

首先,检查 Docker 容器、镜像、卷和磁盘使用情况的状态,以便做出更安全的决策。.

docker ps
docker ps -a
docker images -a
docker system df
docker volume ls

2. 备份(删除卷之前必须备份)

如果卷中包含重要数据,请务必对其进行备份,或者在提供商的控制面板中使用块存储快照。.

docker run --rm -v my_volume:/data -v $(pwd):/backup alpine tar czf /backup/my_volume_backup.tar.gz -C /data .

3. 删除前停止容器

安全停放容器;如有必要,请谨慎使用强制移除方式。.

docker stop <container_id>
docker rm -f <container_id>

4. 删除容器

您可以删除单个容器或所有已停止的容器。.

docker rm <container_id>
docker container prune
# یا:
docker rm $(docker ps -a -q)

5. 删除图片

未使用的图片或 悬挂 删除。必要时可使用强制删除,但要注意依赖关系。.

docker rmi <image_id_or_tag>
docker rmi $(docker images -a -q)
docker image prune

6. 删除卷

删除卷可能会永久丢失数据。删除卷之前,请务必进行备份或创建快照。.

docker volume rm <volume_name>
docker volume prune
docker system prune --volumes

7. 删除不必要的网络

docker network prune

8. 删除所有内容以释放最大空间

如果您需要回收尽可能多的空间,请使用以下命令,但务必非常小心。.

docker system prune -a --volumes

 

实际案例和场景

场景 1 — 安全清理开发服务器(本地/测试)

要删除由 docker-compose 构建的所有资源,请使用以下命令。.

docker-compose down --rmi all -v --remove-orphans

解释: –rmi 所有 删除由“组合”功能创建的图像, -v 删除卷和 --删除孤立对象 删除孤立容器。.

场景 2 — GitLab CI 运行器和自动化清理

最好在作业结束时或通过 cron 执行定期清理,以便运行程序有足够的空间运行。.

docker system prune -a --volumes -f
0 3 * * * root /usr/bin/docker system prune -a --volumes -f >/dev/null 2>&1

场景 3 — 处理大量图像的 GPU/AI 服务器

机器学习镜像通常体积较大;建议仅保留必要的版本,并对模型使用快照。此外,请在 Dockerfile 中使用正确的分层结构和缓存清除机制。.

RUN apt-get update && apt-get install -y ... && rm -rf /var/lib/apt/lists/*

 

安全提示和最佳实践

以下是降低风险和更好地管理存储空间的实用技巧总结。.

  • 删除卷之前务必先备份。. 对于数据库,请使用 mysqldump、pg_dump 或 snapshot。.
  • 从命令 修剪 生产环境中应谨慎使用,并制定相应的策略和人工审批流程。.
  • 保持卷和图像命名的一致性(例如, 项目环境服务日期).
  • 使用标签可以更好地进行管理: docker ps -a --filter "label=project=myproject""
  • 目录 /var/lib/docker 您可以将其移至单独的卷中,以便于管理。.
  • 使用诸如以下工具进行监控 cadvisor普罗米修斯 设置磁盘空间不足警报至关重要。.
  • 使用诸如此类的工具对图像进行安全扫描 克莱尔琐事 或者 Snyk 完成上述操作,并删除或更新存在漏洞的图像。.

 

生产模式下运行清理程序——检查清单

为降低服务风险,应实施以下检查清单。.

  1. 识别关键图像和体积
  2. 备份和快照准备
  3. 团队通知和维护窗口安排
  4. 如有必要,停止服务或迁移流量。
  5. 按顺序执行删除操作:停止并删除容器、删除冗余镜像、删除卷和网络
  6. 重启服务并检查日志
  7. 清理后监测

 

实用工具和脚本

以下工具和脚本可用于自动执行清理和安全检查。.

  • docker-gc: 用于图像和容器垃圾回收的通用工具。.
  • 特里维/克莱尔: 用于图像安全扫描。.
  • systemd 定时器: 定期运行 docker system prune。.
  • 使用带有日志记录和预运行功能的 bash 脚本,在实际执行前进行测试。.
#!/bin/bash
echo "Dry run: will remove the following images:"
docker images -f dangling=true
read -p "Proceed? y/N" ans
if [[ $ans == "y" ]]; then
  docker image prune -f
fi

 

云基础设施、VPS 和企业服务技巧

在分布式服务器上,请确保清除策略应用于所有节点。对于渲染或人工智能等高负载任务,最好使用独立的存储(例如 NVMe 或块存储),这样移除 Docker 就不会影响其他服务的数据。.

对于专用于交易和游戏的 VPS,保持足够的磁盘空间并定期清理可以减少延迟并改善容器启动。.

如果需要进行复杂或大规模的清理工作,请向相关团队寻求帮助,以便在维护窗口期间执行操作并准备快照。.

 

常见错误及解决方法

  • 错误: 冲突:无法移除仓库引用,因为它已在本地仓库中标记。 解决方案: 移除本地标签或使用 docker rmi -f.
  • 错误: 容器正在使用体积—— 解决方案: 首先,找出占用该容量的容器,并将其停止/移除: docker ps -a --filter volume=.
  • 数据被意外删除: 解决方案:定期备份并使用云服务快照。.

 

结论

定期清理 Docker 容器是维护服务、优化成本和性能的重要组成部分。正确执行识别、备份、停止服务以及安全删除镜像、容器和卷的步骤,可以降低数据损坏和丢失的风险。在具有多个位置的云环境和 VPS 环境中,制定清理策略并实现自动化尤为重要。.

 

联系支持部门并协调维护工作

如果您需要进行大规模清理或为 GitLab CI、runner 或 GPU 服务器设置自动化脚本,您可以联系支持团队执行维护窗口操作并拍摄快照。.

您可能也喜欢