有时候使用 Docker Hub 这样的公共仓库可能不方便,并且公司的私有镜像为了业务安全,也不会push到docker hub上,用户可以创建一个本地仓库供私人使用。类似于git 和maven一样,同时节省服务器下载和上传镜像带宽。
那什么是docker registry呢
Docker Registry由三个部分组成:index,registry,registry client。
可以把Index认为是负责登录、负责认证、负责存储镜像信息和负责对外显示的外部实现,而registry则是负责存储镜像的内部实现,而Registry Client则是docker客户端。
我这台服务器已经安装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-registry
docker 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
从上面信息可以分别看出
来自于哪个仓库,比如 centos
镜像的标记,比如 latest 最后一个版本
它的 ID 号(唯一)
创建时间
镜像大小
可以看到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]#
镜像的 ID 唯一标识了镜像,注意到 docker.io/centos和 127.0.0.1:5000/centos具有相同的镜像 ID,说明它们实际上是同一镜像。
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端口
茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔