DockerHub私有仓库建立

Docker仓库实际上提供两方面的功能,一个是镜像管理,一个是认证。
前者主要由docker-registry项目来实现,经过http服务来上传下载;后者能够经过docker-index项目或者利用现成认证方案实现http请求管理。

使用官方仓库:简单,可是速度慢

登录dockerhub官网建立用户并登录既可以使用官方提供的dockerhub空间,增长本身的userID做为上传的根目录实现images的版本控制
https://hub.docker.com/
http://note.youdao.com/noteshare?id=54dad70770ed572d8ba05e35f05104d2&sub=A354A2FC89EB4F1C81302EF5A186FB8F
建立后在dockers服务器上使用docker login进行登录,登录后便可进行仓库的上传下载动做nginx

本地自建仓库:复杂,速度快,安全

一、使用官方镜像建立
配置文件git

官方镜像开出的registry也是一个容器,若是不指定镜像存储位置为一个宿主机的磁盘位置的话可能会致使镜像丢失,因此须要用-v参数挂载本地的存储上去
docker run -d -p 5000:5000 -v /data/docker_images:/tmp registry:0.9.1
##标红部分能够本身指定宿主机的一个存储位置
这种方式建立较为简单快捷

1)在安装有docker服务的服务器上运行:github

docker run -d -p 5000:5000 -v /data/docker_images:/tmp registry:0.9.1

运行结果以下:web

2)docker ps (查看正在运行中的docker容器)redis

3)因为第一步建立时没有加--name参数,因此容器建立会产生一个随机name,为了管理方便对容器进行重命名
docker rename keen_banach registrysql

4)查看容器对于的日志
docker logs registry(容器名或ID)docker

5)经过get访问查看容器运行是否正常vim

curl localhost:5000

至关于浏览器直接访问返回的结果(这部分返回值是由registry容器镜像制做时dockerfile中引用决定的)浏览器

6)查看宿主机上的挂载位置:(新增了一个*.db文件)安全

ls /data/docker_images

内容以下:(是一条sqlite的SQL语句)

7)在本地测试上传一个镜像:
#docker images (查看本地的镜像文件)

#docker tag rancher/agent:v1.2.11 10.234.2.182:5000/rancher-agent:v1(对其中一个镜像重命名)

一顿操做,彻底失败,没法上传,报错404
最终确诊是因为docker 1.3版本之后默认已经支持到了registry v2 版本,而v2版本会涉及到https和鉴权,因此按照原来的路径push的话始终没法完成上传的动做;

v2版本的dir路径:/var/lib/registry

v1版本的dir路径:/tmp/registry

解决方法
或者docker降级,或者registry升级到v2版本,而且从新配置,v2版本相交于v1更加合理,可是配置也更加繁琐
8)最终解决方式使用registry v2版本代替

docker run -d -p 5000:5000 --name registry registry:latest

9)上传镜像

docker push 132.232.204.252:5000/rancher-agent

客户端和服务端上传均会报错,报错信息:
The push refers to repository [132.232.204.252:5000/rancher-agent]
Get https://132.232.204.252:5000/v2/: http: server gave HTTP response to HTTPS client
大体意思就是客户端用https的请求服务端返回了http的返回
由于Docker从1.3.X以后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,因此当与私有仓库交互时就会报https错误。为了解决这个问题须要在启动docker server时增长启动参数为默认使用http访问。
解决方法有两种思路:
1、本地配置信任
修改docker.service文件中的start启动项
路径通常为:/usr/lib/systemd/system/
vim /usr/lib/systemd/system/docker.service

ExexStart=/usr/bin/dockerd -H unix:// 在改行后增长须要信任的服务端地址
--insecure-registry 127.0.0.1:5000 --insecure-registry 132.232.204.252:5000

修改后须要从新加载deamon
重启docker服务
#systemctl daemon-reload
#systemctl restart docker.service
查看docker info 修改先后对比增长了信任的注册registries

再进行上传便可成功

查看仓库web中也新增了镜像

2、在服务端配置nginx代理,增长证书

============================================================================
docker-registry版本发展
一、2013年3月13日
docker在github上有了第一个release[3]
二、2013年7月3日
docker在github上发布了docker registry v1[4]
三、2015年1月30日
docker registry v2(项目名叫docker distribution)有了第一个release,同时中止更新docker registry v1[5]
四、2015年4月16日
docker发布docker1.6,同时正式推广docker registry v2
在使用docker registry v2的时候须要注意,只有docker1.6以上版本才支持registry v2,可是docker是向前兼容的,咱们从源代码里能够看出,docker engine在下载镜像的时候,会先判断远端仓库是v1仍是v2版,从而使用不一样的下载策略,这个策略可过重要了

坑点:一、docker的发展有两部分,一是在2017年3月以前docker一直使用的版本命名方式是docker1.xx,这种方式的最后一个版本是docker1.13.1版本,在2017年3月,改用年分命名方式,初版docker17.03,docker版本和redistry的结合部分在docker1.3版本发生一些变化,由于registry v2版本的出现二、registry 建议直接使用v2版本,0.9.1是最后一个v1版本,虽然docker有向前兼容性,可是registry的v1和v2项目是彻底不一样的两个项目,而且不具备兼容性

相关文章
相关标签/搜索