去docker hub下载镜像比较慢,而且自己内部的镜像一般要求对速度和安全性要求较高,于是就可以考虑搭建本地仓库registry来实现,下边简单介绍下步骤。
环境:centos 7.2
1,安装docker
yum install docker -y
systemctl start docker.service
systemctl enable docker.service
2,搭建仓库
下载registry
docker search registry
[root@docker5 registry]# docker search registry
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/registry Containerized docker registry 894 [OK]
docker.io docker.io/konradkleine/docker-registry-frontend Browse and modify your Docker registry in ... 99 [OK]
docker.io docker.io/atcol/docker-registry-ui A web UI for easy private/local Docker Reg... 79 [OK]
docker.io docker.io/distribution/registry WARNING: NOT the registry official image!!... 38 [OK]
docker.io docker.io/samalba/docker-registry 36 [OK]
docker.io docker.io/hyper/docker-registry-web Web UI for private docker registry v2. 28 [OK]
docker.io docker.io/marvambass/nginx-registry-proxy Docker Registry Reverse Proxy with Basic A... 27 [OK]
docker.io docker.io/h3nrik/registry-ldap-auth LDAP and Active Directory authentication p... 12 [OK]
docker.io docker.io/jhipster/jhipster-registry JHipster Registry, based on Netflix Eureka... 6 [OK]
[root@docker5 registry]# docker pull docker.io/registry
等待下载完成。
搭建仓库:
docker run -d -p 5000:5000 -v /home/registry:/tmp/registry registry
默认情况下docker会将仓库存放于容器的 /tmp/registry 目录下,可以通过 -v 参数来将镜像文件保存到我们指定的路径。
查看是否运行:
[root@docker5 registry]# netstat -tunlp | grep 5000
tcp6 0 0 :::5000 :::* LISTEN 3791/docker-proxy
更改一个标签:
docker tag mysql:latest 192.168.2.75:5000/mysql20160615
上传测试镜像到本地仓库:
docker push 192.168.2.75:5000/mysql20160615
这里如果是已经创建了https可以操作成功过,如果是http会报错。原因是Docker从1.3.X之后默认docker registry使用的是https,所以当用docker pull命令下载远程镜像时,如果远程docker registry是非https的时候就会报上面的错误。解决办法:
vi /etc/sysconfig/docker
OPTIONS='--selinux-enabled --insecure-registry 192.168.2.75:5000' 其中--insecure-registry 192.168.2.75:5000是自己添加的。
设置以后重启docker和对应容器,重新push一下,成功。
[root@docker5 registry]# docker push 192.168.2.75:5000/testimage
The push refers to a repository [192.168.2.75:5000/testimage] (len: 1)
Sending image list
Pushing repository 192.168.2.75:5000/testimage (1 tags)
3690474eb5b4: Image successfully pushed
b48a20c39b28: Image successfully pushed
c79ebe41b35a: Image successfully pushed
2a332da70fd1: Image successfully pushed
Pushing tag for rev [2a332da70fd1] on {http://192.168.2.75:5000/v1/repositories/testimage/tags/latest}
本地仓库以及url查看状态:
[root@docker5 registry]# ll
total 4
drwxr-xr-x. 6 root root 4096 Jun 22 14:27 images
drwxr-xr-x. 3 root root 20 Jun 22 14:27 repositories
[root@docker5 registry]# du -sh ./*
68M ./images
16K ./repositories
[root@docker5 registry]# curl http://192.168.2.75:5000/v1/search
{"num_results": 1, "query": "", "results": [{"description": "", "name": "library/testimage"}]}[root@docker5 registry]#
本地仓库镜像下载测试验证:
进入另外一台内网机器进行镜像下载测试,比如我的另外一台测试机:192.168.2.76,操作如下:
首先进入修改docker配置文件并重启
OPTIONS='--selinux-enabled --insecure-registry 192.168.2.75:5000' 其中--insecure-registry 192.168.2.75:5000是自己添加的本地仓库地址。
pull过程如下:
[root@docker6 ~]# systemctl restart docker
[root@docker6 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
[root@docker6 ~]# docker pull 192.168.2.75:5000/testimage
Using default tag: latest
2a332da70fd1: Download complete
3690474eb5b4: Download complete
b48a20c39b28: Download complete
c79ebe41b35a: Download complete
Status: Downloaded newer image for 192.168.2.75:5000/testimage:latest
192.168.2.75:5000/testimage: this image was pulled from a legacy registry. Important: This registry version will not be supported in future versions of docker.
[root@docker6 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
192.168.2.75:5000/testimage latest 2a332da70fd1 2 weeks ago 196.7 MB
没有问题,本地仓库搭建成功。