背景

我们公司系统采用微服务架构,每次提交代码自动利用Jenkins构建成Docker镜像推送到Harbor私服,然后部署到K8S环境。

我们的持续集成环境Jenkins、Nexus和Harbor都部署在一台服务器上。

问题

过年放假回来,我发现Jenkins构建非常慢。

分析过程

首先,我怀疑是不是硬盘满了。通过df -h命令查看

文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root  496G  489G  6.4G   99% /
devtmpfs                 2.9G     0  2.9G    0% /dev
tmpfs                    2.9G     0  2.9G    0% /dev/shm
tmpfs                    2.9G  306M  2.6G   11% /run
tmpfs                    2.9G     0  2.9G    0% /sys/fs/cgroup
/dev/sda1               1014M  142M  873M   14% /boot
overlay                  496G  489G  6.4G   99% /var/lib/docker/overlay2/ae9d672f614f6d2e7a436ca4d29fb56d892675cc8bbd9d244f460683dad8b87f/merged
overlay                  496G  489G  6.4G   99% /var/lib/docker/overlay2/5a79a3cdecd5ca7c2840b0846f6736d3de6b7da0a4d4d81652a9b15af9c46370/merged
overlay                  496G  489G  6.4G   99% /var/lib/docker/overlay2/614b70e0b3e9782fbe218d2aad9d748cc02c7768feab9976c13eea2e23164921/merged
overlay                  496G  489G  6.4G   99% /var/lib/docker/overlay2/a49a997083f6ae89b6c0a537ec35f26fec88705597b6227724d6d510dd1a1ad3/merged
overlay                  496G  489G  6.4G   99% /var/lib/docker/overlay2/08893dcc508e8a3277b3124ad77e4f1753fd72491172b5fd7d347244b27564ee/merged
overlay                  496G  489G  6.4G   99% /var/lib/docker/overlay2/df52246abd100df2df119ba23dd1482b85d0a34fb1f6cfc8a0a95cc9da5e84ed/merged
overlay                  496G  489G  6.4G   99% /var/lib/docker/overlay2/1dc0e6d16a354a1aeaa0340401fd8cae89047da1d68bb8aedb15f655e47d61d6/merged
shm                       64M  4.0K   64M    1% /var/lib/docker/containers/794b6ee5914330556c9cfef46d514beb7dd43b957d473ccf17b219381dd4249a/mounts/shm
shm                       64M     0   64M    0% /var/lib/docker/containers/5e15b0dc478dd229db5f1fa1dbc3c042fab306bb956ec117edbba8c1403e38d5/mounts/shm
shm                       64M     0   64M    0% /var/lib/docker/containers/f88e6312f68139a03c138117e53f9ce4dff46677bd2fd238a0650d7baeec20f0/mounts/shm
shm                       64M     0   64M    0% /var/lib/docker/containers/7d6ffd81852c8c4f0c4036880f9cb7563c2ee71ae287cac6927ae142db74c390/mounts/shm
shm                       64M     0   64M    0% /var/lib/docker/containers/740c664fa12d2be7c51196b9531f3854b9446199ee8f24d634ec24c6fe43f37d/mounts/shm
shm                       64M     0   64M    0% /var/lib/docker/containers/5017ce1922b22c6054edc167b6c1112bc1cd9d188ebab77b14f0aaf0db60409e/mounts/shm
shm                       64M     0   64M    0% /var/lib/docker/containers/2fe712ff7df3ce8beb2d7f047a825555ae138aeac9b4daef84de40257a6e8573/mounts/shm
overlay                  496G  489G  6.4G   99% /var/lib/docker/overlay2/8c1dff4865db5f2e175cf57b9056a0848750c431f968c65ea7560b9a7f4c4384/merged
shm                       64M     0   64M    0% /var/lib/docker/containers/acdc2754e191cded34d8f25f0d22199c48e2ae08d666eeed8d814daceed206a0/mounts/shm
tmpfs                    581M     0  581M    0% /run/user/0

的确是硬盘满了,整个硬盘占用99%,这其中/var/lib/docker/overlay2…占用空间最大。

overlay2存储的都是镜像层数据,网上搜索都说是image过多。

我再通过docker system df命令查看

TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              59                  8                   8.099GB             7.53GB (92%)
Containers          8                   8                   954.9kB             0B (0%)
Local Volumes       274                 5                   70.37kB             70.34kB (99%)
Build Cache         0                   0                   0B

Images占用不足8G。

我再使用docker images输出所有镜像,汇总所有images的SIZE显示有30G,和docker system df输出数据对不上,但也没有490G。

我前面怀疑服务器镜像过多,尝试好长时间,清理镜像占用的空间,发现效果不佳。接下来,我直接查看整个服务器硬盘。

服务器根目录运行 df -h * 查看每个目录占用空间,结果显示/data/registry/docker/registry/v2/blobs目录占用空间接近350G

registry说明是镜像仓库占用空间大。

我们私服采用Harbor,Harbor Web端显示仓库里面的镜像并不多,大概60个,每个约100M,大约6G。和实际占用空间对不上。

通过查资料,发现是我们系统持续集成推送的tag一直不变的问题

我们系统持续集成,每个微服务推送镜像tag都是latest。所以Harbor Web显示镜像不多,但磁盘充满历史镜像。具体参考Harbor历史镜像清理问题

解决方法

Harbor没有提供机制自动清理,需要手动利用registry镜像清理。

注意registry要2.7.1以上版本才能清理同一个tag标签的历史镜像。

清理命令如下,

docker run -it --name gc --rm --volumes-from registry goharbor/registry-photon:v2.7.1-patch-2819-2553-v1.9.4 garbage-collect -m /etc/registry/config.yml

注意:上述命令依赖一个名称是registry且正在运行的goharbor/registry-photon容器。

可以把上述命令做成bash脚本,crontab定时清理。

0 1 * * * /home/local/clean-docker.sh

经验总结

1、找到问题根源很重要。前面没找到硬盘满根源,通过表象就去寻找解决方案,浪费很多时间。

2、要敢于尝试。我找到上面”清理命令“时,由于作者环境不一样及没有说明怎么用和自己担心弄坏集成环境,不敢尝试。后面找到garbage-collect的–dry-run参数才敢尝试。

Docker私服硬盘满问题相关推荐

  1. 本地搭建docker私服

    #######################本地搭建docker私服registry####################### #执行命令 docker run -d -p 5000:5000 ...

  2. docker harbor 域名_超详细的搭建docker私服Harbor教程

    概述 "集装箱"是Docker设计哲学之所在,它让一台物理机(或者虚拟机)同时运行多个相互隔离的应用变得更为轻松简朴,固然这一切照样多亏Linux的相关底层手艺,固然,也包罗OS ...

  3. 【4】搭建Docker私服harbor

    搭建Docker私服harbor 一.harbor官网地址 harbor官网地址: https://goharbor.io/github官网地址: https://github.com/goharbo ...

  4. docker 私服搭建以及镜像部署

    2019独角兽企业重金招聘Python工程师标准>>> Docker 私服 意义 企业搭建私服主要是镜像的安全性考虑与镜像的内网传输速度,或者有内网无法访问外网的现实情况 步骤 搜索 ...

  5. 【linux】【docker】docker私服安装

    前言 系统环境:Centos7.jdk1.8 docker私服:可以把项目通过dockerfile文件build成docker镜像,供其他环境拉取.部署在本地,私有化. 安装 dockerHUB私服 ...

  6. CentOS7构建docker私服管理镜像

    使用私有仓库管理镜像 很多场景下,需要使用docker私服管理镜像.相比Docker Hub 私有仓库有以下优势: 节省带宽,对于私有仓库已有的镜像无需从Docker Hub 上下载,秩序从私有仓库中 ...

  7. 搭建Docker私服

    docker-compose.yml version: '3.1' services:registry: image: registry restart: alwayscontainer_name: ...

  8. DevOps实战系列【第六章】:详解Docker私服Nexus3篇

    个人亲自录制全套DevOps系列实战教程 :手把手教你玩转DevOps全栈技术 概述/目标 私服我们很熟悉了,比如docker hub就是官方私服,而有些情况比如我们自建的镜像,不想往外传,就需要考虑 ...

  9. DevOps实战系列【第八章】:详解Jenkins集成Docker私服Nexus3

    个人亲自录制全套DevOps系列实战教程 :手把手教你玩转DevOps全栈技术 Jenkins集成Docker镜像仓库 docker私服已经搭建完毕,下边我们期望jenkins做的事是: ①通过git ...

最新文章

  1. AI十年进阶:一段算法能力演进的历史
  2. linux yum 安装mysql_Linux下使用yum安装MySQL
  3. 12月7日学习内容整理:ORM单表操作
  4. java1.8 lambda进行并行运算
  5. 推荐系统论文DSIN:Deep Session Interest Network
  6. 关于Elemet-ui组件Cascader中proper的配置问题
  7. Autofac的AOP面向切面编程研究
  8. spring mvc学习(5):IDEA修改背景颜色大全
  9. 【Webpack】TypeError: Cannot read property ‘tap‘ of undefined at HtmlWebpackPlugin.
  10. 西安中学2021文科高考成绩查询,2021年西安重点高中名单及排名,西安高中高考成绩排名榜...
  11. uni-app 对接企业微信登录
  12. 一道九宫格算法面试题
  13. 玉米社:SEM竞价推广转化成本高?做好细节转化率蹭蹭往上涨
  14. Dev 与 Ops 互怼 | 科普一下 DevOps
  15. 工业产品类计算机绘图师,全国计算机绘图师考试试题汇总.pdf
  16. uview——switch开关 列表修改状态
  17. 回顾2020迎接2021,云客致用户的一封信
  18. # HenCoder Android 自定义 View 1-8 硬件加速
  19. 在win7下删除Windows服务的方法
  20. JAVA中常用api学习思维导图

热门文章

  1. [渝粤教育] 西南科技大学 管理运筹学与系统分析 在线考试复习资料
  2. Android定位,百度SDK,百度定位
  3. DMPC-PEG-丙烯酸/柠檬酸/双膦酸/酯化胆酸/氨基乙酸/乙二胺四甲叉膦酸/苯硼酸
  4. 百合网站的模拟IE外挂
  5. Android livedata原理解析之自己实现一个简单的LiveData
  6. 视频教程-Scratch3.0趣味编程L2-边玩边学轻松探索-其他
  7. 时间系列模型——三次指数平滑法
  8. anyHouse-iOS 高仿ClubHouse
  9. 通过Maven插件wagon-maven-plugin实现快速部署SpringBoot项目至服务器
  10. 2021-07-08 斜率