GHCR全流程入门指南

Author Avatar
青枫 4天前
  • 在其它设备中阅读本文章

这份指南将带你从零开始,把你的 Docker 镜像托管到 GitHub Container Registry (GHCR)。

第一步:在 GitHub 上生成访问令牌 (PAT)

GitHub 不允许直接使用你的登录密码来通过 Docker 客户端登录,必须使用 Personal Access Token (Classic)

  1. 登录 GitHub,点击右上角头像 -> Settings
  2. 在左侧菜单最下方,点击 Developer settings
  3. 选择 Personal access tokens -> Tokens (classic)
  4. 点击 Generate new token -> Generate new token (classic)
  5. Note: 写个名字,比如 Docker-GHCR-Token
  6. Expiration: 建议选 90 天或更久(过期后需重新生成并登录)。
  7. 勾选权限(非常重要):
    • write:packages (上传镜像)
    • read:packages (下载镜像)
    • delete:packages (如果你需要删除镜像)
    • 注意:勾选 write:packages 时会自动勾选 repo 权限,这是正常的。
  8. 点击最下方的 Generate token
  9. 【核心提醒】 立刻复制并保存这个 Token!一旦刷新页面你就再也看不见它了。

第二步:在本地终端登录 GHCR

打开终端(Terminal 或 PowerShell),执行以下命令:

# 替换你的 GitHub 用户名为小写
export GH_USER="你的GitHub用户名" 
export GH_PAT="你刚才复制的Token"

# 执行登录
echo $GH_PAT | docker login ghcr.io -u $GH_USER --password-stdin

如果看到 Login Succeeded,说明第一关过了。


第三步:命名、构建与打标签

GHCR 的镜像命名规则非常严格,格式必须是:
ghcr.io/用户名/镜像名:版本号

注意:用户名和镜像名必须全部小写!

假设你的 GitHub 用户名是 stonework,项目叫 my-web-app

情况 A:直接从 Dockerfile 构建

docker build -t ghcr.io/stonework/my-web-app:v1.0 .

情况 B:给已有镜像重命名

如果你本地已经有一个叫 art-design 的镜像了:

docker tag art-design:latest ghcr.io/stonework/my-web-app:v1.0

第四步:推送镜像到 GitHub

这是见证奇迹的时刻:

docker push ghcr.io/stonework/my-web-app:v1.0

第五步:在 GitHub 网页上管理镜像

  1. 打开你的 GitHub 主页 ( github.com/你的用户名 )。
  2. 点击顶部导航栏的 Packages
  3. 你会看到刚刚上传的 my-web-app
  4. 默认是私有的 (Private):只有你自己能看到。
  5. 修改设置(可选):
    • 点击镜像进入详情。
    • 点击右侧的 Package settings
    • 在页面最下方,你可以:
      • Change visibility:把镜像设为 Public(公开)。
      • Link Repository:把这个镜像和你的某个代码仓库关联起来(关联后,仓库首页右侧会显示镜像入口)。

第六步:在其他机器上下载(拉取)镜像

在你的服务器或其他电脑上,你同样需要先执行 第二步 的登录操作,然后运行:

docker pull ghcr.io/stonework/my-web-app:v1.0

进阶:如何彻底实现“一劳永逸”?

如果你觉得手动输入命令太累,GHCR 最强大的地方在于配合 GitHub Actions

你可以写一个简单的自动化脚本(.github/workflows/docker-publish.yml),实现: 只要你往 GitHub 提交代码,它就自动帮你构建镜像、打版本号并推送到 GHCR。

如果你需要这部分的配置模板,可以随时告诉我。

避坑小贴士:

  1. 大小写敏感 GHCR.io/User/Image 会报错,必须全小写 ghcr.io/user/image
  2. Token 丢失 :如果忘了保存 Token,只能重新生成一个并重新 docker login
  3. 配额限制 :GHCR 个人版有 500MB 的免费存储额度。对于一般的 Next.js 项目(压缩后通常很小),完全够用。如果镜像特别巨大,注意清理旧版本。