前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker学习记录(1)——搭建自己的Docker Registry

Docker学习记录(1)——搭建自己的Docker Registry

作者头像
胡了了
发布2017-12-28 17:24:39
3.8K0
发布2017-12-28 17:24:39
举报

最近在编写Kubernetes demo的时候,遇到了一个问题:当相同的Pod部署到不同的Node上时,每个Node都得下载Pod中指定的镜像文件。

由于“墙”等原因,很多镜像文件的下载速度都很慢且连接不稳定,所以搭建自己的Docker Registry,在Docker Registry所在的宿主机上下载所需的镜像文件,Pod指定到自己的Docker Registry获得镜像文件。

安装Registry

从Docker容器安装Registry非常简单,指令如下:

代码语言:javascript
复制
# sudo docker pull registry
# sudo docker run --name myRegistry --restart=always -d -p 5000:5000 registry

加上–restart=always设置镜像仓库容器的重启策略,每次重启宿主机,也会重启docker registry。

如果之前忘记设置镜像仓库容器的重启策略,可以通过docker update指令更新重启策略,我的镜像仓库容器ID前四位为4a75,所以指令如下

代码语言:javascript
复制
docker update --restart=always 4a75

该命令将启动一个运行registry应用的容器,命名为myRegistry,并绑定到本地宿主机5000端口上。 使用指令查看registry的运行状态。

代码语言:javascript
复制
# docker ps -f name=myRegistry
这里写图片描述
这里写图片描述

测试Docker Registry

我的Docker Registry运行在192.168.121.143上。

下面测试能否把192.168.121.144上的image上传到自己的Docker Registry上。

在192.168.121.144上查看已有的镜像文件。

这里写图片描述
这里写图片描述

以docker.io/kubeguide/redis-master为例。 其IMAGE ID 为405a0b586f7e。使用自己的Registry给该镜像打上标签。 为了指定自己的Registry目的地址,需要在镜像名前加上主机名和端口前缀。

代码语言:javascript
复制
# sudo docker tag 405a 192.168.121.143:5000/docker.io/kubeguide/redis-master
这里写图片描述
这里写图片描述

给docker镜像打上标签后,就可以使用push命令将其推送到自己的Registry中。

代码语言:javascript
复制
# docker push 192.168.121.143:5000/docker.io/kubeguide/redis-master

执行报错:

代码语言:javascript
复制
# The push refers to a repository [192.168.121.143:5000/docker.io/kubeguide/redis-master]
# Get https://192.168.121.143:5000/v1/_ping: http: server gave HTTP response to HTTPS client

Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互式就会有上面的错误。

解决办法:

编辑/etc/docker/daemon.json 加入

代码语言:javascript
复制
"insecure-registries":["192.168.121.143:5000"] 

最后/etc/docker/daemon.json文件内容如下:

代码语言:javascript
复制
{"registry-mirrors":["http://hub-mirror.c.163.com"],"insecure-registries":["192.168.121.143:5000"] }

其中registry-mirrors是我加的docker镜像源。

编辑完成后,重启docker。

代码语言:javascript
复制
# systemctl restart docker

但这种方法比较麻烦,需要修改每台宿主机上的/etc/docker/daemon.json 如果发现了更好的办法,会更新此处。

重新上传:

代码语言:javascript
复制
# docker push 192.168.121.143:5000/docker.io/kubeguide/redis-master
这里写图片描述
这里写图片描述

上传成功后,验证:

代码语言:javascript
复制
curl 192.168.121.143:5000/v2/_catalog
这里写图片描述
这里写图片描述

看到Docker Registry中已有该镜像。

下载该镜像直接执行:

代码语言:javascript
复制
docker pull 192.168.121.143:5000/docker.io/kubeguide/redis-master

安装Docker Registry的web ui

使用的是hyper/docker-registry-web

首先下载hyper/docker-registry-web。

代码语言:javascript
复制
#docker pull hyper/docker-registry-web

这里,由于我之前已经安装了Docker Registry,所以采用了官网的No authentication, with config file方式启动web ui(没有身份认证等,可以删除镜像)。至于其他的启动方式,可以去官网研究。(myRegistry是我镜像仓库名称)。

创建hyper/docker-registry-web的配置文件config.yml。

代码语言:javascript
复制
registry:  
  # Docker registry url  
  url: http://myRegistry:5000/v2  
  # Docker registry fqdn  
  name: localhost:5000  
  # To allow image delete, should be false  
  readonly: false  
  auth:  
    # Disable authentication  
    enabled: false 

启动hyper/docker-registry-web。

代码语言:javascript
复制
# docker run -it -d --restart=always -p 8080:8080 --name registry-web --link myRegistry -v $(pwd)/config.yml:/conf/config.yml:ro hyper/docker-registry-web

访问192.168.121.140:8080可以查看web ui。(192.168.121.140是我镜像仓库地址)

这里写图片描述
这里写图片描述

但此时执行删除会报错

这里写图片描述
这里写图片描述

这里,需要修改Docker Registry的配置文件,设置能够进行删除。推荐的方式是在创建Docker Registry的时候使用-v挂载配置文件。

这里由于已经创建并使用Docker Registry了。所以直接进入容器内部修改配置文件。

代码语言:javascript
复制
#docker exec -it 4a75 /bin/sh

进入容器内部修改。修改/etc/docker/registry/config.yml

这里写图片描述
这里写图片描述

添加删除的设置。

这里写图片描述
这里写图片描述

修改完成后重启容器。

代码语言:javascript
复制
# docker restart 4a75
这里写图片描述
这里写图片描述

删除成功。

之后对Docker Registry所在的宿主机进行镜像清理,因为所有镜像都以上传至镜像仓库,所以本地镜像可以删除。指令如下:

代码语言:javascript
复制
docker rmi $(docker images -q) 

docker镜像导入导出

这里写图片描述
这里写图片描述

以gcr.io/google_containers/kubernetes-dashboard-amd64为例。

save指令导出镜像。

代码语言:javascript
复制
# sudo docker save gcr.io/google_containers/kubernetes-dashboard-amd64 > kubernetes-dashboard-amd64.tar 

load指令导入镜像

代码语言:javascript
复制
# sudo docker load < kubernetes-dashboard-amd64.tar 
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-08-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 安装Registry
  • 测试Docker Registry
  • 安装Docker Registry的web ui
  • docker镜像导入导出
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档