Docker官方的Docker hub虽然提供了有很多image,也基本上包括了我们需要使用的,但是其访问起来比较慢,如果自己要定制image,多台http://www.wfuyu.com/server/之间的同享使用此image非常不方便。这个时候我们就迫切需要1个本地的私有仓库了。下面的图说明了Docker私有仓库的作用。
Docker私有仓库可以通过docker-registry项目来实现,通过http服务来上传下载。docker-registry在Docker hub上已有现成的image。
$ docker search registry
选择第1个,将其从Docker hub上down下来(最好带tag,不然会将所有的tag都down下来)。
$ docker pull registry
这个下载的进程有点长,耐心等待1下,O(∩_∩)O哈哈~。
$ docker images
registry镜像下下来后,通过下面的命令启动,并将registry的容器存储images的目录映照到宿主http://www.wfuyu.com/server/的/opt/docker/registry目录。
$ docker run -d -p 5000:5000 -v /opt/docker/registry:/tmp/registry registry
启动以后在阅读器中输入http://主机IP:5000或http://主机IP:5000/v1/search,如果有显示就说明Docker私有仓库已建好了。下1步将本地的images
push到Docker私有仓库。
现将本地的image打1个tag,新image名称必须带有"主机IP:5000",以下(我这里用127.0.0.1只是举例)。
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
registry latest 5562556b14f9 8 days ago 422.9 MB
127.0.0.1:5000/registry latest 5562556b14f9 8 days ago 422.9 MB
如果缺少上面这1步,直接push image,会出现以下毛病。
[docker@docker1 ~]$ docker push registry
The push refers to a repository [registry] (len: 1)
Sending image list
2014/10/27 15:48:25 Error: Status 403 trying to push repository registry: Account is not Active
履行以下push命令后,可以在http://主机IP:5000/v1/search看到存储到Docker私有仓库的信息。
$ docker push 127.0.0.1:5000/registry
下次可以通过pull命令下载到其他http://www.wfuyu.com/server/上,那可就快多了。pull的时候记得带"主机IP:5000",不然还是去Docker hub上下载而不是私有仓库下载,以下命令。
$ docker pull 127.0.0.1:5000/registry
到此,私有仓库存取image就能够了。
如果是save/load的image,会出现下面的毛病,对这样的image,最好重新build相应的Dockerfile。
[docker@docker1 ~] $docker push 127.0.0.1:5000/nexus
The push refers to a repository [127.0.0.1:5000/nexus] (len: 1)
Sending image list
Pushing repository 127.0.0.1:5000/nexus (1 tags)
2014/10/27 14:50:37 HTTP code 400 while uploading metadata: {"error": "Missing key `id' in JSON"}