# docker **Repository Path**: micrograils/docker ## Basic Information - **Project Name**: docker - **Description**: Dockerfile Repository. - **Primary Language**: Docker - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-08 - **Last Updated**: 2026-11-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # docker Docker 镜像集合,提供各类应用的开箱即用容器化部署方案。 ## 项目列表 ### AI 编程助手 | 项目 | 说明 | |------|------| | [crush-impetus](crush-impetus/) | Charmbracelet Crush AI 编程助手(OpenCode 的官方继任者,Alpine + 单二进制,轻量) | | [opencode-ultra](opencode-ultra/) | OpenCode AI 编程助手,内置 Impetus(OpenSpec + Superpowers)和 oh-my-openagent(多 Agent 编排) | > 两者选型:`crush-impetus` 轻量、够用就好;`opencode-ultra` 工程化程度更高 > (非 root 运行、健康检查、离线缓存预热、镜像自描述),适合需要多 Agent 编排的场景。 > 上游脉络:OpenCode 于 2025-07 并入 Charm 组织并改名 Crush,原仓库 2025-09 归档; > 但 npm 上的 `opencode-ai` 包仍在持续发布,故本仓库两个镜像均继续维护。 ### WordPress 全家桶 | 项目 | 说明 | |------|------| | [wordpress](wordpress/) | WordPress 基础部署 | | [wp-example](wp-example/) | WordPress Docker Compose 示例 | | [wp-mariadb](wp-mariadb/) | WordPress + MariaDB 组合 | | [wp-nginx](wp-nginx/) | WordPress + Nginx 反向代理 | | [wp-php82](wp-php82/) | WordPress + PHP 8.2 | | [wp-php83](wp-php83/) | WordPress + PHP 8.3 | | [wp-php84](wp-php84/) | WordPress + PHP 8.4 | | [wp-php85](wp-php85/) | WordPress + PHP 8.5 | | [wp-wordpress](wp-wordpress/) | WordPress 核心镜像 | ### Web 应用 | 项目 | 说明 | |------|------| | [discuz](discuz/) | Discuz! 论坛系统 | | [frp](frp/) | frp 内网穿透工具 | | [grails](grails/) | Grails 框架运行环境 | | [grails256](grails256/) | Grails 256 运行环境 | | [h2o](h2o/) | H2O Web 服务器 | | [pukiwiki](pukiwiki/) | PukiWiki Wiki 系统 | | [team-nav](team-nav/) | 团队导航页 | | [ifcard-hub](ifcard-hub/) | 通用容器实例编排服务:一人一套环境,按产品线注入镜像,Traefik 自动路由 | | [ifcard-guard](ifcard-guard/) | 容器实例访问认证与员工自服务(配合 ifcard-hub,Traefik forwardauth) | | [webget](webget/) | Web 资源获取工具 | ### 代理工具 | 项目 | 说明 | |------|------| | [clash-server](clash-server/) | sing-box 服务端:VLESS-WS(nginx 终结 TLS)+ VLESS-Reality,只监听 127.0.0.1,对外交给 nginx | | [clash-client](clash-client/) | mihomo(Clash.Meta)+ MetaCubeXD 本地代理客户端,支持订阅、TUN、Web 面板 | > `clash-server` 出节点、`clash-client` 用节点,两者协议互通,可单独使用。 ## 目录结构 每个子项目目录包含独立的 `Dockerfile`、构建脚本和说明文档,可单独构建和部署。 仓库根只放**命令入口**;被 `source` 的配置与公共库一律放 `lib/`: | 类别 | 文件 | 说明 | |------|------|------| | 配置(被 source) | `lib/global_version.sh` | 公共版本变量(Alpine 各分支) | | 配置(被 source) | `lib/micrograils_version.sh` | 镜像名与 tag 推导 | | 库(被 source) | `lib/docker_publish_lib.sh` | 构建推送公共库:builder 探测 / 平台降级 / 确认 / 推送 | | 工具(被执行) | `lib/alpine_apk_version.sh` | 查 Alpine apk 里的包版本(wp-* 项目用) | | 命令(人跑) | `check_alpine_version.sh` | 检查 / 更新全局 Alpine 版本 | | 命令(人跑) | `check_project_versions.sh` | 批量检查各项目上游版本,可 `--auto-publish` | 项目内的脚本命名也统一: | 脚本 | 职责 | |------|------| | `version.sh` | 版本变量单一来源(被 check / build / publish source) | | `check_version.sh` | 只读检查上游版本(有更新时退出码 1) | | `update_version.sh` | 把新版本写回版本文件(供 `--auto-publish` 调用) | | `publish-docker.sh` | 多架构构建并推送 | | `local-build.sh` | 本地单架构构建 | | `test.sh` | 本地测试 | ## 统一构建发布约定 所有需要构建并推送多架构镜像的项目,**脚本统一命名为 `publish-docker.sh`**,公共逻辑集中在仓库根的 [`lib/docker_publish_lib.sh`](lib/docker_publish_lib.sh),各项目脚本只保留定制部分。 ``` 仓库根/ ├── lib/ # 被 source 的配置与公共库 │ ├── docker_publish_lib.sh │ ├── global_version.sh │ ├── micrograils_version.sh │ └── alpine_apk_version.sh ├── check_alpine_version.sh # 命令:全局 Alpine 版本 ├── check_project_versions.sh # 命令:各项目版本 └── <项目>/publish-docker.sh # 项目定制:镜像 tag、build-arg、版本号解析 ``` 项目脚本的形态: ```bash source "${SCRIPT_DIR}/version.sh" # 项目自有版本定义 source "${SCRIPT_DIR}/../lib/docker_publish_lib.sh" # 公共库 IMAGE_TAGS=("${IMAGE_NAME_VERSION}" "${IMAGE_NAME_LATEST}") BUILD_ARGS=("ALPINE_VERSION=${ALPINE_VERSION}") dp_publish "wp-nginx" "$@" ``` ### builder 选择策略 只走 Docker Engine 28+ 的默认能力,不再兼容更老的引擎。 | 顺序 | builder | 说明 | |------|---------|------| | 1 | `$BUILDER_NAME` | 显式指定(`-b/--builder` 或环境变量) | | 2 | `default` | docker 驱动,本机 buildkit,最快、不额外起容器;多平台 manifest 由它直接导出 | - **要求 Docker Engine 28+**(新装默认启用 containerd image store)。多平台但 daemon 未启用时 直接报错退出,**不会静默降级成单架构**(那会覆盖仓库上同名 tag 的多架构 manifest)。 - 跨架构仍依赖宿主注册的 QEMU binfmt:缺平台时自动尝试 `tonistiigi/binfmt` 注册并重新探测, 仍缺则跳过该平台并明确告警。 ### 常用参数 ```bash ./publish-docker.sh # 构建并推送(交互式会要求确认) ./publish-docker.sh 0.2.0 # 显式指定版本号 ./publish-docker.sh -y # 跳过交互确认 ./publish-docker.sh -n # dry-run,只打印构建命令 ./publish-docker.sh -p linux/amd64 ``` > 注意:依赖 `version.sh` 推导镜像名的项目(`lib/micrograils_version.sh` 依据当前目录推导 `ARTIFACT_ID`), > 请在项目目录内执行脚本。 ### 文档约定:README 与 MAINTENANCE 分开写 每个镜像项目下有两份文档,面向不同读者,不要混写: | 文件 | 面向 | 内容 | |------|------|------| | `README.md` | **使用者**(未来贴到 Docker Hub 的项目描述) | 背景、快速开始、环境变量、数据卷、端口、常见问题、相关链接 | | `MAINTENANCE.md` | **维护者/开发者** | 代码结构、架构说明、设计决策、版本管理、构建与发布、测试、升级步骤 | 两篇末尾互相指路:README 结尾指向 MAINTENANCE,MAINTENANCE 开头指回 README。 ### 批量版本检查与自动升级 仓库根的 [`check_project_versions.sh`](check_project_versions.sh) 会遍历所有子项目, 逐个跑 `check_version.sh` 并汇总: ```bash ./check_project_versions.sh # 只检查 ./check_project_versions.sh --check-all # 忽略项目级跳过开关 ./check_project_versions.sh --only frp,wp-nginx ./check_project_versions.sh --auto-publish # 有更新时自动升级并发布 ./check_project_versions.sh --dry-run # 只打印计划 ``` **开关一:跳过版本检查。** 项目 `version.sh` 里写 `SKIP_VERSION_CHECK=1` 即默认跳过 (自研 / 手工维护 / 已冻结的项目用);`--check-all` 可临时忽略该开关做全量体检。 **开关二:自动升级并发布。** 默认关闭,只有显式 `--auto-publish` 才生效,且仅在 `check_version.sh` 判定「有更新」(退出码非 0)时触发。流程是**两趟**: 先全部检查完 → 列出计划并做**一次总确认** → 再逐个升级并发布(串行,失败自动回滚版本文件)。 **Alpine 基础版本**不在任何项目里(是 `lib/global_version.sh` 的全局配置),单独一个脚本管: ```bash ./check_alpine_version.sh # 对比三个分支的补丁版本(有更新时退出码 1) ./check_alpine_version.sh --update # 写回,末尾自动 git diff 摊开改动给你确认 ``` 数据源依次是 endoflife.date API、Docker Hub tags API、Alpine CDN;分支列表从 `lib/global_version.sh` 自动读出,新增分支不用改脚本。只自动跟**分支内的补丁版本** (3.22.5 → 3.22.7);新的次版本分支(如 3.25)只提示,要不要新增变量、要不要把 `LATEST` 指过去由人决定。 版本写回由项目自带的 `update_version.sh` 负责:写回本项目所有版本文件,并输出一行 `ARTIFACT_VERSION=<新版本>`。有多个版本文件的项目(如 `clash-client`)必须自带该脚本; 没有的项目回落到解析 `check_version.sh` 的 `🔄 : → ` 行, 只回写 `package_version.txt`。 ## 参与贡献 1. Fork 本仓库 2. 新建分支 3. 提交代码 4. 新建 Pull Request