将docker镜像上传到github镜像存储仓库(GitHub 容器仓库(GHCR)使用流程)
步骤 1:生成 GPG 密钥(核心)
bash
gpg --gen-key
执行后会出现交互提示,按下面的指引操作:
选择密钥类型:默认 RSA and RSA,直接回车;
选择密钥长度:默认 3072(足够安全),回车;
密钥有效期:默认 0(永不过期),回车;
确认有效期:输入 y 回车;
填写用户信息:
Real name:随便填;
Email address:填你的 GitHub 绑定邮箱(或任意邮箱);
Comment:可选,直接回车;
确认信息:输入 O 回车(表示 OK);
设置密钥密码:
输入一个简单的密码(自己记住,后续 pass 会用到);123456789
再次输入确认,回车;
等待密钥生成:系统会要求你做一些随机操作(比如敲键盘、打开文件),等待 10-30 秒,直到提示 key created。
步骤 2:获取 GPG 密钥 ID
bash
gpg --list-secret-keys --keyid-format LONG
bash
sec rsa3072/1234567890ABCDEF 2026-03-22 [SC]
....私钥...
uid [ultimate]github用户名 m <your-email@xxx.com>
ssb rsa3072/0987654321FEDCBA 2026-03-22 [E]
步骤 3:初始化 pass
将上一步复制的密钥 ID 替换到下面的命令中执行:
bash
pass init 1234567890ABCDEF # 替换为你的密钥 ID
步骤 4:重新登录 Docker
bash
docker login docker.pkg.github.com -u github用户名
Password:
Login Succeeded
步骤 5:确认本地 Docker 镜像
bash
docker images # 列出本地所有镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
镜像名_base v1 5c6601682b2f 34 hours ago 21.2GB
步骤 6:为镜像打合规的 Tag
GitHub 镜像 Tag 规则(严格):
ghcr.io/[GitHub用户名]/[仓库名]/[镜像名]:[版本标签]
(仓库名要和 GitHub 上的代码仓库一致,否则可能权限异常)

执行打 Tag 命令
bash
docker tag 镜像名_base:v1 ghcr.io/<你的GitHub用户名>/<你的GitHub仓库名>/镜像名_base:v1
步骤 7:验证 Tag 是否打好
bash
docker images | grep ghcr.io
预期输出(确认有这条记录):
ghcr.io/<你的GitHub用户名>/<你的GitHub仓库名>/镜像名_base v1 5c6601682b2f 34 hours ago 21.2GB
步骤 8:推送镜像到 GHCR
bash
docker push ghcr.io/<你的GitHub用户名>/<你的GitHub仓库名>/镜像名_base:v1
如果出现unauthorized: unauthenticated: User cannot be authenticated with the token provided.
则进入 https://github.com/settings/tokens/new 页面创建的 Token 作为密码才可以推送镜像。
打开上面的链接,勾选 write:packages 和 read:packages ,repo 会自动选中,创建 Token。

勾选好后点击generate token

bash
sudo docker login ghcr.io -u <你的GitHub用户名>
Password输入上面生成的token
WARNING! Your credentials are stored unencrypted in '/root/.docker/config.json'.
Configure a credential helper to remove this warning. See
https://docs.docker.com/go/credential-store/
Login Succeeded
授权后重新push镜像
bash
docker push ghcr.io/<你的GitHub用户名>/<你的GitHub仓库名>/镜像名_base:v1


点击github右上角头像,列表中选profile



将镜像链接到代码仓库

选择要链接的仓库


步骤9:基础拉取镜像
在任何可以访问 GitHub 的机器上,执行以下命令拉取你上传的镜像:
bash
# 替换成你自己的 GitHub 用户名、仓库名和镜像标签
docker pull ghcr.io/<你的GitHub用户名>/<你的GitHub仓库名>/镜像名字:镜像标签
这个命令会直接从 GHCR 下载你之前推送的镜像到本地 Docker 环境。
如果拉取时提示 unauthorized(未授权),需要先登录 GHCR。
登录 GHCR
如果你的镜像设置为私有(默认私有),拉取前需要先登录:
bash
# 1. 执行登录命令
docker login ghcr.io -u <你的GitHub用户名>
# 2. 输入密码(即你之前创建的 GitHub Personal Access Token,需包含 read:packages 权限)
Password: <你的GitHub Token>
Token 权限要求(拉取镜像):
至少需要勾选 read:packages 权限(如果是私有镜像,还需要 repo 权限)。
不需要 write:packages(那是推送镜像用的)。
步骤10:运行拉取后的镜像
拉取完成后,就可以像使用本地镜像一样运行它:
bash
# 基础运行(根据你的镜像用途调整参数)
docker run -it --rm ghcr.io/<你的GitHub用户名>/<你的GitHub仓库名>/2dgsslam_base:v1
# 如果你的镜像需要端口映射、挂载目录等(示例)
docker run -it --rm -p 8080:80 -v /本地目录:/容器目录 ghcr.io/xxx/xxx/2dgsslam_base:v1
步骤11:验证镜像是否可用
运行以下命令确认镜像已成功拉取并能正常使用:
bash
# 查看本地镜像列表(确认有 GHCR 镜像)
docker images | grep ghcr.io
# 查看容器运行状态(如果已启动)
docker ps
# 进入容器内部验证环境(可选)
docker exec -it <容器ID/容器名> /bin/bash
进阶:分享镜像给团队成员
如果需要让团队成员使用你的私有镜像:
把你的 GitHub Token(仅含 read:packages 权限)分享给成员(或让成员自己创建 Token);
成员执行 docker login ghcr.io 后,即可拉取镜像;
(更安全)在 GitHub 仓库的 Settings > Packages 中,添加团队成员的 GitHub 账号为镜像的 "协作者",授予 Read 权限。