社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
题记
一般情况下,如果我们的计算机在联网环境下,我们就可以直接通过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
设置重启策略:使用在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
注意:如果你先进行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。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!