docker-镜像注册中心-registry实践
前言
- registry - Docker Hub : https://hub.docker.com/_/registry
- 一般情况下我们需要自己的私有仓库来存储自己的私有镜像,因此需要在内部自己搭建一个仓库中心,而docker已经为我们提供了registry,可以方便我们私有仓库的搭建
- docker版的registry还欠缺的一点就是没有提供可视化的管理工具
实践
运行
-
运行容器
sudo docker run -d \ -v /etc/localtime:/etc/localtime:ro \ -v $PWD/registry:/var/lib/registry \ -p 5000:5000 \ --restart always \ --name registry \ registry:2.7
-
上面的命令将会把上传的镜像放置在当前目录的registry目录下
-
容器运行后访问(ip请根据实际宿主机的ip修改)http://192.168.25.215:5000/v2/ ,出现“{}”字符串则表示正常
-
如果想修改registry容器里的监听端口,通过参数 -e REGISTRY_HTTP_ADDR,如
sudo docker run -d \ -v /etc/localtime:/etc/localtime:ro \ -p 5001:5001 \ -e REGISTRY_HTTP_ADDR=0.0.0.0:5001 \ --restart always \ --name registry \ registry:2.7
推送push
-
容器运行成功后即可向私有仓库推送镜像,这里以hello-world为例
-
首先拉取hello-world的镜像
sudo docker pull hello-world
-
为hello-world打tag,比如192.168.25.215:5000/hwj/helloworld:1
sudo docker tag hello-world 192.168.25.215:5000/hwj/helloworld:1
- 其中ip和端口即为私有仓库的ip和端口;hwj表示项目,这里名称可以随意取;helloworld为镜像名,可以随意取;最后的1表示版本号,可以随意取,不写默认latest
-
执行以下命令将helloworld推送到私有仓库
sudo docker push 192.168.25.215:5000/hwj/helloworld:1
-
推送时遇到错误:
The push refers to repository [192.168.25.215:5000/hwj/helloworld:1]
Get https://192.168.25.215:5000/v2/: http: server gave HTTP response to HTTPS client -
原因是docker私有仓库服务器,默认是基于https传输的,所以我们需要在客户端192.168.25.215做相关设置,不使用https传输
-
修改/etc/docker/daemon.json,增加"insecure-registries": [“192.168.25.215:5000”],如下
{
“insecure-registries”:[“192.168.25.215:5000”]
} -
保存后重启下docker
service docker restart # 或者 systemctl daemon-reload systemctl restart docker
-
再此执行原先的推送命令,推送成功
-
此时访问 http://192.168.25.215:5000/v2/_catalog ,可以看到已经推送成功的镜像helloworld
拉取pull
-
如果想拉取私有仓库的镜像,那么则需要加上私有仓库服务的ip和端口,如
sudo docker pull 192.168.25.215:5000/hwj/helloworld
-
或者在/etc/docker/daemon.json中的registry-mirrors添加 http://192.168.25.215:5000
{
“registry-mirrors”: [“http://192.168.25.215:5000”],
“insecure-registries”:[“192.168.25.215:5000”]
} -
然后重启docker
-
之后就可以直接使用名称下载,不用每次都加上ip和端口了
sudo docker pull hwj/helloworld
镜像操作api
- registry本身没有可视化ui管理,因此对镜像的操作都需要通过api完成
- HTTP API V2 | Docker Documentation :https://docs.docker.com/registry/spec/api/
列出所有的镜像仓库
curl -X GET http://<registry_ip>:<registry_port>/v2/_catalog
-
输出例子:
{"repositories":["busybox"]}
列出指定镜像的所有标签
curl -X GET http://<registry_ip>:<registry_port>/v2/<image_name>/tags/list
- 输出例子:
{"name":"busybox","tags":["latest","0.0.1","0.0.2"]}
可视化
- registry本身并没有提供管理工具,对于镜像的管理只能通过接口调用,不是很方便
- 在这里推荐用harbor来搭建私有仓库中心,harbor已经包含了registry,并且提供了可视化的管理页面
- 详情请看 https://blog.csdn.net/huweijian5/article/details/89873618 ,里面有完整的安装介绍
参考
Docker学习之Docker Registry - 简书
https://www.jianshu.com/p/fef890c4d1c2
手把手教你搭建Docker私有仓库 - 屌丝大叔的笔记 - 博客园
https://www.cnblogs.com/subendong/p/9029495.html