但有时候使用Docker Hub这样的公共仓库可能不方便,这种情况下用户可以使用registry创建一个本地仓库供私人使用,这点跟Maven的管理类似。
使用私有仓库有许多优点:

1
2
1)节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下载,只需要从私有仓库中下载即可;
2)提供镜像资源利用,针对于公司内部使用的镜像,推送到本地的私有仓库中,以供公司内部相关人员使用。

目前Docker Registry已经升级到了v2,最新版的Docker已不再支持v1。Registry v2使用Go语言编写,在性能和安全性上做了很多优化,重新设计了镜像的存储格式。如果需要安装registry v2,只需下载registry:2.2即可。Docker官方提供的工具docker-registry可以用于构建私有的镜像仓库。废话不多说了,下面记录下Docker私有仓库构建的过程:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
选择一台服务器(内外网地址:192.168.1.23)作为注册服务器,用于搭建私有仓库。(该机器要安装了Docker环境)
1)从Docker官方仓库里下载registry镜像
[root@localhost ~]# docker pull registry:latest
----------------------------------------------------------------
或者:
[root@localhost ~]# docker pull registry
[root@localhost ~]# docker pull registry:2.1.1
----------------------------------------------------------------
下载一个tomcat的镜像,以方便我们进行测试
[root@localhost ~]# docker pull tomcat:7-jre7
下载完之后,可以通过该镜像启动一个容器
[root@localhost ~]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
tomcat              7-jre7              97c6a43dd69c        12 minutes ago      562.3 MB
docker.io/registry   2.2                 ad379b517aa6        14 months ago       224.5 MB
         
默认情况下,会将私有仓库存放于容器内的/tmp/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失。
所以一般情况下会指定本地一个目录挂载到容器内的/tmp/registry下,如下:
[root@localhost ~]# docker run -d --name=my_registry -p 5000:5000 -v /opt/data/registry:/tmp/registry docker.io/registry:2.2
9fe45329bda17f61da04e6e8d2faf124fb22665a25270421bb8979a419809446
         
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED              STATUS              PORTS                    NAMES
d8e98b1068cd        docker.io/registry:2.2   "/bin/registry /etc/d"   About a minute ago   Up About a minute   0.0.0.0:5000->5000/tcp   my_registry
         
由上可以看到,已经启动了一个容器,地址为:192.168.1.23:5000。
         
2)测试
接下来可以把一个本地镜像push(如下面的tomcat7镜像)到私有仓库中。
[root@localhost ~]# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
tomcat              7-jre7              97c6a43dd69c        18 minutes ago      562.3 MB
docker.io/registry   2.2                 ad379b517aa6        14 months ago       224.5 MB
         
修改一下该镜像的tag标识。
[root@localhost ~]# docker tag tomcat:7-jre 192.168.1.23:5000/tomcat:7-jre7
      
[root@localhost ~]# docker images       //修改了tag后的镜像若要删除,docker rmi后面不能用镜像ID了,需要用docker rmi 192.168.1.23:5000/tomcat7:latest
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
192.168.1.23:5000/tomcat   7-jre7              97c6a43dd69c        18 minutes ago      562.3 MB
tomcat                     7-jre7              97c6a43dd69c        18 minutes ago      562.3 MB
docker.io/registry          2.2                 ad379b517aa6        14 months ago       224.5 MB
      
接下来把上面修改tag后的镜像上传到私有仓库。
[root@localhost ~]# docker push 192.168.1.23:5000/tomcat:7-jre7
The push refers to a repository [192.168.1.23:5000/tomcat:7-jre7]
unable to ping registry endpoint https://192.168.1.23:5000/v0/
v2 ping attempt failed with error: Get https://192.168.1.23:5000/v2/: http: server gave HTTP response to HTTPS client
v1 ping attempt failed with error: Get https://192.168.1.23:5000/v1/_ping: http: server gave HTTP response to HTTPS client
         
出现上面错误的原因分析:
因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。
为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。
目前很多文章都是通过修改docker的配置文件“etc/systemconfig/docker",重启docker来解决这个问题。
但发现docker1.12.3版本并无此文件,根据网上创建此文件,并填入相应内容,重启docker无效果,仍然报此错误。

解决方法:
在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入:
{ "insecure-registries":["192.168.1.23:5000"] }

-----------------------------------------------------------------------------------------------------------
温馨提示:
这个是在客户机的docker配置文件里添加的(即上传镜像到私有仓库里或从私有仓库下载镜像的客户机)。
比如说在A机器上将它的镜像上传到192.168.1.23的私有仓库上或从该私有仓库下载镜像,那么就在A机器的本地docker配置文件中添加。
我这里测试用的是同一台机器,即将注册机192.168.1.23本机的镜像上传到它的仓库内。
-----------------------------------------------------------------------------------------------------------
         
[root@localhost ~]# service docker restart
         
由于docker服务重启后,所有容器都会被关闭。所以需要在docker重启后再次启动容器
[root@localhost ~]# docker start my_registry
my_registry
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED              STATUS              PORTS                    NAMES
d8e98b1068cd        docker.io/registry:2.2   "/bin/registry /etc/d"   About a minute ago   Up About a minute   0.0.0.0:5000->5000/tcp   my_registry
         
再次提交到私有仓库
[root@localhost ~]# docker push 192.168.1.23:5000/tomcat:7-jre7
The push refers to a repository [192.168.1.23:5000/tomcat:7-jre7]
c6d7ce9e90d7: Pushed
34e7b85d83e4: Pushed
latest: digest: sha256:5fdcbaf254cb44dd26645f606cccea8de76118baff03485e40853c691a15956d size: 720
       
上面命令执行无误后,就表示镜像已经push到私有仓库中去了。
查看私有仓库里的镜像(一定要保证下面能查看到仓库里有镜像!如果仓库里没有镜像,那么客户端机器就无法从该私有仓库下载镜像了)
[root@localhost ~]# curl -XGET http://192.168.1.23:5000/v2/_catalog    //即该私有仓库里有tomcat7镜像 
{"repositories":["tomcat"]}
[root@localhost ~]# curl -XGET http://192.168.1.23:5000/v2/tomcat/tags/list
{"name":"tomcat","tags":["7-jre7"]}
或者浏览器里访问(103.110.186.23是注册机的外网ip,iptables防火墙内开放5000端口访问):
http://103.110.186.23:5000/v2/_catalog
http://103.110.186.23:5000/v2/tomcat/tags/list
     
现在可以将本地的tomcat7和192.168.1.23:5000/tomcat7镜像都删除,然后从私有仓库中下载
[root@localhost ~]# docker rmi tomcat:7-jre7
[root@localhost ~]# docker rmi 192.168.1.23:5000/tomcat:7-jre7
     
[root@localhost ~]# docker pull 192.168.1.23:5000/tomcat:7-jre7
[root@localhost ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
192.168.1.23:5000/tomcat   7-jre7              5hc8a2ip413w        3 days ago          562.3 MB
     
-----------------------------------------------------------------------------
这样,也就可以在同一局域网内的其他机器上,从该私有仓库中pull下来该镜像。
比如从192.168.1.17上拉取该私有仓库的tomcat镜像进行容器创建(注意,要在该机器docker配置文件去修改,以便支持http的仓库
[root@linux-node2 ~]# docker pull 192.168.1.23:5000/tomcat:7-jre7
       
[root@linux-node2 ~]# docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
192.168.1.23:5000/tomcat   7-jre7              2ec9e2eb978a        3 days ago          562.3 MB
       
这样就搭建了Docker私有仓库,上面搭建的仓库是不需要认证的,我们可以结合nginx和https实现认证和加密功能。

注意查看镜像方法:

1
2
curl -XGET http://registry_ip:5000/v2/_catalog                   (其中registry_ip换为私有仓库的ip)
curl -XGET http://registry_ip:5000/v2/image_name/tags/list    (其中image_name换为实际的镜像名称)

参考文章:

http://www.cnblogs.com/kevingrace/p/6628062.html

http://www.cnblogs.com/lin1/p/6207348.html

Docker私有仓库Registry使用相关推荐

  1. docker私有仓库registry(v2)的搭建

    1.上传rpm文件,解压 yum文件: 链接:https://pan.baidu.com/s/1_tSwm2jqXqrV2mbMk0C80g  提取码:5gd7 [root@k8smaster01 z ...

  2. Docker 私有仓库registry

    Docker官方的Docker hub(https://hub.docker.com)是一个用于管理公共镜像的仓库,我们可以从上面拉取镜像到本地,也可以把我们自己的镜像推送上去.但是,有时候我们的服务 ...

  3. 搭建Docker环境---私有仓库registry搭建

    环境 服务端机器 (主机名为192.168.1.2):docker私有仓库服务器,运行registry容器 1 下载镜像registry # docker pull registry 2 查看镜下是否 ...

  4. docker 查询或获取私有仓库(registry)中的镜像

    docker 查询或获取私有仓库(registry)中的镜像,使用 docker search 192.168.1.8:5000 命令经测试不好使. 解决: 1.获取仓库类的镜像: [root@sha ...

  5. 如何在CentOS 7.x / RHEL 7.x上搭建Docker Private Registry(Docker私有仓库)

    原作者:Pradeep Kumar  转载来源:https://www.linuxtechi.com/setup-docker-private-registry-centos-7-rhel-7/ 如何 ...

  6. 客快物流大数据项目(十八):Docker私有仓库

    目录 Docker私有仓库 一.registry 的搭建 1.搭建 2.验证

  7. (六)构建Docker私有仓库、Gitlab仓库和持续集成环境

    环境说明 IP 功能 eth0:192.168.124.139 eth1:172.16.100.10 Docker私有仓库.Gitlab.持续集成 eth0:192.168.124.138 eth1: ...

  8. 部署docker-consul群集,Harbor构建Docker私有仓库

    文章目录 部署docker-consul群集,Harbor构建Docker私有仓库 了解Harvor 案例概述 Docker consul服务了解 部署Harbor服务过程 不是本地上传镜像操作 在用 ...

  9. 使用Harbor构建docker私有仓库

    目录 一.概述 1.什么是Harbor 2.Harbor的优势 3.Docker私有仓库架构 4.Harbor 配置文件以及相关参数 (1)所需参数 (2)可选参数 二.使用Harbor构建docke ...

最新文章

  1. Android2.3解析json出错
  2. 特殊时期,对数据中心运营有哪些影响?
  3. python程序移植到linux,如何使python或perl脚本可移植到Linux和Windows?
  4. QT 之 TCP/IP 服务器和客户端(一)
  5. 代码小结:时区的时间问题
  6. FB面经Prepare: Dot Product
  7. Android Mac下反编译apk
  8. mysql emoji 显示不出来_解决 Mysql 存取 emoji 表情的问题
  9. django不修改数据库创外键_【实战演练】Python+Django网站开发系列03-Django初始配置与静态Index页面开发...
  10. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第5节 使用骨架创建maven的java工程_14maven工程servlet实例之指定web文件夹...
  11. 中国无线电频率分配表
  12. megui 2913 汉化版 压制特效的方法
  13. 读研整活笔记1:调研编译器solang
  14. 使用usb tplink无线网卡搭建无线热点AP
  15. ES 创建太多 buckets 错误: trying to create too many buckets. must be less than or equal to: [100000] but w
  16. vs+qt 设置应用程序图标
  17. 2019最实用的8种精准微信引流方法教程
  18. h5中performance.timing轻松获取网页各个数据 如dom加载时间 渲染时长 加载完触发时间...
  19. Pandas读取excel文件(pandas.read_excel)
  20. JS判断日期是否超过六个月

热门文章

  1. 如何检测PC上插了多少个摄像机?并进行多摄像头同步录制?
  2. excel数据拆分怎么做
  3. 应用服务器(App Server)
  4. 腾讯视频全网清晰度提升攻坚战
  5. Labview表达式节点的应用——以一个计算式为例
  6. 苹果手机如何找回id密码_上海iPhone11苹果手机被偷找回
  7. mycat 跨库间连表查询解决方案
  8. LWN: USB数据采集和分析方案
  9. 调问开源问卷系统(DWSurvey)详细部署教程(手把手教程)
  10. Mac安装--locust压力测试