详解Docker私有仓库最简便的搭建方法
Doker在业界的应用越来越广泛,怎么用户管理好自己的镜像、容器等就是一个迫在眉睫的任务。
由于业务需要,我们需要在搭建一套自己的Docker私有镜像仓库,网上找了很多,都是说要pull一个regisitry镜像,然后通过这个镜像启动一个容器来运行仓库应用,我按照官网的说明pull了一个registry,但是启动的时候有报错,具体是什么就不细说了,反正是有错,于是开始研究别的方法,别说还真找到了一个,而且是我发现的最简便的办法,我不知道我是不是国内第一个发现的,但我应该是第一个写出来给大家参考的。
下面不废话,直接说方法:
- 首先,你的系统要是CentOS7.0以上,因为内核的要求,以及各种相关的库和软件的需要,以及epel的需要。
- 直接安装docker-registry这个包。
- 稍微修改一下配置,让你的私有仓库支持http,因为从docker1.3.2开始,dockerregistry默认都是使用https协议而不使用http,甭管你从dockerhub上找你需要的镜像,还是你自己打出来的privateregistry。
- 重启相关的docker服务。
- 测试及使用。
下面就详细列一下每一步的步骤:
使用CentOS7.X系统,添加epel源,并更新系统到最新版本,重启让新的内核生效。
#wget-O/etc/yum.repos.d/epel.repohttp://mirrors.aliyun.com/repo/epel-7.repo #yumcleanall #yummakecache #yumupdate-y #reboot
安装docker相关的服务,其中docker-registry这个最重要,因为这就是私有仓库的服务,有了这个服务就不需要像网上一样去pull镜像,然后再起一个容器。
#yuminstalldockerdocker-registry-y
如果不需要开发相关的接口调用程序,这两个就够了,如果需要开发就直接安装所有的docker包,一共也没几个。但是最好把docker-latest和docker-latest-logrotate两个包卸载掉,因为这俩是docker客户端,版本是1.12跟server的版本1.10不是太匹配。
#yuminstalldocker*-y #yumremovedocker-latest*-y
把docker的两个服务设置为自动启动,并让其运行。
#systemctlenabledocker #systemctlstartdocker #systemctlenabledocker-registry #systemctlstartdocker-registry
查看一下本机监听的端口,是不是有5000这个端口了?5000端口就是默认的docker-registry监听端口,当然,这个你可以根据自己喜欢进行修改。
[root@01/]#netstat-tnlp ActiveInternetconnections(onlyservers) ProtoRecv-QSend-QLocalAddressForeignAddressStatePID/Programname tcp000.0.0.0:220.0.0.0:*LISTEN1109/sshd tcp00127.0.0.1:250.0.0.0:*LISTEN1384/master tcp000.0.0.0:50000.0.0.0:*LISTEN20437/python tcp600:::22:::*LISTEN1109/sshd tcp600::1:25:::*LISTEN1384/master
测试一下是不是能通过网络进行访问了?
[root@01/]#curl"http://192.168.1.107:5000" "\\"docker-registryserver\\""[root@01/]# [root@01/]#
既然可以访问了,那就往这上面push一个镜像来测试一下吧。这个需要你首先tag一个镜像,然后才能push上去。以我目前的已经有的镜像为例。
[root@01/]#dockertagcfba59e097ba192.168.1.107:5000/test1 [root@01/]#dockerimages REPOSITORYTAGIMAGEIDCREATEDSIZE 192.168.1.107:5000/test1latestac0b483c17fa3daysago634.6MB docker.io/redminelatestcfba59e097ba3daysago634.6MB docker.io/registrylatestc9bd19d022f62weeksago33.27MB [root@01/]#
现在push的话有报错,如下。
[root@01/]#dockerpull192.168.1.107:5000/test1 Usingdefaulttag:latest Tryingtopullrepository192.168.1.107:5000/test1... unabletopingregistryendpointhttps://192.168.1.107:5000/v0/ v2pingattemptfailedwitherror:Gethttps://192.168.1.107:5000/v2/:EOF v1pingattemptfailedwitherror:Gethttps://192.168.1.107:5000/v1/_ping:EOF [root@01/]#
但是基本上一眼就能看出来,地址里都是https,而我现在能访问的只是http,所以,就需要解决启用http的问题,因为我的需求是在内网里搭建,外网无法访问,何必要加密,只会拖慢速度。接下来就是修改对应的配置文件,启用http,这个配置文件也是有说这个有说那个的,下面的才是正确的配置文件,亲测有效,如下。
[root@01/]#vim/etc/sysconfig/docker
把下面这一行添加进去。
OPTIONS='--insecure-registry192.168.1.107:5000'
重启docker服务。
[root@01/]#systemctlrestartdockerdocker-registry
再次push,成功完成。
[root@01system]#dockerpush192.168.1.107:5000/test1 Thepushreferstoarepository[192.168.1.107:5000/test1] 07c28c5d0371:Imagesuccessfullypushed 6365a80ad26a:Imagesuccessfullypushed c5e7c0f1d017:Imagesuccessfullypushed b45f06d28f46:Imagesuccessfullypushed 3f3c0394ba5a:Imagesuccessfullypushed ddd6e2a8209e:Imagesuccessfullypushed f306cb9361f7:Imagesuccessfullypushed 2d143a3783bc:Imagesuccessfullypushed f110684b8ae3:Imagesuccessfullypushed d7d24df90586:Imagesuccessfullypushed e26addf75a78:Imagesuccessfullypushed 82c666956815:Imagesuccessfullypushed 9a2b1c643e93:Imagesuccessfullypushed eb9546f264dc:Imagesuccessfullypushed f96222d75c55:Imagesuccessfullypushed Pushingtagforrev[cfba59e097ba]on{http://192.168.1.107:5000/v1/repositories/test1/tags/latest} [root@01system]#
既然成功了,就往下pull一下试试,看看能不能让别的机器用,结果当然也是成功的,因为我已经pull过了,所以显示镜像已经存在,如下。
[root@01/]#dockerpull192.168.1.107:5000/test1 Usingdefaulttag:latest Tryingtopullrepository192.168.1.107:5000/test1... Pullingrepository192.168.1.107:5000/test1 cfba59e097ba:Alreadyexists f96222d75c55:Alreadyexists d17727727b61:Alreadyexists 92db66c8ffce:Alreadyexists 10a436a2f8fa:Alreadyexists 8b40995a66da:Alreadyexists a2cba87d9ea4:Alreadyexists 5a187c7a57c4:Alreadyexists d15f50d30606:Alreadyexists 4366383cdf86:Alreadyexists c7cb938f30c3:Alreadyexists f135d604f740:Alreadyexists 3f3d23c69aef:Alreadyexists e6adcc9c0e4b:Alreadyexists 53289b480679:Alreadyexists Status:Imageisuptodatefor192.168.1.107:5000/test1:latest 192.168.1.107:5000/test1:thisimagewaspulledfromalegacyregistry.Important:Thisregistryversionwillnotbesupportedinfutureversionsofdocker. [root@01/]#
至此,简单的私有仓库已经搭建完毕,后续如果有需求要在公网上提供服务的话,加SSL证书,加用户名/密码等操作按部就班地去完成就行了。IT技术更新很快,可能之前还没有这个服务,只是最近才有,所以,选了这一行就需要一辈子不断学习不断进步才能站在桥头迎风斩浪。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。