不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

Docker搭建私有镜像仓库-registry

本文将介绍如何搭建最简单的私有镜像仓库——Docker Registry

首先,你需要使用 docker pull 命令拉取镜像:

1
# docker pull registry

然后,我们需要做一个端口映射,对外暴露端口,这样 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"]}

可以看到,因为应用被封装到了镜像里,所以我们只用简单的一两条命令就完成了私有仓库的搭建工作,完全不需要复杂的软件安装、环境设置、调试测试等繁琐的操作,提升了效率。

参考资料

------ 本文结束------
如果本篇文章对你有帮助,可以给作者加个鸡腿~(*^__^*),感谢鼓励与支持!