• 已删除用户
Administrator
发布于 2022-11-17 / 3 阅读
0

Docker私有仓库Registry

Docker Registry 的作用就是存储我们的镜像。通常情况下我们可以使用Docker Hub来存储,不过如果是在公司内部使用,不想将镜像公开,可以手动搭建一个本地 Registry ,如Docker RegistryHarbor

Harbor作为企业级 Registry 服务器,功能全面。学习用过于庞大,需要安装很多组件,如 redis、nginx,比较较耗资源。使用 RegistryDocker Registry UI 可满足个人或小微企业的需求。

Registry

Registry 是 Docker 官方开源的私有仓库,简单易用。

Docker 运行

docker run -d -v /data/registry:/var/lib/registry -p 5000:5000 registry:2

Registry定义的对外服务端口为5000,我们也可以通过环境变量REGISTRY_HTTP_ADDR来修改服务端口。

Registry Api

Registry 支持通过 Api 对镜像进行操作。以下列几个 Api 意思一下,不太好用。建议搭配下面章节的Docker Registry UI可视化页面进行操作。

  • 查看 API 是否可用

curl -I -X GET localhost:5000/v2/
  • 查看所有镜像

curl -X GET localhost:5000/v2/_catalog
  • 获取一个镜像的 manifest

curl -I -X GET localhost:5000/v2/<name>/manifests/<reference>

<name>代表镜像名,reference可以使用 tag 或 digest。

TLS 和身份认证

Registry 支持 TLS 证书和身份认证扩展。详见:
Docker Registry 使用指南
Https 证书制作/申请

参考资料

官网
Registry Api

Docker Registry UI

Docker Registry UI旨在为私有Docker Registry提供一个简单而完整的用户界面。有两个版本:标准接口和静态接口。

  • 标准接口
    在标准界面中,没有默认注册表,需要在 UI 中添加自己的注册表。可以管理多个注册表服务器。所有注册表将存储在浏览器的本地存储中。启动 UI 时不需要配置。

  • 静态接口
    在静态接口中,它将连接到单个注册表,并且不会更改。当您使用标签包含 static 关键字的 docker 映像时,配置在接口的开始处完成。

Docker 运行

docker run -d -p 5001:80 joxit/docker-registry-ui:static

常用环境变量说明:

  • REGISTRY_URL
    Docker 仓库地址。

  • REGISTRY_TITLE
    用户界面自定义标题。

  • DELETE_IMAGES
    是否启用镜像删除功能,true 表示启用,默认为 false

跨域配置

  1. 如果Registry不需要跨域,可对 Registry 进行如下配置:
    /etc/docker/registry/config.yml

http:
  headers:
    Access-Control-Allow-Origin: ['*']
  1. 如果 Registry 需要跨域,可对 Registry 进行如下配置:

http:
  headers:
    Access-Control-Allow-Origin: ['http://host.docker.internal:5001']
    Access-Control-Allow-Credentials: [true]
    Access-Control-Allow-Headers: ['Authorization', 'Accept']
    Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE']

注意:Access-Control-Allow-MethodsDELETE 选项在删允许删除镜像时配置。

删除镜像

  1. 激活Registry中的删除功能
    Registry的配置文件/etc/docker/registry/config.yml中增加以下配置。重启Registry

storage:
    delete:
      enabled: true

如启用跨域验证,需对 Access-Control-Allow-Methods 增加 DELETE 选项。

http:
  headers:
    Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE']
    Access-Control-Expose-Headers: ['Docker-Content-Digest']
  1. 激活Docker Registry UI中的删除功能
    Docker Registry UI的环境变量中增加 DELETE_IMAGES,值为 true 。重启Docker Registry UI

参考资料

Github
Docker-Registry-Ui: 最简单和最完整的用户界面为您的私人注册