Docker Registry对接Openstack Swift存储后端

韦睿
2023-12-01

我们知道Docker Registry默认是使用本地文件系统存储镜像文件的,存储路径为/var/lib/registry。官方Registry目前尚不支持自动复制和同步镜像功能,因此使用本地单机文件系统保存镜像时可靠性没法保证。为了保证镜像数据的可靠性存储,只能依靠底层存储系统了。可幸的是Docker Registry原生支持多种分布式存储后端,具体信息可参考官方文档,目前官方支持的存储后端列表如下:

  • filesystem:本地文件系统,默认使用的存储后端

  • inmemory: 直接保存在内存,不能持久化

  • azure: 微软存储系统

  • gcs:Google云存储

  • S3: AWS对象存储

  • Openstack Swift

  • OSS:阿里对象存储

目前官方尚不支持Ceph RGW,不过可以通过Swift API对接RGW来实现。

注意:Docker Registry同时只能支持一个存储后端,不能同时配置多个,否则出错。

配置方法官方有非常详细的文档,用户也可以通过自己实现存储驱动来支持更多的存储系统。

下面以对接Openstack Swift为例,对接Swift需要指定的必要参考为:

  • authurl: 认证URL,通常为keystone地址。

  • tenant: 租户名

  • admin:用户名

  • password:密码

  • container:使用的Swift容器,镜像文件最终存储在该容器中,Swift的容器概念类似S3的Bucket

配置文件为/etc/docker/registry/config.yml,内容如下:

version: 0.1
log:  fields:    service: registry
storage:  swift:    tenant: admin    username: admin    password: 5c8d15f732104053    authurl: http://10.0.10.216:5000/v2.0    container: docker_registry
http:  addr: :5000  headers:    X-Content-Type-Options: [nosniff]
health:  storagedriver:    enabled: true    interval: 10s    threshold: 3  

注意启动registry服务前必须先创建Swift容器。

docker post docker_registry

registry的配置文件默认读取/etc/docker/registry/config.yml,我们可以在本地管理配置文件,然后挂载到容器中指定的目录中,启动registry服务的脚本为:

#!/bin/bash
NAME=registry
IMAGE=registry:2 docker rm -f $NAME 2>/dev/null docker run -d /
-p 15000:5000 /
--restart=always /
-v `pwd`/data/registry:/var/lib/registry /
-v `pwd`/resitry_config.yml:/etc/docker/registry/config.yml /
--name $NAME $IMAGE

由于5000端口被keystone占用,因此选用了15000端口作映射,以上registry_config.yml为registry本地配置文件,配置内容见以上内容,我们通过volume映射到/etc/docker/registry/目录下。

启动registry容器实例后,接下来验证下是否成功对接,首先tag busybox镜像为我们的仓库地址:

docker tag busybox localhost:15000/busybox:latest

push镜像到我们的仓库中:

docker push localhost:15000/busybox

上传成功后检查swift是否存在刚刚上传的镜像文件:

[root@server-216 docker(keystone_admin)]# swift list docker_registry files/docker/registry/v2/blobs/sha256/13/1359608115b94599e5641638bac5aef1ddfaa79bb96057ebf41ebc8d33acf8a7/data files/docker/registry/v2/blobs/sha256/2b/2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749/data files/docker/registry/v2/blobs/sha256/8d/8ddc19f16526912237dd8af81971d5e4dd0587907234be2b83e249518d5b673f/data files/docker/registry/v2/repositories/busybox/_layers/sha256/2b8fd9751c4c0f5dd266fcae00707e67a2545ef34f9a29354585f93dac906749/link files/docker/registry/v2/repositories/busybox/_layers/sha256/8ddc19f16526912237dd8af81971d5e4dd0587907234be2b83e249518d5b673f/link files/docker/registry/v2/repositories/busybox/_manifests/revisions/sha256/1359608115b94599e5641638bac5aef1ddfaa79bb96057ebf41ebc8d33acf8a7/link files/docker/registry/v2/repositories/busybox/_manifests/tags/latest/current/link files/docker/registry/v2/repositories/busybox/_manifests/tags/latest/index/sha256/1359608115b94599e5641638bac5aef1ddfaa79bb96057ebf41ebc8d33acf8a7/link segments/2f6/46f636b65722f72656769737472792f76322f7265706f7369746f726965732f62757379626f782f5f75706c6f6164732f39396466333866612d653166312d343432662d393939342d6637346336363034623830322f64617461f2f622a0bf17bef3f2fae2745f7cec6f2d736a2384ea2ad0f56286fa76ff114dda39a3ee5e6b4b0d3255bfef95601890afd80709/0000000000000001

如果存在以上内容,说明成功对接了Swift存储后端。



查看原文:http://www.zoues.com/2016/10/20/docker-registry%e5%af%b9%e6%8e%a5openstack-swift%e5%ad%98%e5%82%a8%e5%90%8e%e7%ab%af/
 类似资料: