有时候使用 Docker Hub 这样的公共仓库可能不方便,并且公司的私有镜像为了业务安全,也不会push到docker hub上,用户可以创建一个本地仓库供私人使用。类似于git 和maven一样,同时节省服务器下载和上传镜像带宽。我这台服务器已经安装docker1.6版本,至于怎么安装我就不多说了,可以参考这里,centos上部署docker[root@docker data]# docker -v
Docker version 1.6.2, build ba1f6c3/1.6.2
[root@docker data]# uname -r
4.1.2-1.el7.elrepo.x86_64安装docker-registrydocker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry如果本地没有下载过docker-registry,则首次会pull registry 运行时会映射路径和端口,以后就可以从/data/registry下找到私有仓库,这里查看下我本机的镜像[root@docker data]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
docker.io/registry latest ddfbba49d0b6 21 hours ago 423.6 MB
docker.io/centos latest 7322fbe74aa5 3 weeks ago 172.2 MB可以看到registry容器已经启动[root@docker data]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ad3469d9302b registry:latest "docker-registry" 5 minutes ago Up 5 minutes 0.0.0.0:5000->5000/tcp compassionate_newton
4c86d4e541e3 centos:latest "/bin/bash" 23 hours ago Exited (0) 23 hours ago high_galileo
e79a883fdc8b centos:latest "/bin/echo 'Hello Wo 23 hours ago Exited (0) 23 hours ago stoic_lalande访问私有仓库[root@docker data]# curl 127.0.0.1:5000/v1/search
{"num_results": 0, "query": "", "results": []}因为我们还没有像私有容器提交镜像,所以这里返回空,下面我们提交一个镜像试试,上面可以看到我本地有一个registry的镜像使用docker tag将我本地的id为7322fb474aa5的这个镜像标记为127.0.0.1:5000/centos命令格式为docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG][root@docker data]# docker tag 7322fbe74aa5 127.0.0.1:5000/centos
[root@docker data]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
docker.io/registry latest ddfbba49d0b6 21 hours ago 423.6 MB
docker.io/centos latest 7322fbe74aa5 3 weeks ago 172.2 MB
127.0.0.1:5000/centos latest 7322fbe74aa5 3 weeks ago 172.2 MB
[root@docker data]#PUSH 镜像然后我们将这个镜像push到私有镜像库[root@docker data]# docker push 127.0.0.1:5000/centos
The push refers to a repository [127.0.0.1:5000/centos] (len: 1)
Sending image list
Pushing repository 127.0.0.1:5000/centos (1 tags)
f1b10cd84249: Image successfully pushed
c852f6d61e65: Image successfully pushed
7322fbe74aa5: Image successfully pushed
Pushing tag for rev [7322fbe74aa5] on {http://127.0.0.1:5000/v1/repositories/centos/tags/latest}然后我么拿在看下私有仓库中有没有镜像[root@docker data]# curl 127.0.0.1:5000/v1/search
{"num_results": 1, "query": "", "results": [{"description": "", "name": "library/centos"}]}可以看到一家有个叫centos的镜像存在了,就是我刚刚上传的镜像。然后你的其他服务器就可以来下载这个镜像使用了docker pull 192.168.1.222:5000/centos如果本地有很多镜像想批量上传怎么办,可以用这个脚本$ wget https://github.com/yeasy/docker_practice/raw/master/_local/push_images.sh; sudo chmod a+x push_images.sh
$ ./push_images.sh ubuntu:latest centos:centos7这里大家可以看到,访问我们私有库的时候,没有任何权限控制,也就是说别人知道这个仓库地址也可以push 和pull镜像,这样很不安全,大家可以在网络层面,也可以前面加层nginx,然后nginx反向代理本地的5000端口