Docker Registry 的作用就是存储我们的镜像。通常情况下我们可以使用Docker Hub来存储,不过如果是在公司内部使用,不想将镜像公开,可以手动搭建一个本地 Registry ,如Docker Registry
或Harbor
。
Harbor
作为企业级 Registry 服务器,功能全面。学习用过于庞大,需要安装很多组件,如 redis、nginx,比较较耗资源。使用 Registry 和 Docker 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 证书制作/申请
参考资料
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
。
跨域配置
如果
Registry
不需要跨域,可对Registry
进行如下配置:/etc/docker/registry/config.yml
http:
headers:
Access-Control-Allow-Origin: ['*']
如果
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-Methods
的 DELETE
选项在删允许删除镜像时配置。
删除镜像
激活
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']
激活
Docker Registry UI
中的删除功能Docker Registry UI
的环境变量中增加DELETE_IMAGES
,值为true
。重启Docker Registry UI
。