综合介绍
Cloudflare Serverless Registry 是一个基于 Cloudflare Workers 和 R2 存储的无服务器容器注册表。它支持镜像的推送和拉取,并提供用户名密码和基于公钥的 JWT 认证。该项目易于部署,兼容 Docker 操作,适合在无服务器环境中管理容器镜像。尽管存在一些限制,Serverless Registry 仍为开发者提供了一个轻量级且可扩展的解决方案。
功能列表
- 支持镜像推送和拉取
- 提供用户名密码和 JWT 认证
- 兼容 Docker 操作
- 支持回退到其他注册表
- 易于部署和管理
使用帮助
安装和部署
- 安装依赖项:使用 pnpm 安装所有依赖项(其他包管理器可能也可以使用,但只支持 pnpm)。
$ pnpm install
- 准备 wrangler 文件:复制示例文件并进行配置。
$ cp wrangler.toml.example wrangler.toml
- 设置 R2 存储桶:创建 R2 存储桶。
$ npx wrangler --env production r2 bucket create r2-registry
- 配置 wrangler.toml:在 wrangler.toml 文件中添加 R2 存储桶配置。
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
JWT 认证
- 添加 JWT 公钥:添加 base64 编码的 JWT 公钥以验证密码或令牌。
$ npx wrangler secret put JWT_REGISTRY_TOKENS_PUBLIC_KEY --env production
使用 Docker 推送和拉取镜像
- 登录 Docker:使用用户名和密码登录 Docker。
export REGISTRY_URL=your-url-here 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 docker pull $REGISTRY_URL/ubuntu:latest
配置拉取回退
- 设置回退注册表:在 wrangler.toml 文件中配置回退注册表。
[env.production] REGISTRIES_JSON = "[{ \"registry\": \"url-to-other-registry\", \"password_env\": \"REGISTRY_TOKEN\", \"username\": \"username-to-use\" }]"
- 设置注册表令牌:将注册表令牌设置为机密。
cat ./registry-service-credentials.json | base64 | wrangler --env production secrets put REGISTRY_TOKEN