1. GHCR 是什么GHCR全称是GitHub Container Registry也就是GitHub 容器镜像仓库。它的地址是ghcr.ioGHCR 可以理解为GitHub 官方提供的 Docker 镜像仓库它主要用来保存 GitHub Actions 构建出来的 Docker 镜像 让服务器可以通过 docker pull 拉取镜像 支持版本管理、权限控制和自动化部署在完整 CI/CD 流程中它的位置是GitHub 代码仓库 ↓ GitHub Actions 自动构建 ↓ GHCR 保存镜像 ↓ 服务器拉取镜像 ↓ Docker / Docker Compose 启动服务对于实际项目部署场景GHCR 的意义是以后前端、后端代码推送到指定分支后 GitHub Actions 自动打包成镜像 镜像放到 ghcr.io 服务器只需要拉取镜像并重启容器 不需要在服务器上重新编译项目。一句话概括GitHub 存代码GHCR 存镜像服务器运行镜像。通俗说GHCR 就是 GitHub 提供的一个Docker 镜像仓库类似于镜像仓库说明Docker Hub常见的公共 Docker 镜像仓库GHCRGitHub 官方的容器镜像仓库阿里云 ACR阿里云容器镜像服务腾讯云 TCR腾讯云容器镜像服务GitHub 官方文档说明Container registry 使用ghcr.io可以用来存储和分发容器镜像并且支持更细粒度的权限控制。GitHub 旧的 Docker registrydocker.pkg.github.com已经被 Container registry 替代。2. GHCR 解决什么问题假设有一个前端项目或者后端项目需要用 Docker 部署。正常流程是写代码 ↓ 提交到 GitHub ↓ GitHub Actions 自动构建 Docker 镜像 ↓ 把镜像推送到 GHCR ↓ 服务器 docker pull 拉取镜像 ↓ docker run / docker compose 启动服务GHCR 在这里扮演的角色就是存放 Docker 镜像的仓库它不是运行服务的地方也不是服务器。它只是帮你保存镜像。可以类比成GitHub 仓库存代码 GHCR存 Docker 镜像 云服务器真正运行容器3. 为什么 GitHub Actions 经常和 GHCR 一起用因为 GitHub Actions 本身就在 GitHub 上运行GHCR 也是 GitHub 生态里的镜像仓库。所以它们配合起来很自然GitHub Actions 负责自动构建 GHCR 负责保存构建后的镜像 服务器负责拉取镜像并运行GitHub 官方的 Docker 镜像发布文档也推荐使用 GitHub Actions 构建并发布镜像到 Container registry也就是ghcr.io。常见 Action 包括docker/login-action docker/setup-buildx-action docker/build-push-action docker/metadata-action比如前端项目可能会构建出这样的镜像ghcr.io/github-user-or-org/frontend-image-name:tag后端项目可能会构建出这样的镜像ghcr.io/github-user-or-org/backend-image-name:tag服务器部署时只需要dockerpull ghcr.io/github-user-or-org/frontend-image-name:tagdockerpull ghcr.io/github-user-or-org/backend-image-name:tag然后再启动容器即可。4. GHCR 和 GitHub 仓库的关系很多人容易混淆GitHub Repository ≠ GHCR Package它们不是同一个东西。GitHub RepositoryGitHub 仓库保存的是源码例如前端代码 后端代码 Dockerfile docker-compose.yml GitHub Actions workflow README.mdGHCR PackageGHCR 保存的是构建后的 Docker 镜像例如前端 Nginx 镜像 后端应用镜像 网关镜像 任务服务镜像二者关系是代码仓库里面有 Dockerfile GitHub Actions 根据 Dockerfile 构建镜像 构建完成后推送到 GHCR GHCR 中产生一个 packageGitHub Packages 支持将 package 关联到仓库也可以设置 package 的可见性和访问权限。部分 package 支持细粒度权限控制可以按用户、组织或仓库关联来管理访问。5. GHCR 的镜像命名规则GHCR 镜像通常长这样ghcr.io/用户名或组织名/镜像名:标签例如ghcr.io/example-org/example-frontend:prod拆开看部分含义ghcr.ioGHCR 镜像仓库地址example-orgGitHub 用户名或组织名example-frontend镜像名称prod镜像标签 tag再比如ghcr.io/example-org/example-backend:latest其中latest是镜像标签表示默认或者最新版本。但生产部署时不建议只依赖latest最好使用明确标签例如prod v1.0.0 20260529 sha-xxxxxxx这样可以更方便地定位版本也方便后续回滚。6. GHCR 的权限问题GHCR 镜像可以是类型说明Public公开镜像别人可以直接拉取Private私有镜像需要登录和授权才能拉取Internal组织内部可见常见于企业或组织场景如果是公开镜像服务器上可以直接dockerpull ghcr.io/owner/image:tag如果是私有镜像服务器需要先登录dockerlogin ghcr.io然后输入 GitHub 用户名和 Token。GitHub 文档说明访问私有、内部或公开 package 的发布、安装、删除等操作通常需要访问令牌。对于 Container registry可以使用 personal access token classic 认证。常见权限大概是操作需要什么权限拉取公开镜像通常不需要登录拉取私有镜像需要 token推送镜像需要写 package 权限删除镜像需要更高权限GitHub Actions 推送通常用GITHUB_TOKEN7. GHCR 在 GitHub Actions 里的典型流程一个典型的 GitHub Actions 构建流程是1. checkout 拉取代码 2. setup-buildx 初始化 Docker Buildx 3. login-action 登录 ghcr.io 4. metadata-action 生成镜像标签 5. build-push-action 构建并推送镜像workflow 里一般会看到类似这些配置permissions:contents:readpackages:write这表示权限作用contents: read允许 Actions 读取仓库代码packages: write允许 Actions 把镜像推送到 GHCR然后登录 GHCRregistry:ghcr.iousername:${{github.actor}}password:${{secrets.GITHUB_TOKEN}}这里的意思是用当前触发 Actions 的 GitHub 用户身份 配合 GITHUB_TOKEN 登录 GHCR。GitHub 官方文档中也提到可以在 Actions 中使用GITHUB_TOKEN认证到 GitHub Packages并将容器镜像发布到ghcr.io。8. GHCR 和 Docker Hub 的区别对比项GHCRDocker Hub所属平台GitHubDocker地址ghcr.iodocker.io和 GitHub Actions 集成非常方便也可以但需要配置 Docker Hub token和 GitHub 仓库关联原生支持不如 GHCR 直接权限控制和 GitHub 用户、组织、仓库权限结合较好独立账号权限体系国内拉取速度可能不稳定也可能不稳定适合场景GitHub 项目自动构建镜像通用 Docker 镜像分发对 GitHub Actions 自动构建项目来说GHCR 的优势是代码在 GitHub 构建在 GitHub Actions 镜像也放在 GitHub GHCR 权限和自动化链路都在一个平台里
GHCR 是什么?GitHub 容器镜像仓库技术介绍
发布时间:2026/5/30 7:21:09
1. GHCR 是什么GHCR全称是GitHub Container Registry也就是GitHub 容器镜像仓库。它的地址是ghcr.ioGHCR 可以理解为GitHub 官方提供的 Docker 镜像仓库它主要用来保存 GitHub Actions 构建出来的 Docker 镜像 让服务器可以通过 docker pull 拉取镜像 支持版本管理、权限控制和自动化部署在完整 CI/CD 流程中它的位置是GitHub 代码仓库 ↓ GitHub Actions 自动构建 ↓ GHCR 保存镜像 ↓ 服务器拉取镜像 ↓ Docker / Docker Compose 启动服务对于实际项目部署场景GHCR 的意义是以后前端、后端代码推送到指定分支后 GitHub Actions 自动打包成镜像 镜像放到 ghcr.io 服务器只需要拉取镜像并重启容器 不需要在服务器上重新编译项目。一句话概括GitHub 存代码GHCR 存镜像服务器运行镜像。通俗说GHCR 就是 GitHub 提供的一个Docker 镜像仓库类似于镜像仓库说明Docker Hub常见的公共 Docker 镜像仓库GHCRGitHub 官方的容器镜像仓库阿里云 ACR阿里云容器镜像服务腾讯云 TCR腾讯云容器镜像服务GitHub 官方文档说明Container registry 使用ghcr.io可以用来存储和分发容器镜像并且支持更细粒度的权限控制。GitHub 旧的 Docker registrydocker.pkg.github.com已经被 Container registry 替代。2. GHCR 解决什么问题假设有一个前端项目或者后端项目需要用 Docker 部署。正常流程是写代码 ↓ 提交到 GitHub ↓ GitHub Actions 自动构建 Docker 镜像 ↓ 把镜像推送到 GHCR ↓ 服务器 docker pull 拉取镜像 ↓ docker run / docker compose 启动服务GHCR 在这里扮演的角色就是存放 Docker 镜像的仓库它不是运行服务的地方也不是服务器。它只是帮你保存镜像。可以类比成GitHub 仓库存代码 GHCR存 Docker 镜像 云服务器真正运行容器3. 为什么 GitHub Actions 经常和 GHCR 一起用因为 GitHub Actions 本身就在 GitHub 上运行GHCR 也是 GitHub 生态里的镜像仓库。所以它们配合起来很自然GitHub Actions 负责自动构建 GHCR 负责保存构建后的镜像 服务器负责拉取镜像并运行GitHub 官方的 Docker 镜像发布文档也推荐使用 GitHub Actions 构建并发布镜像到 Container registry也就是ghcr.io。常见 Action 包括docker/login-action docker/setup-buildx-action docker/build-push-action docker/metadata-action比如前端项目可能会构建出这样的镜像ghcr.io/github-user-or-org/frontend-image-name:tag后端项目可能会构建出这样的镜像ghcr.io/github-user-or-org/backend-image-name:tag服务器部署时只需要dockerpull ghcr.io/github-user-or-org/frontend-image-name:tagdockerpull ghcr.io/github-user-or-org/backend-image-name:tag然后再启动容器即可。4. GHCR 和 GitHub 仓库的关系很多人容易混淆GitHub Repository ≠ GHCR Package它们不是同一个东西。GitHub RepositoryGitHub 仓库保存的是源码例如前端代码 后端代码 Dockerfile docker-compose.yml GitHub Actions workflow README.mdGHCR PackageGHCR 保存的是构建后的 Docker 镜像例如前端 Nginx 镜像 后端应用镜像 网关镜像 任务服务镜像二者关系是代码仓库里面有 Dockerfile GitHub Actions 根据 Dockerfile 构建镜像 构建完成后推送到 GHCR GHCR 中产生一个 packageGitHub Packages 支持将 package 关联到仓库也可以设置 package 的可见性和访问权限。部分 package 支持细粒度权限控制可以按用户、组织或仓库关联来管理访问。5. GHCR 的镜像命名规则GHCR 镜像通常长这样ghcr.io/用户名或组织名/镜像名:标签例如ghcr.io/example-org/example-frontend:prod拆开看部分含义ghcr.ioGHCR 镜像仓库地址example-orgGitHub 用户名或组织名example-frontend镜像名称prod镜像标签 tag再比如ghcr.io/example-org/example-backend:latest其中latest是镜像标签表示默认或者最新版本。但生产部署时不建议只依赖latest最好使用明确标签例如prod v1.0.0 20260529 sha-xxxxxxx这样可以更方便地定位版本也方便后续回滚。6. GHCR 的权限问题GHCR 镜像可以是类型说明Public公开镜像别人可以直接拉取Private私有镜像需要登录和授权才能拉取Internal组织内部可见常见于企业或组织场景如果是公开镜像服务器上可以直接dockerpull ghcr.io/owner/image:tag如果是私有镜像服务器需要先登录dockerlogin ghcr.io然后输入 GitHub 用户名和 Token。GitHub 文档说明访问私有、内部或公开 package 的发布、安装、删除等操作通常需要访问令牌。对于 Container registry可以使用 personal access token classic 认证。常见权限大概是操作需要什么权限拉取公开镜像通常不需要登录拉取私有镜像需要 token推送镜像需要写 package 权限删除镜像需要更高权限GitHub Actions 推送通常用GITHUB_TOKEN7. GHCR 在 GitHub Actions 里的典型流程一个典型的 GitHub Actions 构建流程是1. checkout 拉取代码 2. setup-buildx 初始化 Docker Buildx 3. login-action 登录 ghcr.io 4. metadata-action 生成镜像标签 5. build-push-action 构建并推送镜像workflow 里一般会看到类似这些配置permissions:contents:readpackages:write这表示权限作用contents: read允许 Actions 读取仓库代码packages: write允许 Actions 把镜像推送到 GHCR然后登录 GHCRregistry:ghcr.iousername:${{github.actor}}password:${{secrets.GITHUB_TOKEN}}这里的意思是用当前触发 Actions 的 GitHub 用户身份 配合 GITHUB_TOKEN 登录 GHCR。GitHub 官方文档中也提到可以在 Actions 中使用GITHUB_TOKEN认证到 GitHub Packages并将容器镜像发布到ghcr.io。8. GHCR 和 Docker Hub 的区别对比项GHCRDocker Hub所属平台GitHubDocker地址ghcr.iodocker.io和 GitHub Actions 集成非常方便也可以但需要配置 Docker Hub token和 GitHub 仓库关联原生支持不如 GHCR 直接权限控制和 GitHub 用户、组织、仓库权限结合较好独立账号权限体系国内拉取速度可能不稳定也可能不稳定适合场景GitHub 项目自动构建镜像通用 Docker 镜像分发对 GitHub Actions 自动构建项目来说GHCR 的优势是代码在 GitHub 构建在 GitHub Actions 镜像也放在 GitHub GHCR 权限和自动化链路都在一个平台里