文章目录

  • 环境
  • 简介
  • 准备
  • 下载
  • 启动
    • 无密码
    • 测试
      • 解决方案
      • 映射是否生效
      • pull
    • 有密码
      • 测试
      • 启动Secure Registry
    • 证书
      • 安装证书
      • 登录测试
      • 客户端[local-12]push
  • API
  • 最佳实践
    • 关键点
    • 命令瀑布
      • 服务端
      • 客户端
  • 清理
    • 清空所有
    • 精准
  • 参考

环境

Docker 版本
CentOS 7
Docker 19.03.2
docker-registry 2.7.0
Registry服务器信息 IP:192.168.0.122 主机名: uat Domain:uat.cnswb.com
服务器端口映射 18080:5000
Registry客户端信息 IP:192.168.0.12 主机名: local-12

简介

Docke官方提供了Docker Hub网站来作为一个公开的集中仓库。然而,本地访问Docker Hub速度往往很慢,并且很多时候我们需要一个本地的私有仓库只供网内使用。
Docker仓库实际上提供两方面的功能,一个是镜像管理,一个是认证。前者主要由docker-registry项目来实现,通过http服务来上传下载;后者可以通过docker-index(闭源)项目或者利用现成认证方案(如nginx)实现http请求管理。

更多信息参考官方文档.

准备

为了方便以后清理,需要指定文件夹用以映射镜像存储路径/var/lib/registry,创建文件夹/var/lib/registry

mkdir -p /var/lib/registry

注:/var/lib/registry是默认的根目录,可以通过修改环境变量REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY自定义,参考配置Registry

环境变量
REGISTRY_HOME=/var/lib/registry写入/etc/profile并重置:resource /etc/profile

下载

docker pull registry:2.7.0

启动

无密码

docker run -d --restart=unless-stopped -v /var/lib/registry:/var/lib/registry -p 18080:5000 registry:2.7.0

测试

docker tag swb-svc-house:uat-5 192.168.0.122:18080/swb-svc-house:dev-35
docker push 192.168.0.122:18080/swb-svc-house:dev-35

此时会报错:

The push refers to repository [192.168.0.122:18080/swb-svc-house]
Get https://192.168.0.122:18080/v2/: http: server gave HTTP response to HTTPS client

解决方案

vim /usr/lib/systemd/system/docker.service
  1. 找到ExecStart开头一行,并在最后添加--insecure-registry=192.168.0.12:18080

  1. 重启Docker

    systemctl daemon-reload && systemctl restart docker
    

重新push

docker push 192.168.0.122:18080/swb-svc-house:dev-35

映射是否生效

ll /var/lib/registry/docker/registry/v2/repositories/

pull

docker rmi 192.168.0.122:18080/swb-svc-house:dev-35
docker pull 192.168.0.122:18080/swb-svc-house:dev-35

出现类似如下信息表示成功

[root@uat ~]# docker rmi 192.168.0.122:18080/swb-svc-house:dev-35
Untagged: 192.168.0.122:18080/swb-svc-house:dev-35
Untagged: 192.168.0.122:18080/swb-svc-house@sha256:a54c22bbfa197639032d88b198bfe57966a95799dcfc9637f929c88e07078925
[root@uat ~]# docker pull 192.168.0.122:18080/swb-svc-house:dev-35
dev-35: Pulling from swb-svc-house
Digest: sha256:a54c22bbfa197639032d88b198bfe57966a95799dcfc9637f929c88e07078925
Status: Downloaded newer image for 192.168.0.122:18080/swb-svc-house:dev-35
192.168.0.122:18080/swb-svc-house:dev-35

有密码

生成用户名为swb密码为swbyouwant2019htpasswd

mkdir $REGISTRY_HOME/auth
docker run --entrypoint htpasswd registry:2.7.0 -Bbn swb swbyouwant2019  > $REGISTRY_HOME/auth/htpasswd

启动带鉴权功能的Registry:

docker run -d --restart=unless-stopped \-v $REGISTRY_HOME:$REGISTRY_HOME \-e "REGISTRY_AUTH=htpasswd" \-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \-e REGISTRY_AUTH_HTPASSWD_PATH=$REGISTRY_HOME/auth/htpasswd \-p 18080:5000 registry:2.7.0

测试登录:

docker login 192.168.0.122:18080Username: swb
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded

测试

参考上一小节测试。

启动Secure Registry

如果你拥有一个域名,域名下主机提供Registry服务,并且你拥有某知名CA签署的证书文件,那么你可以建立起一个Secure Registry。也就是说可以删除docker.service中启动项参数--insecure-registry=192.168.0.12:18080了。

不过局域网没有现成的证书,只能使用自签署的证书。严格来讲,使用自签署的证书在Docker官方眼中依旧属于Insecure,不过这里只是借助自签署的证书来说明一下Secure Registry的部署步骤罢了。

证书

自签名证书

mkdir $REGISTRY_HOME/certs
openssl req -newkey rsa:2048 -nodes -sha256 -keyout $REGISTRY_HOME/certs/domain.key -x509 -days 3650 -out $REGISTRY_HOME/certs/domain.crt

填写相关信息:

Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:ShaanXi
Locality Name (eg, city) [Default City]:Xi'an
Organization Name (eg, company) [Default Company Ltd]:swb
Organizational Unit Name (eg, section) []:dev
Common Name (eg, your name or your server's hostname) []:uat.cnswb.com
Email Address []:uat@cnswb.com

修改/etc/hosts配置自签名证书中CN(Common Name)所对应域名uat.cnswb.com的映射

echo "192.168.0.122 uat.cnswb.com" >> /etc/hosts

启动:

docker run -d \--restart=unless-stopped \-v $REGISTRY_HOME:$REGISTRY_HOME \-e "REGISTRY_AUTH=htpasswd" \-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \-e REGISTRY_AUTH_HTPASSWD_PATH=$REGISTRY_HOME/auth/htpasswd \-e REGISTRY_HTTP_TLS_CERTIFICATE=$REGISTRY_HOME/certs/domain.crt \-e REGISTRY_HTTP_TLS_KEY=$REGISTRY_HOME/certs/domain.key \-p 18080:5000 registry:2.7.0

安装证书

本机(服务端)

mkdir -p /etc/docker/certs.d/uat.cnswb.com:18080
cp $REGISTRY_HOME/certs/domain.crt /etc/docker/certs.d/uat.cnswb.com:18080/ca.crt

客户端

# 添加主机映射
echo "192.168.0.122 uat.cnswb.com" >> /etc/hostsmkdir -p /etc/docker/certs.d/uat.cnswb.com:18080
scp root@uat.cnswb.com:$REGISTRY_HOME/certs/domain.crt /etc/docker/certs.d/uat.cnswb.com:18080/ca.crt

登录测试

docker login --username=swb --password=swbyouwant2019 uat.cnswb.com:18080

客户端[local-12]push

API

官方给出了目前所支持的所有Http API总结,参考Detail

# 无密码,无鉴权
curl http://192.168.0.122:18080/v2/_catalog
curl http://192.168.0.122:18080/v2/swb-svc-house/tags/list# 有密码,有鉴权
curl --cacert /etc/docker/certs.d/uat.cnswb.com\:18080/ca.crt --basic --user swb:swbyouwant2019 https://uat.cnswb.com:18080/v2/_catalogcurl --cacert /etc/docker/certs.d/uat.cnswb.com\:18080/ca.crt --basic --user swb:swbyouwant2019 https://uat.cnswb.com:18080/v2/swb-svc-house/tags/list
## 查看Manifest信息,/v2/<name>/manifests/<reference>,当pull完成会有一个degist返回,就是最后一个参数<reference>
curl --cacert /etc/docker/certs.d/uat.cnswb.com\:18080/ca.crt --basic --user swb:swbyouwant2019 -XGET https://uat.cnswb.com:18080/v2/swb-svc-house/manifests/sha256:12ec47e9755c821ec68b06c0772c4cd6c8258a3d9ac901a482c222cb97636cb8

最佳实践

关键点

  1. 指定端口
  2. 指定映射目录
  3. 重启策略
  4. 有密码
  5. 有证书

命令瀑布

服务端

mkdir $REGISTRY_HOMEmkdir $REGISTRY_HOME/auth
docker run --entrypoint htpasswd registry:2.7.0 -Bbn swb swbyouwant2019  > $REGISTRY_HOME/auth/htpasswdmkdir $REGISTRY_HOME/certs
openssl req -newkey rsa:2048 -nodes -sha256 -keyout $REGISTRY_HOME/certs/domain.key -x509 -days 3650 -out $REGISTRY_HOME/certs/domain.crtecho "192.168.0.122 uat.cnswb.com" >> /etc/hostsdocker run -d \--restart=unless-stopped \-v $REGISTRY_HOME:$REGISTRY_HOME \-e "REGISTRY_AUTH=htpasswd" \-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \-e REGISTRY_AUTH_HTPASSWD_PATH=$REGISTRY_HOME/auth/htpasswd \-e REGISTRY_HTTP_TLS_CERTIFICATE=$REGISTRY_HOME/certs/domain.crt \-e REGISTRY_HTTP_TLS_KEY=$REGISTRY_HOME/certs/domain.key \-p 18080:5000 registry:2.7.0

客户端

echo "192.168.0.122 uat.cnswb.com" >> /etc/hosts## 颁发证书
scp root@uat.cnswb.com:$REGISTRY_HOME/certs/domain.crt /etc/docker/certs.d/uat.cnswb.com:18080/ca.crt## 其他docker操作
docker login uat.cnswb.com:18080
docker push ...
docker pull ...

清理

清空所有

进入本机映射目录rm -rf /var/lib/registry/*

精准

通过HTTP API,但是删除功能特别难用,博主总是出现UNSUPPORTED错误,具体参考https://docs.docker.com/registry/spec/api/

这里记录操作如下

  • push获取digest,这里以tomcat为例

    docker push uat.cnswb.com:18080/tomcat:latest
    

    此时得到digest:sha256:0e5dd4e1cf10a3f4684b797547aa4b376b2eeb6ac983c7a7046be5eba636ddb1

  • 查看manifests信息

    curl --cacert /etc/docker/certs.d/uat.cnswb.com\:18080/ca.crt --basic --user swb:swbyouwant2019 -XGET https://uat.cnswb.com:18080/v2/tomcat/manifests/sha256:0e5dd4e1cf10a3f4684b797547aa4b376b2eeb6ac983c7a7046be5eba636ddb1
    

    此时得到blobs摘要信息sha256:6e30b06a90d3206519a5ea730057001a1b830b9169e1baf76a97e1767efc0db7

  • 查看blobs信息

    curl --cacert /etc/docker/certs.d/uat.cnswb.com\:18080/ca.crt --basic --user swb:swbyouwant2019 -XGET https://uat.cnswb.com:18080/v2/tomcat/blobs/sha256:6e30b06a90d3206519a5ea730057001a1b830b9169e1baf76a97e1767efc0db7
    

    截图如下

  • 删除blobs

    curl --cacert /etc/docker/certs.d/uat.cnswb.com\:18080/ca.crt --basic --user swb:swbyouwant2019 -XDELETE https://uat.cnswb.com:18080/v2/tomcat/blobs/sha256:6e30b06a90d3206519a5ea730057001a1b830b9169e1baf76a97e1767efc0db7
    

    此时获得UNSUPPORTED错误

    {"errors":[{"code":"UNSUPPORTED","message":"The operation is unsupported."}]}
    

参考

  1. 官方文档
  2. 部署私有Docker Registry

CentOS7安装Docker-Registry相关推荐

  1. CentOs7下安装 Docker Registry 私服

    Docker Registry 服务器端安装配制 你不希望将自己的镜像放到公网当中,那么你就需要 Docker Registry,它可以用来存储和管理自己的镜像 安装 Docker Registry ...

  2. CentOS7安装Docker详细教程

    CentOS7安装Docker 文章目录 CentOS7安装Docker Docker简介 Docker架构 Docker安装流程 查看Docker 参考文章 Docker简介 Docker 是一个开 ...

  3. linux设置docker自动启动,CentOS7安装Docker配置服务端和容器自启动

    接上一篇,在VirtualBox上安装配置好了CentOS7,继续在这个虚拟机上装好docker并总结一下使用到的常用功能. 安装Docker 安装直接参考官网来安装就OK,没有遇到什么问题,值得注意 ...

  4. Centos7 安装Docker(v2021 version 20.10.5) 并通过docker-compose运行TiDB集群

    Centos7 安装Docker(v2021 version 20.10.5) 卸载docker旧版 注意:新系统不用卸载 yum remove docker \docker-client \dock ...

  5. centos7安装docker并配置镜像加速

    Centos7安装docker 并配置镜像加速 1.如果系统上之前有安装过docker 那么就需要先执行下面的命令 删除旧版本docker sudo yum remove docker \docker ...

  6. 【Linux】安装 Docker Registry

    安装 Docker Registry 一.下载Registry 二.运行私有库Registry 三.验证私服库有什么镜像 四.将新镜像修改符合私服规范的Tag 五.修改配置文件使之支持http 六.p ...

  7. 安装 Docker Registry 私服

    安装 Docker Registry 私服(存放项目及其他自己的镜像) 在docker-compose环境下:在/usr/local/docker/registry目录下(没有的目录自己创建)创建do ...

  8. CentOS7安装Docker与使用篇

    一.在CentOS7上安装Docker篇 1. 查看系统版本:  $ cat /etc/redhat-release  CentOS Linux release 7.0.1406 (Core) 2. ...

  9. CentOs7 安装Docker 并配置代理访问外网

    提要 环境: Linux version 3.10.0-693.el7.x86_64 安装docker的一部分步骤 步骤 1.配置yum代理 vim /etc/yum.conf proxy=http: ...

  10. CentOS7安装Docker及配置国内镜像源

    环境CentOS7 一.Docker docker安装 https://docs.docker.com/get-docker/ https://docs.docker.com/engine/insta ...

最新文章

  1. 人脸相关2020eccv
  2. 第二冲刺阶段个人博客7
  3. IOS和Android音频开发总结
  4. 浏览器兼容CSS渐进增强 VS 优雅降级如何选择
  5. 数学家与诗人,都是这个世界上先知先觉的预言家
  6. OpenShift 4 之AMQ Streams(2) - 用Kafka Connect访问数据源
  7. C++ 返回类型协变
  8. YOLO目标检测,训练自己的数据集(识别海参)
  9. 数据结构:线性表理论题目集
  10. 电脑关机程序(源码)
  11. android如何加载一张大图片,Android 实现加载大图片的方法
  12. virtualbox安装.img文件
  13. Cents7 查看当前版本
  14. 幻数java题_关于数组中的幻数?:数组中的幻数? -C ++
  15. python爬取网易云音乐排行榜歌单热评(完整版)
  16. CSS一篇文章搞懂系列6:超全的字体篇与背景设置内容,花里胡哨起来
  17. AStar2006百度之星程序设计大赛试题
  18. 用JavaScript写一个类似于windows的气泡屏保效果
  19. 百度网盘下载慢怎么解决
  20. git时认证失败(Authentication failed )的解决

热门文章

  1. 联想网站诊断分析(12.10)
  2. CentOS8-1905 本地dnf源挂载
  3. 【文献心得】内存隔离技术研究现状调研
  4. 世界杯电视直播表(及时更新)
  5. excal怎么设置模板阈值
  6. 【图像处理 -1图像恢复】非线性过滤器修复图像
  7. [植树造林小游戏1.1]
  8. 信创-东方通和达梦适配
  9. Web网站模板-横向滚动个人简历响应式网站模板(HTML+CSS+JavaScript)
  10. 使用监听器实现一个统计网站在线人数的示例