本文共 9450 字,大约阅读时间需要 31 分钟。
仓库 (Repository)是集中存放镜像的地方, docker 仓库分为公有仓库和私有仓库,然而公有仓库在某些情况下并不适用于公司内部传输,所以在这边我来搭建私有环境的 registry 。那私有仓库较公有仓库有以下优点:
下面我们来创建私有仓库,实现 docker client 通过 docker registry 上传和下载 docker images,最后说下docker registry 的存储方式。
本实验要达到的效果是:
1、docker registry 上面创建私有 docker registry
2、通过 docker client 将所有 images 上传到 docker registry 3、在 docker client 上面的所有 images 删除,再从 docker registry 中下载环境:
系统:Centos 7 内核版本:3.10.0-229.el7.x86_64 docker 版本:1.8.2docker_registry_ip : 10.1.0.100 docker_client_ip : 10.1.0.101
关闭 selinux、firewalld
我在搭建仓库的时候遇到过因为防火墙的问题,docker client 上传到 docker registry 的 images 文件无法存储于本地。以及在 docker registry 中一些受限的问题,所以在此先关闭一切与本文无关的东西。并且在 docker registry 和 docker client 主机中设置 docker 启动参数,–insecure-registry=10.1.0.100:5000 说明 docker registry 10.1.0.100:5000 是安全受信的registry 。然后启动,不然后面会报错。
systemctl stop firewalld.servicesystemctl disable firewalld.servicevim /etc/selinux/config 改为:SELINUX=disabledsetenforce 0vim /etc/sysconfig/docker将启动参数 OPTIONS='--selinux-enabled' 改为:OPTIONS='--selinux-enabled --insecure-registry=10.1.0.100:5000'
在 docker registry 上面搭建自己的私有仓库
docker pull registry docker run -dit --name registry -p 5000:5000 -v /data/registry:/tmp/registrt registry[root@docker-100 ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESc9c059970aec registry "docker-registry" 56 seconds ago Up 50 seconds 0.0.0.0:5000->5000/tcp registry[root@docker-100 ~]#
这时候可以看到,我通过 registry 镜像生成了名称为 registry 的容器,并且挂载容器卷,/data/registry:/tmp/registry(仓库内部的挂载目录一定要是 /tmp/registry,因为 docker registry 在运行后会在 /tmp/ 下面生成一个叫 docker-registry.db 的库文件,默认就是 /tmp/registry 目录来存放 images) ,并且我映射了 5000 端口
下面是我的 docker registry images 和 container,可以看到只有一个镜像 registry
[root@docker-100 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEregistry latest a8706c2bfd21 2 days ago 422.8 MB[root@docker-100 ~]# [root@docker-100 ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESc9c059970aec registry "docker-registry" 3 minutes ago Up 3 minutes 0.0.0.0:5000->5000/tcp registry[root@docker-100 ~]#
现在把 docker client 上传 images 到 docker registry
先来看看 docker client 上面有哪些 images[root@docker-101 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEdocker.io/swarm latest e9ff33e7e5b9 2 days ago 17.15 MBregistry latest a8706c2bfd21 2 days ago 422.8 MBtomcat latest 1b8329afb263 3 days ago 350 MBlogstash latest 9a68a1a0c829 3 days ago 447.4 MBubuntu latest d55e68e6cc9c 3 days ago 187.9 MBnginx latest 6ffc02088cb8 3 days ago 133.8 MBredis latest bca7dc7cfafe 7 days ago 109.1 MBmysql latest a5ad9eb2ff48 7 days ago 359.8 MBcentos latest ce20c473cd8a 8 weeks ago 172.3 MB[root@docker-101 ~]#
可以看到,我的 docker client中有很多镜像,而 docker registry 上面只有 registry 一个镜像,现在我要做的就是把 docker client 中的所有镜像全部上传到 docker registry。
下面我将修改 images 的 tag 用于上传到 docker registry ,修改完成后都是 10.1.0.100:5000/images ,说明我的注册服务器与仓库是 10.1.0.100:5000 与 images_name
[root@docker-100 ~]# docker images |grep 10.1.0.10010.1.0.100:5000/swarm latest e9ff33e7e5b9 2 days ago 17.15 MB10.1.0.100:5000/registry latest a8706c2bfd21 2 days ago 422.8 MB10.1.0.100:5000/tomcat latest 1b8329afb263 3 days ago 350 MB10.1.0.100:5000/logstash latest 9a68a1a0c829 3 days ago 447.4 MB10.1.0.100:5000/ubuntu latest d55e68e6cc9c 3 days ago 187.9 MB10.1.0.100:5000/nginx latest 6ffc02088cb8 3 days ago 133.8 MB10.1.0.100:5000/redis latest bca7dc7cfafe 7 days ago 109.1 MB10.1.0.100:5000/mysql latest a5ad9eb2ff48 7 days ago 359.8 MB10.1.0.100:5000/centos latest ce20c473cd8a 8 weeks ago 172.3 MB[root@docker-100 ~]#
将 docker client 的 images 上传到 docker registry
docker push 10.1.0.100:5000/swarm && docker push 10.1.0.100:5000/registry && docker push 10.1.0.100:5000/tomcat && docker push 10.1.0.100:5000/logstash && docker push 10.1.0.100:5000/ubuntu && docker push 10.1.0.100:5000/nginx && docker push 10.1.0.100:5000/redis && docker push 10.1.0.100:5000/mysql && docker push 10.1.0.100:5000/centos
漫长的等待之后,我们可以通过 curl 10.1.0.100:5000/v1/search ,也可以 curl -s 10.1.0.100:5000/v1/search | python -mjson.tool 以友好的方式查看所上传的 images
[root@docker-100 ~]# curl 10.1.0.100:5000/v1/search
{“num_results”: 9, “query”: “”, “results”: [{“description”: “”, “name”: “library/swarm”}, {“description”: “”, “name”: “library/registry”}, {“description”: “”, “name”: “library/tomcat”}, {“description”: “”, “name”: “library/logstash”}, {“description”: “”, “name”: “library/ubuntu”}, {“description”: “”, “name”: “library/nginx”}, {“description”: “”, “name”: “library/redis”}, {“description”: “”, “name”: “library/mysql”}, {“description”: “”, “name”: “library/centos”}]}[root@docker-100 ~]#docker registry 主机的 -v 挂载目录中也可以查看 images信息。 ls /data/registry/repositories/library
[root@docker-100 ~]# ls /data/registry/repositories/library/centos logstash mysql nginx redis registry swarm tomcat ubuntu[root@docker-100 ~]#
清空 docker client 端的 images , 并通过 docker registry 下载
好,现在镜像都已经上传完,我们清空 docker client 的imagesdocker rmi 10.1.0.100:5000/swarmdocker rmi 10.1.0.100:5000/tomcatdocker rmi 10.1.0.100:5000/logstashdocker rmi 10.1.0.100:5000/nginxdocker rmi 10.1.0.100:5000/redisdocker rmi 10.1.0.100:5000/mysqldocker rmi 10.1.0.100:5000/centos本地images已经清空[root@docker-101 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE[root@docker-101 ~]#
从 docker registry 下载 images ,恢复刚才所删除的镜像
docker pull 10.1.0.100:5000/swarm && docker pull 10.1.0.100:5000/registry && docker pull 10.1.0.100:5000/tomcat && docker pull 10.1.0.100:5000/logstash && docker pull 10.1.0.100:5000/ubuntu && docker pull 10.1.0.100:5000/nginx && docker pull 10.1.0.100:5000/redis && docker pull 10.1.0.100:5000/mysql && docker pull 10.1.0.100:5000/centos
等执行完全部命令,并且等待几秒钟后就可以 docker images 查看镜像
下面简单说一下 docker registry 中 images 的存储目录和本地挂载的容器卷存储结构吧
在 docker 仓库中,默认情况下,会将仓库创建在容器的 /tmp/registry 目录下,并且在 /tmp 目录下面会生成一个 docker-registry.db 的文件
而在 -v 挂载的本地容器卷目录(/data/registry) 和 容器默认存放目录(/tmp/registry)中的内容是相同的。它们都存储 image 与 images 中间件信息。我们可以通过 tree /data/registry 看看。
那 /data/registry 下面又有两个目录,其实一个是 images,另一个则是 repositories,其实 images 下面是存放 images 本身和中间件的所有数据(json、layer)。而 repositories 下面呢,是存放 images 的基础信息。
[root@docker-101 ~]# tree /data/registry//data/registry/├── images│ ├── 135dee14f8e538b8d04296029ee7ed5d62ed87eaf10633355afb9ec94d7e83dc│ │ ├── ancestry│ │ ├── _checksum│ │ ├── json│ │ └── layer│ ├── 649cd8bc367df0243b410073c33b3adbe19c0397c3512779ac405e3a29b162d5│ │ ├── ancestry│ │ ├── _checksum│ │ ├── json│ │ └── layer│ ├── 6ba107a3f0e5709fa3407c5472ac64aa78428ebc606f7af01ead42adf1552bb7│ │ ├── ancestry│ │ ├── _checksum│ │ ├── json│ │ └── layer│ ├── 74b8cab4d48740b88f44216f0baa396d28ea3ef498430254197c1f8f14748a38│ │ ├── ancestry│ │ ├── _checksum│ │ ├── json│ │ └── layer│ ├── 87c759aff157e27b5a38356fea87cf2f8699182d8db691de6961bffa7c70c9fd│ │ ├── ancestry│ │ ├── _checksum│ │ ├── json│ │ └── layer│ ├── 9377ad319b00884df249b7820e3cf540b1c4631b3b1ee6998a0f7c3d53962e03│ │ ├── ancestry│ │ ├── _checksum│ │ ├── json│ │ └── layer│ ├── 9f68a2463722c79892577997eb7a249bd0f9f6bf7f18596e9d8df19aee59bb4d│ │ ├── ancestry│ │ ├── _checksum│ │ ├── json│ │ └── layer│ ├── a82f81f257507f5cb74e833ff1ae4a6a39dfa654a161f5393f641832872b87d3│ │ ├── ancestry│ │ ├── _checksum│ │ ├── json│ │ └── layer│ ├── a8706c2bfd2161dec04df0133d7fae1fb0c76d3852d2175e704c642278a110a2│ │ ├── ancestry│ │ ├── _checksum│ │ ├── json│ │ └── layer│ ├── b207c06aba70227e0a2561bb7df20a5fd1310901da98ecc6f4da7dccdc40d961│ │ ├── ancestry│ │ ├── _checksum│ │ ├── json│ │ └── layer│ ├── b7e3ce2506a310efc0d27720d405fa9c331441705a1c4884974efd30a3a5b4d2│ │ ├── ancestry│ │ ├── _checksum│ │ ├── json│ │ └── layer│ ├── d1e0a63e6c8c6c67ed89ef0b8fa2fa2182d96494316c05197dfb06a786e88813│ │ ├── ancestry│ │ ├── _checksum│ │ ├── json│ │ └── layer│ ├── d55e68e6cc9c7f78f1c02001e1a5ce76511db044c659e5c0a4275c54473f2869│ │ ├── ancestry│ │ ├── _checksum│ │ ├── json│ │ └── layer│ └── e48bab29b63c2c89a257e725c9c07dfa047ee4ef7442c358b54fdd3c02c309f5│ ├── ancestry│ ├── _checksum│ ├── json│ └── layer└── repositories └── library └── registry ├── _index_images ├── json ├── tag_latest └── taglatest_json18 directories, 60 files[root@docker-101 ~]#
转载地址:http://jwbsa.baihongyu.com/