Docker搭建本地私有仓库

转载

原文地址:https://blog.csdn.net/ronnyjiang/article/details/71189392

1:已经有Docker hub了,为什么还要搭建私有仓库?

      Docker hub为我们提供了很多官方镜像和个人上传的镜像,我们可以下载机构或个人提供的镜像(如ubuntu,busybox...),也可以上传我们自己的本地镜像,然后我们需要的时候也可以随时下载。看着很是方便,但是也有不方便的地方:

     (1)那就是我们在从dockerhub上下载和上传镜像速度可能受影响,有时可能docker主页都打不开。

     (2)我们在生产上所使用的docker镜像可能存放着我们的code,tools,不想被外部人员获取,只允许内网的开发人员下载。如果上传到dockerhub上所有人都可以看到。这和github上的公共库是一样的。

      (3)在内部网络搭建docker私有仓库可以使内网人员下载和上传都非常快速,不受外网带宽等因素的影响,同时不在内网的人员无法下载我们的镜像,上述两个缺点都很好的解决了

 

2:开始搭建简单的docker私有仓库

搭建环境ubuntu14.04

 

(1)创建docker用户,并为docker添加sudo权限   (不想创建多与用户的请忽略步骤(1))

我首先是创建了一个docker 用户,可以不创建,我创建的目的是让这个docker 用户专门来处理私有仓库

 

[plain] view plain copy
 
  1. useradd -d /home/docker -g docker  docker   #创建docker用户的同时直接加入docker组(dokcer组在docker安装完后就已经存在,若用adduser docker会提示组已存在)  
  2.   
  3. chmod 640 /etc/sudoers    #加写权限  

 

vim sudoders

-------------------------------------------------

 

[plain] view plain copy
 
  1. # User privilege specification  
  2. root    ALL=(ALL:ALL) ALL  
  3. docker    ALL=(ALL:ALL) ALL    #添加此行,保存退出  


-----------------------------------------------------

然后再将/etc/sudoers权限改成440

(2) 创建一个目录,来存放docker仓库的镜像

这里我用docker用户来搭建docker仓库,在home目录下又创建一个docker_registry目录在存放未来的docker仓库的镜像,将用户/组都改成了docker

(3)开始创建我们的仓库,首先下载registry镜像

 

[plain] view plain copy
 
  1. docker pull registry    


(4)默认情况下,会将仓库存放于容器内的/var/lib/registry目录下,这样如果容器被删除,则存放于容器中的镜像也会丢失,所以我们一般情况下会指定本地一个目录(刚刚创建的/home/docker_registry)挂载到容器内的/var/lib/registry下,如下:

 

 

[plain] view plain copy
 
  1. docker run -d -p 5000:5000 -v /home/docker_registry:/var/lib/registry registry  

 

至此我们就创建了一个私有仓库,地址在本机的5000端口上,我的是192.168.2.114,即:192.168.2.114:5000

测试调试


接下来我们就要操作把一个本地镜像push到私有仓库中
在内网的任意一台装有docker的机器下pull一个比较小的镜像来测试(此处使用的是busybox)

 

[plain] view plain copy
 
  1. docker pull busybox   

 

接下来修改一下该镜像的tag。

 

docker tag busybox 192.168.2.114:5000/busybox

接下来把打了tag的镜像上传到私有仓库。

 

 

[plain] view plain copy
 
  1. docker push 192.168.2.114:5000/busybox  

可以看到push失败,具体错误如下:

 

 

因为Docker从1.3.X之后,与docker registry交互默认使用的是https,然而此处搭建的私有仓库只提供http服务,所以当与私有仓库交互时就会报上面的错误。为了解决这个问题需要在启动docker server时增加启动参数为默认使用http访问。修改docker启动配置文件(此处是修改132机器的配置)Ubuntu下配置文件地址为:/etc/default/docker,在其中增加–insecure-registry 192.168.2.114:5000如下所示:

修改完之后,重启Docker服务

 

[plain] view plain copy
 
  1. sudo restart docker  

 

重启完之后我们再次运行推送命令,把本地镜像推送到私有服务器上。

 

[plain] view plain copy
 
  1. docker push 192.168.2.114:5000/busybox  

可以看到镜像已经push到私有仓库中去了。

接下来我们删除本地镜像,然后从私有仓库中pull下来该镜像。

[plain] view plain copy
 
  1. docker pull 192.168.2.114:5000/busybox  

 

 

到此就搭建好了Docker私有仓库。上面搭建的仓库是不需要认证的,我们可以结合nginx和https实现认证和加密功能。可以参考官方介绍:https://docs.docker.com/registry/deploying/

 

 

查看镜像

 

[plain] view plain copy
 
  1. # curl -XGET http://registry:5000/v2/_catalog  
  2. # curl -XGET http://registry:5000/v2/image_name/tags/list  



 

删除镜像 
虽然看了官方API,但是还是不能成功删除,Docker Registry HTTP API V2
根据网上资料显示,当前版本尚不支持该功能,再等等看新版本吧,有第三方工具可以删除,感兴趣的可以自行查一下。

 

posted @ 2018-03-30 18:21  远洪  阅读(355)  评论(0)    收藏  举报