Workers中的容器注册表
该存储库包含一个使用R2的Workers容器注册表实现。
它支持所有推送和拉取工作流程。同时还支持用户名/密码和基于公钥JWT的身份验证。
部署
你需要使用pnpm安装所有依赖项(其他包管理器可能也可以使用,但只支持pnpm)。
$ pnpm install
安装完成后,需要几个步骤将注册表实际部署到生产环境:
- 准备你自己的
wrangler
文件。
$ cp wrangler.toml.example wrangler.toml
- 为此注册表设置R2存储桶
$ npx wrangler --env production r2 bucket create r2-registry
将以下内容添加到你的wrangler.toml
中
r2_buckets = [
{ binding = "REGISTRY", bucket_name = "r2-registry"}
]
- 部署你的镜像注册表
$ npx wrangler deploy --env production
你的注册表应该已经启动并运行。如果你没有设置凭据,它将拒绝任何请求。
添加基于用户名密码的身份验证
使用npx wrangler secret put USERNAME --env production
和npx wrangler secret put PASSWORD --env production
将USERNAME和PASSWORD设置为机密。
添加带公钥的JWT身份验证
你可以添加一个base64编码的JWT公钥来验证由私钥签名的密码(或令牌)。
npx wrangler secret put JWT_REGISTRY_TOKENS_PUBLIC_KEY --env production
与Docker一起使用
你可以使用此注册表与Docker一起推送和拉取镜像。
使用docker push
和docker pull
的示例:
export REGISTRY_URL=your-url-here
# 将$PASSWORD和$USERNAME替换为实际的凭据
echo $PASSWORD | docker login --username $USERNAME --password-stdin $REGISTRY_URL
docker pull ubuntu:latest
docker tag ubuntu:latest $REGISTRY_URL/ubuntu:latest
docker push $REGISTRY_URL/ubuntu:latest
# 检查拉取是否正常工作
docker rmi ubuntu:latest $REGISTRY_URL/ubuntu:latest
docker pull $REGISTRY_URL/ubuntu:latest
配置拉取回退
你可以配置R2注册表,在R2存储桶中不存在镜像时回退到另一个注册表。它将从该注册表下载并将其复制到R2存储桶中。在下一次拉取时,它将能够直接从R2拉取。
这对于从一个注册表迁移到serverless-registry
非常有用。
它支持基本和Bearer身份验证,如注册表规范中所述。
在wrangler.toml文件中:
[env.production]
REGISTRIES_JSON = "[{ \"registry\": \"https://url-to-other-registry\", \"password_env\": \"REGISTRY_TOKEN\", \"username\": \"username-to-use\" }]"
将你想设置拉取回退的注册表的注册表令牌设置为机密。
例如gcr:
cat ./registry-service-credentials.json | base64 | wrangler --env production secrets put REGISTRY_TOKEN
Github例如使用一个简单的令牌,你可以直接复制。
echo $GITHUB_TOKEN | wrangler --env production secrets put REGISTRY_TOKEN
诀窍是始终查看你如何为目标注册表登录Docker并设置凭据。
切勿将注册表密码/令牌放入wrangler.toml中,请始终使用wrangler secrets put
已知限制
目前这个容器注册表存在一些限制。
- 使用docker推送仅限于层大小最大为500MB的镜像。请参考你的Workers计划中的最大请求正文大小。
- 为了规避该限制,你可以手动将层和清单添加到R2存储桶中,或使用能够将上传分块为小于500MB(或你的Workers计划中的限制)的客户端。
- 如果你使用
npx wrangler dev
并用docker推送到R2注册表,R2注册表将不得不在Worker上缓冲请求。
许可证
该项目根据Apache许可证授权。
贡献
有关项目贡献的信息,请参阅CONTRIBUTING.md
。