![]()
1、关于docker registry ![]()
docker registry可以用来搭建私人docker镜像仓库来管理镜像,可以在一些某些无法访问官方的docker hub场景下使用。
registry在github上有两份代码,老的代码使用python编写,而新的使用go语言编写,老版本在0.9.1版本以后就不再更新,新的代码目前正式版本为2.4.1. 我们在使用时直接使用新的版本2.4.1.
2、docker registry 简单布署和使用实例 ![]()
![]()
2.1 docker registry 简单布署 ![]()
● 下载docker registry官方镜像 docker pull registry:2.4.1
● 下载后启动使用该镜像启动容器 docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=al ways --name registry registry:2.4.1
● 查看容器运行状况 docker ps CONTAINER IDIMAGE COMMAND CREATED STATUS PORTSNAM ES 5b185372e042registry:2.4.1 "/bin/registry serve " 4 seconds ago Up 3 seconds0.0.0.0:5000- >5000/tcp registry
● 执行 curl 127.0.0.1:5000/v2 <a href="/v2/">Moved Permanently</a>. 说明registry布署成功。
![]()
2.2 镜像上传下载实例 ![]()
● 查看当前镜像 [root@tfg-105 jinzg]# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE registry 2.4.1 5d322e774cf24 weeks ago 171.5 MB tecs tecs 383a 6a35e2e75 months ago 2.31 GB
● 将需要上传的镜像tag ` docker tag tecs:tecs 127.0.0.1:5000/tecs` ● 执行push docker push 127.0.0.1:5000/tecs
● 完成后,执行 [root@tfg-105 jinzg]# curl 127.0.0.1:5000/v2/_catalog {"repositories":["tecs"]} 即上传成功。 ● 下载即 docker pull 127.0.0.1:5000/tecs
3、docker registry 高级配置 ![]()
docker registry 启动的高级设置使用YAML文件作为配置文件。
YAML文件字段较多,各项在github上有详细介绍,此处介绍在我的仓库搭建中所使用的字段的介绍。
![]()
3.1 version ![]()
示例
version: 0.1 这个字段是必须的,用来指定配置文件的版本,被置于最顶层,确保在解析具体数据之前进行版本一致性检查。
![]()
3.2 log ![]()
示例 log: level: debug formatter: text fields: service: registry environment: staging 这个字段设置了日志系统的运行方式,可以调整日志的格式。
level:非必要选项,指定日志级别:error,warn,info和debug,默认是info;
formatter:非必要选项,指定日志输出格式,选项text,json和logstash,默认为text;
fields:非必要选项,映射域的名字,通常加在每行日志的开头,在混杂了其他系统日志的环境里更好辨认有用的日志信息。
![]()
3.3 storage ![]()
示例 storage: filesystem: rootdirectory: /var/lib/registry swift: username: username password: password authurl: https://storage.myprovider.com/auth/v1.0 or https://storage.myprovider.com/v2.0 or https://storage.myprovider.com/v3/auth tenant: tenantname tenantid: tenantid domain: domain name for Openstack Identity v3 API domainid: domain id for Openstack Identity v3 API insecureskipverify: true region: fr container: containername rootdirectory: /swift/object/name/prefix inmemory: delete: enabled: false cache: blobdescriptor: inmemory maintenance: uploadpurging: enabled: true age: 168h interval: 24h dryrun: false redirect: disable: false storage选项为必需选项,用来定义何种后端存储。必须配置一个后端存储,如果配置了多于一个就会报错,可以选择filesystem(本地盘)、azure(微软云存储)、gcs(谷歌云盘)、s3(亚马逊存储服务)、swift(openstack对象存储)、oss(阿里云对象存储)。
根据使用情况,主要列出filesystem和swift使用配置。
3.3.1 filesystem 参数: rootdirectory 值为容器的本地绝对路径,registry库的所有数据文件都将存储在这个目录上。
3.3.2 swift 参数: authurl 必需选项,获取身份验证令牌的URL地址 username 必需选项,openstack 用户名 password 必需选项,openstack 密码 region 非必需,容器所在的openstack 地区 container 必需,用来存放registry数据的swift容器名,在driver初始化时会创建以这个参数命名的容器。 tenant 非必需,openstack的租户名,可以使用租户名或者租户id。 tenantid 非必需,openstack的租户id。 domain 非必需,openstack V3 Identity API的域名 domainid 非必需,openstack V3 Identity API的域名ID。 trustid 非必需,openstack V3 Identity API的trustid insecureskipverify 非必需,值为true时跳过TLS验证,false为默认。 authversion 非必需 说明openstack auth的版本号,默认情况下driver会从auth url自动探测到auth的版本号。 endpointtype 连接swift时的端点类型,可以为public、internal和admin 默认为public。
3.3.3 Maintenance 目前上传清除(Upload Purging)和只读模式是仅有的可用的维护功能。这些和未来的维护功能可以在这个字段下配置。
Upload Purging Upload Purging是一个定期从registry上传目录中删除孤立文件的后台进程。Upload Purging默认被开启,要配置该功能,以下参数必现配置:
enabled 设置为true使能upload purging功能,默认true; age 上传文件比该参数指定的时间更长的文件将被删除,默认168h,即1周; interval 上传清楚的时间间隔,默认24h; dryrun 设置为true,可以对被删除的文件建立一个概要,默认false。 age interval都是使用字符串的方式表示时间,例如45m,2h10m,168h等。
Read-only mode 这个字段设置为true,将使得client端无法向registry写入数据。
![]()
3.4 auth ![]()
示例 auth: silly: realm: silly-realm service: silly-service token: realm: token-realm service: token-service issuer: registry-token-issuer rootcertbundle: /root/certs/bundle htpasswd: realm: basic-realm path: /path/to/htpasswd 仓库登录认证方式,此处有三种认证方式可选,需要结合第三方的认证服务器程序完成用户认证功能。
![]()
3.5 http ![]()
示例 http: addr: localhost:5000 net: tcp prefix: /my/nested/registry/ host: https://myregistryaddress.org:5000 secret: asecretforlocaldevelopment relativeurls: false tls: certificate: /path/to/x509/public key: /path/to/x509/private clientcas: - /path/to/ca.pem - /path/to/another/ca.pem letsencrypt: cachefile: /path/to/cache-file email: emailused@letsencrypt.com debug: addr: localhost:5001 headers: X-Content-Type-Options: [nosniff] http详细配置了registry的http服务的配置 addr 必需选项,可以被访问的地址,由地址:端口的方式组成;
net 非必需选项,指定用何种方式创建监听socket,有unix和tcp,默认tcp;
prefix 非必需,如果服务不运行在根目录,则使用这个参数指定路径;
host 非必需,该参数指定了外部可访问registry的url路径;
secret 必需,一个随机数据,用于保护数据不被篡改,默认情况下registry将随机生成;
relativeurls,非必需,指定registry返回相对url路径,由客户端解析真正的url; tls 非必需,tls认证参数相关 debug 非必需,指定debug地址 headers 非必需
4、docker registry yml配置文件方式使用swift后端存储实例 ![]()
![]()
4.1 swift对象存储安装 ![]()
环境中使用devstack安装swift对象存储组件,devstack的local.conf中添加如下一行:
enable_service s-proxy s-object s-container s-account 进行openstack安装,顺利安装完成后 [root@tfg211 devstack(keystone_admin)]# openstack service list +----------------------------------+-------------+-----------------+ | ID | Name | Type | +----------------------------------+-------------+-----------------+ | 0d6dc5708dd54549a418007ad6f6513e | keystone | identity | | 433f1186edf04f09a5c8febe87ee73c2 | swift | object-store | | 43dbbd4f1fba4019b85566c293be5b14 | magnum | container-infra | | 5143e0e433b34d46a700e2686352f110 | heat-cfn | cloudformation | | 607d7541a685420fa6bfa1368627c6b1 | neutron | network | | 66e03d2ed277450db5477ccf59c8764f | cinder | volume | | a661b1d707864b4f886e87c82352747d | nova_legacy | compute_legacy | | a7e6cebf57d24a07b5a545078bba095f | heat | orchestration | | d8ffde8bd5414a73a06e727666602219 | glance | image | | ef3bac32d9b8464cbdb6b03ad0f5d9f8 | nova | compute | | faca2e329a1b4a608d15a94fcc6ebbd4 | cinderv2 | volumev2 | +----------------------------------+-------------+-----------------+ 即安装成功
![]()
4.2 config.yml文件内容 ![]()
version: 0.1 log: level: debug storage: swift: username: swift password: haoning authurl: http://10.43.211.18:5000/v2.0/ container: docker-registry tenant: service insecureskipverify: true http: addr: :5000 secret: asecretforlocaldevelopment debug: addr: localhost:6001
配置文件中使用的用户名属于某个租户,必现将租户名填入。
启动命令行: docker run -d -p 4000:5000 --restart=always --name registry1 -v `pwd`/config.yml:/etc/docker/registry/config.yml registry:2.4.1 运行docker ps [root@tfg211 devstack(keystone_admin)]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 1067bcf64df4 registry:2.4.1 "/bin/registry serve " 7 days ago Up 20 hours 0.0.0.0:3000->5000/tcp registry1
即运行成功。
运行成功后,在openstack的对象存储中可以看到用户下的名为docker-registry的container。push镜像后可以在界面看到相关文件,如图: ![]()
作者简介:金振国 ,软件工程师,目前从事虚拟化的开发维护工作,对开源有兴趣。
查看原文:http://www.zoues.com/2016/10/20/docker-registry%e4%bb%93%e5%ba%93%e6%90%ad%e5%bb%ba%e9%85%8d%e7%bd%ae%e7%ae%80%e4%bb%8b/
Docker registry仓库搭建配置简介
最新推荐文章于 2024-04-17 10:14:58 发布