Docker Registry——搭建专属的容器仓库
2016-07-11 08:46
816 查看
题记
一般情况下,如果我们的计算机在联网环境下,我们就可以直接通过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服务
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
上述命令就是启动一个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运行状态以及镜像情况
接下来我们需要通过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,让他的标记更加的明显
4、将ubuntu镜像push到镜像仓库中
5、还记得我们已经将镜像仓库的目录挂载到本地/root/registry,我们查看相关目录,查看一下相关的镜像文件。
我们看到,ubuntu镜像文件已经存储到该目录下
6、接下来,我们只需要确认其他容器服务器的/etc/default/docker文件添加registry可信选项,我们就可以通过docker pull命令下载相关镜像了。
当然,都是本地连接,下载速度自然可以得到保障。
上图我们也可以看到,我们的镜像文件可以存储在本地,也可以通过分布式存储软件,我们可以将镜像存储在glusterFS,Ceph,或者OpenStack的Swift。
一般情况下,如果我们的计算机在联网环境下,我们就可以直接通过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。
相关文章推荐
- docker在windows上为啥需要虚拟化。
- docker安装。
- docker镜像
- 不小心一个命令触及到了Docker的底限了,他爆发了
- docker : etcd +flannel 多机互联
- docker 镜像生成
- dockers
- Docker使用---静态网站测试
- 轻松搭建docker应用的mesos集群
- Docker distrubution in django
- docker的一些常用命令整理
- web项目docker化的两种方法
- Docker镜像和仓库笔记
- Docker中部署Kubernetes
- Docker学习笔记2
- docker的php容器安装 memcached
- 非常详细的 Docker 学习笔记
- Docker 1.12.0将要发布的新功能
- 使用Docker实现丝般顺滑的持续集成
- docker源代码编译