Docker Registry——搭建专属的容器仓库 - Go语言中文社区

Docker Registry——搭建专属的容器仓库


题记

一般情况下,如果我们的计算机在联网环境下,我们就可以直接通过docker pull images获得相关的镜像,当然这必须是联网环境,根据用户的网速情况或者镜像的大小有不同的等待,如果我们能够在本地建立一个类似与远程联网的镜像仓库,将我们常用的镜像都放在自己管理的专属仓库,岂不是无需等待,即可快速获得我们希望得到的镜像么.


Docker Registry就是完成搭建本地容器仓库,简单来说就是讲一个专门的服务器作为镜像仓库,启用一个Docker Registry容器实例提供服务。

如上图所示,我们将服务器192.168.12.132作为容器仓库,它应该有一个或者两个网卡,一个可以连接互联网,随时下载或者我们自己生成相关docker镜像,然后通过另外一个容器互联的网络进行分发,其他宿主机可以快速获得镜像仓库里面的镜像。


下面我们就看一下如何搭建专属的容器仓库。

1、由于我们启用的registry服务不是安全可信赖的,所以我们需要在所有参与的物理服务器添加可信参数,具体在/etc/default/docker文件,添加相关参数:--insecure-registry 192.168.12.132:5000

DOCKER_OPTS="-H 0.0.0.0:2375 -H unix:///var/run/docker.sock --insecure-registry 192.168.12.132:5000"
当然,任何希望能够从容器仓库获得镜像的服务器也需要修改相关文件,添加如上信息即可。

重启docker服务

service docker restart

2、从docker hub下载docker registry镜像,然后启动,执行如下命令

 docker run -d -v /root/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2.3.0

root@controller:~# docker run -d -v /root/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2.3.0
Unable to find image 'registry:2.3.0' locally
2.3.0: Pulling from library/registry
fdd5d7827f33: Pull complete
a3ed95caeb02: Pull complete
a79b4a92697e: Pull complete
1881c09fc734: Pull complete
0f24f5ab4e03: Pull complete
Digest: sha256:5b6211cc1aa81916042ef0784ab8c8c2ce745f9dd851a67b2d80bf52a7f1c3c3
Status: Downloaded newer image for registry:2.3.0
cf11bef3fc9dc5262d10797222dc3412433adf47de470350d15d1956df0b644c


上述命令就是启动一个registry:2.3.0版本的镜像实例,如果本地没有,需要下载,Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/root/registry目录挂载到该目录,即可实现将镜像保存到主机的/root/registry目录了。默认registry的端口为5000,如果该端口被占用可以更换其他未占用的端口。

设置重启策略:使用在Docker run的时候使用--restart参数来设置。
no - container不重启
on-failure - container推出状态非0时重启
always - 始终重启

然后我们就可以查看docker运行状态以及镜像情况

root@controller:~# docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
swarm                   latest              a180b24e38ed        4 weeks ago         19.34 MB
docker/ucp-proxy        1.1.1               354629dc8529        5 weeks ago         17.43 MB
docker/ucp-cfssl        1.1.1               3b3684098101        5 weeks ago         53.61 MB
docker/ucp              latest              40fe8a8c618e        5 weeks ago         20.49 MB
docker/ucp-auth         1.1.1               7b0a22fd86df        5 weeks ago         26.82 MB
docker/ucp-controller   1.1.1               c1ada015cdb4        5 weeks ago         26.23 MB
docker/ucp-etcd         1.1.1               cb7711a7fea2        5 weeks ago         35.31 MB
docker/ucp-compose      1.1.1               c6565efb4f69        5 weeks ago         58.61 MB
docker/ucp-auth-store   1.1.1               4fbf8982055b        5 weeks ago         57.78 MB
docker/ucp-swarm        1.1.1               7a1bcedacf02        5 weeks ago         19.34 MB
docker/ucp-dsinfo       1.1.1               782b4aca1228        7 weeks ago         68.51 MB
ubuntu                  14.04               b72889fa879c        12 weeks ago        188 MB
registry                2.3.0               5eaced67751b        4 months ago        165.7 MB




root@controller:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                    NAMES
cf11bef3fc9d        registry:2.3.0      "/bin/registry /etc/d"   About a minute ago   Up About a minute   0.0.0.0:5000->5000/tcp   registry

接下来我们需要通过http://192.168.12.132:5000/v2来判断registry服务是否正常启动,如果出现“{}”既可以说明服务运行正常。



注意:如果你先进行docker  pull registry操作,系统会下载一个latest版本的镜像,然后通过同样的命令启用:docker run -d -v /root/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest,虽然实例启动了,但是服务还是不能正常运行。


3、我们可以看到,132本地镜像有一个ubuntu镜像,我们修改下相关的tag,让他的标记更加的明显

root@controller:~# docker tag ubuntu:14.04 192.168.12.132:5000/ubuntu:14.04
root@controller:~# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
swarm                        latest              a180b24e38ed        4 weeks ago         19.34 MB
docker/ucp-proxy             1.1.1               354629dc8529        5 weeks ago         17.43 MB
docker/ucp-cfssl             1.1.1               3b3684098101        5 weeks ago         53.61 MB
docker/ucp                   latest              40fe8a8c618e        5 weeks ago         20.49 MB
docker/ucp-auth              1.1.1               7b0a22fd86df        5 weeks ago         26.82 MB
docker/ucp-controller        1.1.1               c1ada015cdb4        5 weeks ago         26.23 MB
docker/ucp-etcd              1.1.1               cb7711a7fea2        5 weeks ago         35.31 MB
docker/ucp-compose           1.1.1               c6565efb4f69        5 weeks ago         58.61 MB
docker/ucp-auth-store        1.1.1               4fbf8982055b        5 weeks ago         57.78 MB
docker/ucp-swarm             1.1.1               7a1bcedacf02        5 weeks ago         19.34 MB
docker/ucp-dsinfo            1.1.1               782b4aca1228        7 weeks ago         68.51 MB
192.168.12.132:5000/ubuntu   14.04               b72889fa879c        12 weeks ago        188 MB
ubuntu                       14.04               b72889fa879c        12 weeks ago        188 MB
registry                     2.3.0               5eaced67751b        4 months ago        165.7 MB
registry                     latest              bca04f698ba8        5 months ago        422.9 MB
我们看到ubuntu的镜像已经修改了。


4、将ubuntu镜像push到镜像仓库中

root@controller:~# docker push 192.168.12.132:5000/ubuntu:14.04
The push refers to a repository [192.168.12.132:5000/ubuntu]
5f70bf18a086: Pushed
f75f146a5022: Pushed
711b0bd2cb6a: Pushed
595d1d53a534: Pushed
14.04: digest: sha256:f92c2bec713942c44219e8bd513c255543c9acda764ccabbe3f940eca696e97e size: 1151

5、还记得我们已经将镜像仓库的目录挂载到本地/root/registry,我们查看相关目录,查看一下相关的镜像文件。

root@controller:~# cd /root/
.cache/   registry/
root@controller:~# cd /root/registry/docker/registry/v2/
blobs/        repositories/
root@controller:~# cd /root/registry/docker/registry/v2/repositories/
root@controller:~/registry/docker/registry/v2/repositories# ls
ubuntu

我们看到,ubuntu镜像文件已经存储到该目录下



6、接下来,我们只需要确认其他容器服务器的/etc/default/docker文件添加registry可信选项,我们就可以通过docker pull命令下载相关镜像了。

root@docker1:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED
swarm               latest              a180b24e38ed        4 weeks ago
root@docker1:~# docker pull 192.168.12.132:5000/ubuntu:14.04
14.04: Pulling from ubuntu

759d6771041e: Pull complete
8836b825667b: Pull complete
c2f5e51744e6: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:f92c2bec713942c44219e8bd513c255543c9acda764ccabbe3f940eca696e97e
Status: Downloaded newer image for 192.168.12.132:5000/ubuntu:14.04
root@docker1:~# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED
swarm                        latest              a180b24e38ed        4 weeks ago
192.168.12.132:5000/ubuntu   14.04               b72889fa879c        12 weeks ag

当然,都是本地连接,下载速度自然可以得到保障。


上图我们也可以看到,我们的镜像文件可以存储在本地,也可以通过分布式存储软件,我们可以将镜像存储在glusterFS,Ceph,或者OpenStack的Swift。



版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/chinagissoft/article/details/51863895
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2019-10-27 18:38:25
  • 阅读 ( 874 )
  • 分类:docker

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢