Docker学习记录(1)——搭建自己的Docker Registry
2017-08-04 09:27
489 查看
最近在编写Kubernetes demo的时候,遇到了一个问题:当相同的Pod部署到不同的Node上时,每个Node都得下载Pod中指定的镜像文件。
由于“墙”等原因,很多镜像文件的下载速度都很慢且连接不稳定,所以搭建自己的Docker Registry,在Docker Registry所在的宿主机上下载所需的镜像文件,Pod指定到自己的Docker Registry获得镜像文件。
加上–restart=always设置镜像仓库容器的重启策略,每次重启宿主机,也会重启docker registry。
如果之前忘记设置镜像仓库容器的重启策略,可以通过docker update指令更新重启策略,我的镜像仓库容器ID前四位为4a75,所以指令如下
该命令将启动一个运行registry应用的容器,命名为myRegistry,并绑定到本地宿主机5000端口上。
使用指令查看registry的运行状态。
下面测试能否把192.168.121.144上的image上传到自己的Docker Registry上。
在192.168.121.144上查看已有的镜像文件。
以docker.io/kubeguide/redis-master为例。
其IMAGE ID 为405a0b586f7e。使用自己的Registry给该镜像打上标签。
为了指定自己的Registry目的地址,需要在镜像名前加上主机名和端口前缀。
给docker镜像打上标签后,就可以使用push命令将其推送到自己的Registry中。
执行报错:
Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互式就会有上面的错误。
解决办法:
编辑/etc/docker/daemon.json
加入
最后/etc/docker/daemon.json文件内容如下:
其中registry-mirrors是我加的docker镜像源。
编辑完成后,重启docker。
但这种方法比较麻烦,需要修改每台宿主机上的/etc/docker/daemon.json
如果发现了更好的办法,会更新此处。
重新上传:
上传成功后,验证:
看到Docker Registry中已有该镜像。
下载该镜像直接执行:
首先下载hyper/docker-registry-web。
这里,由于我之前已经安装了Docker Registry,所以采用了官网的No authentication, with config file方式启动web ui(没有身份认证等,可以删除镜像)。至于其他的启动方式,可以去官网研究。(myRegistry是我镜像仓库名称)。
创建hyper/docker-registry-web的配置文件config.yml。
启动hyper/docker-registry-web。
访问192.168.121.140:8080可以查看web ui。(192.168.121.140是我镜像仓库地址)
但此时执行删除会报错
这里,需要修改Docker Registry的配置文件,设置能够进行删除。推荐的方式是在创建Docker Registry的时候使用-v挂载配置文件。
这里由于已经创建并使用Docker Registry了。所以直接进入容器内部修改配置文件。
进入容器内部修改。修改/etc/docker/registry/config.yml
添加删除的设置。
修改完成后重启容器。
删除成功。
之后对Docker Registry所在的宿主机进行镜像清理,因为所有镜像都以上传至镜像仓库,所以本地镜像可以删除。指令如下:
以gcr.io/google_containers/kubernetes-dashboard-amd64为例。
save指令导出镜像。
load指令导入镜像
由于“墙”等原因,很多镜像文件的下载速度都很慢且连接不稳定,所以搭建自己的Docker Registry,在Docker Registry所在的宿主机上下载所需的镜像文件,Pod指定到自己的Docker Registry获得镜像文件。
安装Registry
从Docker容器安装Registry非常简单,指令如下:# sudo docker pull registry # sudo docker run --name myRegistry --restart=always -d -p 5000:5000 registry
加上–restart=always设置镜像仓库容器的重启策略,每次重启宿主机,也会重启docker registry。
如果之前忘记设置镜像仓库容器的重启策略,可以通过docker update指令更新重启策略,我的镜像仓库容器ID前四位为4a75,所以指令如下
docker update --restart=always 4a75
该命令将启动一个运行registry应用的容器,命名为myRegistry,并绑定到本地宿主机5000端口上。
使用指令查看registry的运行状态。
# 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目的地址,需要在镜像名前加上主机名和端口前缀。
# sudo docker tag 405a 192.168.121.143:5000/docker.io/kubeguide/redis-master
给docker镜像打上标签后,就可以使用push命令将其推送到自己的Registry中。
# docker push 192.168.121.143:5000/docker.io/kubeguide/redis-master
执行报错:
# 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
加入
"insecure-registries":["192.168.121.143:5000"]
最后/etc/docker/daemon.json文件内容如下:
{"registry-mirrors":["http://hub-mirror.c.163.com"],"insecure-registries":["192.168.121.143:5000"]}
其中registry-mirrors是我加的docker镜像源。
编辑完成后,重启docker。
# systemctl restart docker
但这种方法比较麻烦,需要修改每台宿主机上的/etc/docker/daemon.json
如果发现了更好的办法,会更新此处。
重新上传:
# docker push 192.168.121.143:5000/docker.io/kubeguide/redis-master
上传成功后,验证:
curl 192.168.121.143:5000/v2/_catalog
看到Docker Registry中已有该镜像。
下载该镜像直接执行:
docker pull 192.168.121.143:5000/docker.io/kubeguide/redis-master
安装Docker Registry的web ui
使用的是hyper/docker-registry-web。首先下载hyper/docker-registry-web。
#docker pull hyper/docker-registry-web
这里,由于我之前已经安装了Docker Registry,所以采用了官网的No authentication, with config file方式启动web ui(没有身份认证等,可以删除镜像)。至于其他的启动方式,可以去官网研究。(myRegistry是我镜像仓库名称)。
创建hyper/docker-registry-web的配置文件config.yml。
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。
# 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了。所以直接进入容器内部修改配置文件。
#docker exec -it 4a75 /bin/sh
进入容器内部修改。修改/etc/docker/registry/config.yml
添加删除的设置。
修改完成后重启容器。
# docker restart 4a75
删除成功。
之后对Docker Registry所在的宿主机进行镜像清理,因为所有镜像都以上传至镜像仓库,所以本地镜像可以删除。指令如下:
docker rmi $(docker images -q)
docker镜像导入导出
以gcr.io/google_containers/kubernetes-dashboard-amd64为例。
save指令导出镜像。
# sudo docker save gcr.io/google_containers/kubernetes-dashboard-amd64 > kubernetes-dashboard-amd64.tar
load指令导入镜像
# sudo docker load < kubernetes-dashboard-amd64.tar
相关文章推荐
- 搭建自己的docker registry,非生产环境
- [原创]Docker学习记录: Shipyard+Swarm+Consul+Service Discover 搭建教程
- docker学习笔记(二)——本地私有仓库Registry的搭建与验证
- 4.docker学习笔记:创建自己的registry
- Docker学习记录3: 搭建 Private Registry
- 学习 《一步步搭建自己的博客》 第一版 边理解边记录
- centos7搭建任意版本的docker以及建立自己的私有仓库registry
- 学习 《一步步搭建自己的博客》 第一版 之异常 边理解边记录
- docker | 学习教程 docker 搭建无认证私有仓库
- Centos7.3 Docker安装部署学习记录1
- 搭建自己的 Docker 私有仓库服务
- Docker私有仓库Registry的搭建验证
- 搭建Docker Registry v2
- 第一天开始,记录自己的学习历程
- 网上看了篇文章关于多表连接的,感觉很好,记录下来,以便日后自己学习
- 记录自己在centos虚拟机搭建简易git服务器的过程,分享给大家
- 记录自己学习的点点滴滴,一方面能够帮助自己,另一方面也希望可以帮助更多走在学习的道路上的人大笑
- Spring 源码学习记录(无用自己看的)
- 搭建企业私有Docker Registry实战分享