Skip to main content
Glama
CONTAINER_REGISTRY.md3.96 kB
# 容器发布与运行手册(GHCR) 本手册覆盖从构建、发布、验证到回滚的全流程,并给出性能优化与故障排查建议。所有命令默认在仓库根目录执行。 --- ## 1. 预备条件 - 已配置 `GITHUB_TOKEN`(自动)或具备 `packages:write` 的 PAT。 - Docker 24+ 与 buildx 插件。 - QEMU 已安装(跨架构测试需要)。 - 语义化标签:`vMAJOR.MINOR.PATCH`。 ## 2. 本地构建与测试 ```bash # 单架构构建 docker build -f Dockerfile.example -t ghcr.io/${GITHUB_REPOSITORY}:dev . # 启动并进行健康检查 docker run --rm -p 8000:8000 ghcr.io/${GITHUB_REPOSITORY}:dev --help curl -f http://127.0.0.1:8000/docs ``` ## 3. 多架构构建(不推送) ```bash docker buildx create --name mcp-bx --use docker buildx build \ --file Dockerfile.example \ --platform linux/amd64,linux/arm64 \ --cache-from type=local,src=/tmp/.buildx-cache \ --cache-to type=local,dest=/tmp/.buildx-cache,mode=max \ --tag ghcr.io/${GITHUB_REPOSITORY}:dry-run \ --load . ``` ## 4. GHCR 登录 ```bash echo "${GITHUB_TOKEN}" | docker login ghcr.io -u "${GITHUB_ACTOR:-your-username}" --password-stdin ``` ## 5. 发布流程(CI 等价) ```bash # 假设当前 git tag 为 v1.2.3 docker buildx build \ --platform linux/amd64,linux/arm64 \ --file Dockerfile.example \ --tag ghcr.io/${GITHUB_REPOSITORY}:latest \ --tag ghcr.io/${GITHUB_REPOSITORY}:v1.2.3 \ --tag ghcr.io/${GITHUB_REPOSITORY}:v1.2 \ --tag ghcr.io/${GITHUB_REPOSITORY}:v1 \ --tag ghcr.io/${GITHUB_REPOSITORY}:${GIT_SHA} \ --cache-from type=registry,ref=ghcr.io/${GITHUB_REPOSITORY}:buildcache \ --cache-to type=registry,ref=ghcr.io/${GITHUB_REPOSITORY}:buildcache,mode=max \ --push . ``` ## 6. 发布后验证 - 清单验证:`docker buildx imagetools inspect ghcr.io/${GITHUB_REPOSITORY}:latest` - 冒烟测试: ```bash docker run --rm --platform linux/amd64 ghcr.io/${GITHUB_REPOSITORY}:latest --help docker run --rm --platform linux/arm64 ghcr.io/${GITHUB_REPOSITORY}:latest --help ``` - SBOM/签名:若启用 Cosign,验证 `cosign verify ghcr.io/${GITHUB_REPOSITORY}:latest`。 ## 7. 回滚步骤 1. 拉取上一个稳定版本:`docker pull ghcr.io/${GITHUB_REPOSITORY}:v<prev>` 2. 覆盖 latest:`docker tag ghcr.io/${GITHUB_REPOSITORY}:v<prev> ghcr.io/${GITHUB_REPOSITORY}:latest && docker push ghcr.io/${GITHUB_REPOSITORY}:latest` 3. 更新服务:重新部署指向最新的镜像摘要。 ## 8. 故障排查 - **登录失败**:确认 PAT scope 包含 `write:packages`;检查 SSO 授权。 - **QEMU 架构失败**:重新运行 `docker run --privileged --rm tonistiigi/binfmt --install all`。 - **缓存未命中**:确认 `cache-from` 引用的标签存在;hash key 是否因为 Dockerfile 变更导致。 - **镜像过大**:启用多阶段;删除构建产物与包管理缓存;使用 `docker history` 定位大层。 - **构建超时**:减少并行平台,或在 workflow_dispatch 输入中暂时限制平台。 ## 9. 性能优化建议 - 使用 Registry cache + GHA cache 双层缓存;关键文件变更时重建 key。 - 依赖安装前先 COPY 元数据,最大化缓存命中。 - 使用 `provenance=false` 与 `sbom=true` 平衡元数据体积与可追溯性。 - QEMU 仅在需要跨架构时启用,避免无谓开销。 ## 10. 安全要点 - 不在 Dockerfile 中硬编码 secrets;使用 GitHub OIDC 或 secrets mount。 - 使用非 root 用户运行;开启 tini 处理信号。 - 建议启用 Cosign + OIDC 进行签名,并在部署侧强制验证。 - 在 PR 流程中运行 dependency-review 与镜像扫描(可集成 Trivy)。 ## 11. 本地快速清理 ```bash docker buildx rm mcp-bx || true docker image prune -f docker builder prune -f ``` --- 如需企业级多环境扩展(dev/stage/prod)、分支保护或额外合规扫描,可在 `publish-container.yml` 中增加 gated approvals 与专用注册表命名空间。

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Fu-Jie/MCP-OPENAPI-Pandoc'

If you have feedback or need assistance with the MCP directory API, please join our Discord server