DevOps-Bash-tools 的 DockerHub 镜像构建状态页 DOCKER_STATUS.md:生成原理与徽章体系解析
发布时间:2026/10/2 8:16:33来源:尧图网络
DevOps运维CLICI/CD云原生【免费下载链接】DevOps-Bash-tools1200 DevOps Bash Scripts - AWS, GCP, Kubernetes, Docker, CI/CD, APIs, SQL, PostgreSQL, MySQL, Hive, Impala, Kafka, Hadoop, Jenkins, GitHub, GitLab, BitBucket, Azure DevOps, TeamCity, Spotify, MP3, LDAP, Code/Build Linting, pkg mgmt for Linux, Mac, Python, Perl, Ruby, NodeJS, Golang, Advanced dotfiles: .bashrc, .vimrc, .gitconfig, .screenrc, tmux..项目地址https://gitcode.com/GitHub_Trending/de/DevOps-Bash-tools点击查看免费下载本指南以 DOCKER_STATUS.md 为切入点深入讲解 DevOps-Bash-tools 仓库中如何自动生成覆盖 50 个 DockerHub 镜像仓库的构建状态看板并逐段解析其背后的生成脚本 docker/docker_generate_status_page.sh 的工作原理。读完本文你将掌握如何用一条命令生成自己的 DockerHub 状态页、shields.io 徽章的 URL 构成规则、脚本的三种调用方式与参数行为以及与之配套的 DockerHub 搜索、API 查询工具链的使用方法。DOCKER_STATUS.md 是什么DOCKER_STATUS.md是 DevOps-Bash-tools 仓库根目录下的一份自动生成的 Markdown 状态页。它不属于手写文档而是由脚本在每次 CI/CD 构建或本地执行时动态产出用于在一页之内集中展示某个 DockerHub 用户默认是harisekhon名下所有 Docker 镜像仓库的:latest标签的构建状态build status徽章点击可跳转到该镜像在 DockerHub 上的构建历史页面DockerHub 拉取次数pulls徽章点击可跳转到镜像仓库主页。当前页面覆盖50 个 Docker 仓库全部针对:latest标签。文档头部明确说明了两点关键事实该页面由docker_generate_status_page.sh脚本生成页面徽章依赖 shields.io 徽章服务由于该服务响应较慢首次打开时可能有部分徽章加载不出来需要刷新页面一次或多次才能看到全部徽章。这是典型的文档即产物模式把 50 个镜像的健康状态压缩进一个可被 GitHub / GitCode 页面直接渲染的 Markdown 文件任何团队成员打开仓库首页即可一目了然。生成脚本源码剖析docker_generate_status_page.sh生成这份状态页的核心脚本位于 docker/docker_generate_status_page.sh全文不足 90 行却完整实现了仓库枚举 → 徽章拼装 → 写入文件的整条流水线。下面按源码逻辑逐段拆解。1. 环境变量与前置校验set -euo pipefail [ -n ${DEBUG:-} ] set -x srcdir$(cd $(dirname ${BASH_SOURCE[0]}) pwd)脚本启用set -euo pipefail严格模式任何命令失败即退出、未定义变量直接报错、管道中任一环节失败即整体失败。设置DEBUG环境变量可开启set -x跟踪调试。最关键的前置校验在脚本开头if [ -z ${DOCKER_USER:-} ] ; then echo \$DOCKER_USER not set! exit 1 fi也就是说运行该脚本前必须设置DOCKER_USER环境变量否则脚本立即退出。脚本源码注释还解释了原因早期版本曾回退到${USERNAME:-${USER}}即本地系统用户名但这样会因查询到与本机用户同名的其他 DockerHub 用户而产生随机意外结果因此现在强制要求显式声明DOCKER_USER。2. 仓库列表的两种来源repolist$* if [ -z $repolist ]; then repolist$(dockerhub_search.py -n 100 harisekhon | awk /^harisekhon\/.*[[:space:]]\[OK]/{print $1} | sort) fi脚本支持两种获取仓库列表的方式无参数调用自动通过 Python 工具dockerhub_search.py来自配套的 DevOps-Python-tools 仓库本仓库内对应 Shell 版本见 docker/dockerhub_search.sh以harisekhon为关键词搜索 DockerHub-n 100控制返回 100 条结果随后用awk过滤出以harisekhon/开头、且标注[OK]状态的行取仓库名列并排序得到默认的 50 个仓库清单。注意[OK]标记表示该镜像被 DockerHub 标记为自动构建automated build。带参数调用把命令行传入的所有参数原样作为仓库列表。此时脚本不会检查仓库是否存在——不存在的仓库也会照常生成徽章只是页面上徽章会显示repository not found之类的错误状态由 DockerHub/shields.io 侧兜底反馈。3. 自动补全用户名前缀for repo in $repolist; do if ! [[ $repo ~ / ]]; then repo$DOCKER_USER/$repo fi对于不包含/的裸仓库名如hbase脚本自动在前面拼接${DOCKER_USER}/得到完整的harisekhon/hbase形式已经包含/的完整名如SomeOtherCoolGuy/his-repo则保持原样。这意味着你既可以传完整镜像名也可以只传仓库短名。4. 徽章 URL 的拼装规则每个仓库生成三行 Markdownecho [](https://hub.docker.com/r/$repo/builds) echo [](https://hub.docker.com/r/$repo) - echo [$repo](https://hub.docker.com/r/$repo)三行内容分别对应Markdown 元素URL 模式含义Docker Build Status 徽章https://img.shields.io/docker/cloud/build/user/repo.svg展示:latest标签实际是自动构建的当前最新构建的通过/失败状态跳转指向 DockerHub 构建历史页/buildsDockerHub Pulls 徽章https://img.shields.io/docker/pulls/user/repo.svg展示累计拉取次数跳转指向镜像仓库主页仓库文字链接https://hub.docker.com/r/user/repo提供镜像仓库入口值得注意的细节是脚本源码中:latest字样特意用 shellcheck 指令# shellcheck disableSC2016抑制了$展开警告并将:latest以单引号硬编码进页面标题确保标题准确表述仅展示:latest标签的构建状态。5. 输出与落盘} | tee $file整个徽章块通过管道tee同时输出到终端和DOCKER_STATUS.md文件实现边看边写。脚本通过trap echo ERROR 2 exit在异常退出时打印ERROR标记正常完成后trap exit清除该钩子。6. 完整调用示例根据脚本头部注释三种典型用法如下# 用法一生成 DOCKER_USER 名下全部仓库的状态页自动搜索枚举 DOCKER_USERharisekhon ./docker/docker_generate_status_page.sh # 用法二只生成指定完整镜像名的状态页不校验存在性 DOCKER_USERharisekhon ./docker/docker_generate_status_page.sh harisekhon/hbase harisekhon/zookeeper harisekhon/nagios-plugins # 用法三传仓库短名脚本自动补全 DOCKER_USER/ 前缀 DOCKER_USERharisekhon ./docker/docker_generate_status_page.sh hbase zookeeper nagios-plugins注意脚本内部会cd到自身所在目录再执行因此无论从哪个路径调用最终生成的DOCKER_STATUS.md都会落在仓库根目录。50 个 Docker 镜像仓库全景DOCKER_STATUS.md正文完整罗列了 50 个harisekhon/*镜像按用途可归纳为以下几类。每个镜像在页面中均配有构建状态徽章与拉取次数徽章多发行版开发/构建基础镜像* -dev / -github / -java / -scala这些镜像以 Alpine、CentOS、Debian、Ubuntu 为基础系统分别提供开发环境、GitHub Actions 运行环境、Java 环境和 Scala 环境仓库名说明alpine-dev/alpine-githubAlpine 开发镜像 / GitHub CI 基础镜像centos-dev/centos-github/centos-java/centos-scalaCentOS 系开发、GitHub、Java、Scala 镜像debian-dev/debian-github/debian-javaDebian 系开发、GitHub、Java 镜像ubuntu-dev/ubuntu-github/ubuntu-javaUbuntu 系开发、GitHub、Java 镜像tools聚合各类命令行工具的通用工具箱镜像大数据与分布式系统镜像覆盖 Hadoop 生态与流式计算生态每个系统普遍提供基础版 -dev开发版双镜像仓库名说明alluxio/tachyonAlluxioTachyon 为其旧名内存分布式存储apache-drillApache Drill 分布式 SQL 查询引擎hadoop/hadoop-devApache Hadoop 及其开发版hbase/hbase-devApache HBase 列式数据库及其开发版sparkApache Spark 计算引擎presto/presto-dev/presto-cli/presto-cli-devPresto 查询引擎、CLI 客户端及其开发版solr/solrcloud/solrcloud-devApache Solr、SolrCloud 分布式搜索kafkaApache Kafka 消息中间件mesosApache Mesos 资源管理nifiApache NiFi 数据流处理h2oH2O 机器学习平台zookeeper/zookeeper-devZooKeeper 协调服务及其开发版cassandra-devCassandra 开发版基础设施与监控工具镜像仓库名说明consul/consul-devHashiCorp Consul 服务发现及其开发版serfHashiCorp Serf 集群协调工具riak/riak-devRiak KV 分布式数据库rabbitmq-clusterRabbitMQ 集群镜像collectd/tcollector系统指标采集 daemon / Twitter 版采集器jythonJythonJava 平台上的 PythonsupersetApache Superset 数据可视化pytoolsPython 工具集spotify-toolsSpotify API 工具集nagios-plugin-kafka/nagios-pluginsKafka 监控插件 / Nagios 插件全家桶测试专用镜像仓库名说明ci_intentionally_broken_test_do_not_use刻意故意损坏的 CI 测试镜像用于验证状态页能正确展示失败/异常构建状态生产环境不可使用从列表可以看出这套镜像矩阵的设计思路几乎所有主流发行版Alpine/CentOS/Debian/Ubuntu与主流大数据组件Hadoop/HBase/Kafka/Spark/Presto/Solr/ZooKeeper 等都预置了开箱即用的 Docker 镜像而状态页则是对这一整套镜像资产的统一健康看板。配套工具链搜索与 API 查询docker_generate_status_page.sh并非孤立脚本仓库中还有两个直接相关的配套工具dockerhub_search.sh灵活版 docker search无参数调用状态页脚本时底层依赖的仓库枚举逻辑在本仓库有对应的 Shell 实现 docker/dockerhub_search.sh。它基于 Docker Registry 搜索 APIhttps://index.docker.io/v1/search实现弥补了旧版 Docker CLI 只能返回 25 条结果、且无法配置数量的限制。关键参数与行为-l N / --limit N控制返回结果数量默认 25支持任意整数脚本会做is_int校验-v / --verbose输出末尾追加 Results Shown 与 Total Results 统计输出格式对齐docker search仓库名、描述超过 45 字符截断为 42 字符加省略号、Stars、是否官方镜像[OK]标记、是否自动构建[OK]标记分页逻辑page从 1 递增num_pages由首次响应中的.num_pages字段决定直到凑够limit条或翻完所有页。状态页脚本正是利用其输出中的[OK]自动构建标记来过滤出有效仓库列表。dockerhub_api.shDockerHub API v2 通用查询如需对单个镜像做更深入的查询如枚举标签、查看构建记录可使用通用 API 封装 docker/dockerhub_api.sh。它以https://hub.docker.com/v2为基准地址支持通过$DOCKERHUB_USERNAME/$DOCKER_USER等环境变量自动鉴权拿到 JWT token 后自动附加到后续请求可选$DOCKERHUB_2FA_CODE触发二次验证2FA登录换取最终 token自动规范化路径前缀兼容传入带https://hub.docker.com/v2/...完整前缀的路径示例./docker/dockerhub_api.sh /repositories/harisekhon/hbase/tags | jq .即可拉取harisekhon/hbase的全部标签列表。与 STATUS.md 的关系更上游的生成入口在 cicd/generate_status_page.sh 中可以看到更宏观的编排逻辑该脚本调用../github/github_generate_status_page.sh生成 GitHub 仓库状态页再通过../docker/docker_generate_status_page.sh生成 Docker 状态页两者拼接后落盘为 STATUS.md随后再调用 github/github_generate_starcharts.md.sh 生成 STARCHARTS.md。即DOCKER_STATUS.md既是独立产物也是仓库级状态看板体系GitHub 仓库 Docker 镜像双维度中的 Docker 维度来源。当前 STATUS.md 的内容已迁移至外部托管页面但 Docker 状态页仍作为独立文档保留在仓库根目录。常见问题与使用建议徽章加载不全文档已明确说明这是 shields.io 响应慢导致的属正常现象刷新一至数次即可全部加载。这不是脚本缺陷无需排查本仓库代码。DOCKER_USER未设置报错脚本强制要求显式设置该环境变量以避免误用本机用户名查询到同名他人账号。执行前先export DOCKER_USER你的 DockerHub 用户名。生成的仓库列表与你预期不符无参数模式下列表来自 DockerHub 搜索 API 的结果过滤前缀匹配 [OK]自动构建标记搜索结果受 DockerHub 搜索排序影响如需精确固定清单请显式传仓库参数。临时生成少量镜像状态传参模式最实用——只给需要的仓库短名脚本自动补全前缀并立即输出可渲染的徽章 Markdown。小结DOCKER_STATUS.md是一份脚本驱动的活文档其 50 个镜像徽章清单完全由 docker/docker_generate_status_page.sh 通过环境变量、参数解析、前缀补全与 shields.io 徽章 URL 拼装自动产出配合 docker/dockerhub_search.sh、docker/dockerhub_api.sh 构成完整的 DockerHub 查询与展示工具链。理解这份文档等同于掌握了用几十行 Bash 搭建一个可复用的镜像仓库健康看板的完整方法可直接迁移到自己的 DockerHub 账号或 CI 流程中使用。赞分享DevOps运维CLICI/CD云原生【免费下载链接】DevOps-Bash-tools1200 DevOps Bash Scripts - AWS, GCP, Kubernetes, Docker, CI/CD, APIs, SQL, PostgreSQL, MySQL, Hive, Impala, Kafka, Hadoop, Jenkins, GitHub, GitLab, BitBucket, Azure DevOps, TeamCity, Spotify, MP3, LDAP, Code/Build Linting, pkg mgmt for Linux, Mac, Python, Perl, Ruby, NodeJS, Golang, Advanced dotfiles: .bashrc, .vimrc, .gitconfig, .screenrc, tmux..项目地址https://gitcode.com/GitHub_Trending/de/DevOps-Bash-tools点击查看免费下载相关推荐distroless架构解析Bazel构建系统下的镜像生成原理distroless架构解析Bazel构建系统下的镜像生成原理 概述为什么需要Distroless镜像 在传统的Docker镜像构建中我们通常基于完整的云原生moltworker AI Gateway打造可控、可监控的AI服务代理moltworker AI Gateway打造可控、可监控的AI服务代理 moltworker 是一个基于 Cloudflare Workers 运行的人工智能AI Agent后端浏览器控制Atom 构建状态与 CI 体系全览从构建徽章到主干质量监控Atom 构建状态与 CI 体系全览从构建徽章到主干质量监控 本文以 Atom 仓库的 build status.md https://link.gitcod代码编辑器桌面应用开发工具上一篇WindowResizer 强制调整窗口大小终极指南告别焊死的窗口一个工具全搞定下一篇用 IronyModManager 免费解决 Paradox 模组冲突一个工具终结游戏崩溃噩梦创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网