本文将介绍如何搭建最简单的私有镜像仓库——Docker Registry。
首先,你需要使用 docker pull 命令拉取镜像:
然后,我们需要做一个端口映射,对外暴露端口,这样 Docker Registry 才能提供服务。它的容器内端口是 5000,简单起见,我们在外面也使用同样的 5000 端口,所以运行命令:
1 # docker run -d -p 5000:5000 registry
启动 Docker Registry 之后,你可以使用 docker ps 查看它的运行状态,可以看到它确实把本机的 5000 端口映射到了容器内的 5000 端口。
1 2 3 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 77936b6bce8e registry "/entrypoint.sh /etc…" About a minute ago Up 59 seconds 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp stoic_hoover
接下来,我们就要使用 docker tag 命令给镜像打标签再上传了。因为上传的目标不是默认的 Docker Hub,而是本地的私有仓库,所以镜像的名字前面还必须再加上仓库的地址(域名或者 IP 地址都行),形式上和 HTTP 的 URL 非常像。
比如在这里,我就把“nginx:alpine”改成了“127.0.0.1:5000/nginx:alpine”:
1 # docker tag nginx:alpine 127.0.0.1:5000/nginx:alpine
现在,这个镜像有了一个附加仓库地址的完整名字,就可以用 docker push 推上去了:
1 2 3 4 5 6 7 8 9 $ docker push 127.0.0.1:5000/nginx:alpine The push refers to repository [127.0.0.1:5000/nginx] bf4e176a4d9b: Pushed a1d571e4e83d: Pushed 6d97b4d00719: Pushed 2a7647ca3937: Pushed 549c42eea4a6: Pushed 994393dc58e7: Pushed alpine: digest: sha256:2959a35e1b1e61e2419c01e0e457f75497e02d039360a658b66ff2d4caab19c4 size: 1568
为了验证是否已经成功推送,我们可以把刚才打标签的镜像删掉,再重新下载:
1 2 3 4 5 6 7 8 9 $ docker rmi 127.0.0.1:5000/nginx:alpine Untagged: 127.0.0.1:5000/nginx:alpine Untagged: 127.0.0.1:5000/nginx@sha256:2959a35e1b1e61e2419c01e0e457f75497e02d039360a658b66ff2d4caab19c4 $ docker pull 127.0.0.1:5000/nginx:alpine alpine: Pulling from nginx Digest: sha256:2959a35e1b1e61e2419c01e0e457f75497e02d039360a658b66ff2d4caab19c4 Status: Downloaded newer image for 127.0.0.1:5000/nginx:alpine 127.0.0.1:5000/nginx:alpine
Docker Registry 虽然没有图形界面,但提供了 RESTful API,也可以发送 HTTP 请求来查看仓库里的镜像:
1 2 3 4 5 $ curl 127.1:5000/v2/_catalog {"repositories":["nginx"]} $ curl 127.1:5000/v2/nginx/tags/list {"name":"nginx","tags":["alpine"]}
可以看到,因为应用被封装到了镜像里,所以我们只用简单的一两条命令就完成了私有仓库的搭建工作,完全不需要复杂的软件安装、环境设置、调试测试等繁琐的操作,提升了效率。
参考资料