作者博客:vps精选网

我们知道docker镜像可以托管到dockerhub中,跟代码库托管到github是一个道理。但如果我们不想把docker镜像公开放到dockerhub中,只想在部门或团队内部共享docker镜像,能不能项gitlab一样在搭建私有的仓库呢?答案是肯定的,docker也支持将镜像存到私有仓库。下面将验证docker原生的仓库和开源的私用仓库,并分析其特点。

1docker原生仓库搭建

1.1配置要求和基本原理

配置要求

要求docker版本:1.6+

Docker registry 版本 2.0+

仓库原理

Docker模型的核心部分是有效的利用分层镜像机制,镜像可以通过分层来进行继承,基于基础镜像,可以制作各种具体的应用镜像。不同的Docker容器可以共享一些基础的文件系统层,同时再加上自己独有的改动层,大大提高了存储的效率。由于最终镜像最终是以tar.gz的方式静态存储在服务器端,这种存储适用于对象存储而不是块存储。

一次docker pull (即用户从客户端向仓库拉镜像),发生的交互。

1客户端向索引请求ubuntu镜像下载地址

2索引回复:ubuntu所在仓库A、 ubuntu镜像的校验码(Checksum)和所有层的Token

3客户端向仓库A请求 ubuntu的所有层(仓库A负责存储ubuntu,以及它所依赖的层)

4仓库A向索引发起请求,验证用户Token的合法性

5索引返回这次请求是否合法

6客户端从仓库下载所有的层,仓库从后端存储中获取实际的文件数据,返给客户端

具体配置步骤参考官方文档:https://docs.docker.com/registry/deploying/

1.2搭建步骤

1.2.1搭建基础仓库

是在docker容器中运行原生私有仓库。

下载仓库镜像:

docker pull registry:2

运行仓库:

docker run -d -p 5000:5000 --restart=always --name registry registry:2

上传下载镜像到本地仓库

docker push localhost:5000/ubuntu

1.2.2配置存储

用以下命令启动仓库

docker run -d -p 5000:5000 --restart=always --name registry \
  -v /opt/registry:/var/lib/registry registry:2

-v /opt/registry:/var/lib/registry 表示将本地目录/opt/registry映射到仓库容器中的/var/lib/registry目录,该目录中存储仓库中的镜像文件。

1.2.3通信加密

客户端与仓库通信加密分为三个等级:不采用通信加密,采用自签名证书加密,采用通过认证的证书加密

1不采用tls加密

不用tls加密,就不能使用基础的用户认证功能

2采用通过认证的证书加密

官方推荐采用通过认证的证书加密,但目前无法获取通过认证的证书

3采用自签名的证书加密

本次原型搭建是采用自签名证书加密

推荐使用知名机构签名了的CA证书

1.2.4访问授权

注:要开启用户访问认证,就必须先采用通信加密

访问认证有三种方式:分别是silly、token、htpasswd

简单介绍下用htpasswd怎么实现访问认证

首先,创建用户的账号密码,下面命令创建了用户testuser/testpassword

mkdir auth
docker run --entrypoint htpasswd registry:2 -Bbn testuser testpassword > auth/htpasswd

然后,以htpasswd访问限制的方式开启registry

在开启命令后添加
-v `pwd`/auth:/auth -e "REGISTRY_AUTH=htpasswd" \

登陆registry

docker login –u testuser –p testpassword myregistrydomain.com:5000

这种方式就是在auth/htpasswd白名单中添加哪些用户,哪些用户就可以登陆registry。这种方式的权限控制比较粗略。

1.2.5 其他高级功能

另外原生的仓库还支持以下高级功能

对接AD/ldap:通过接入AD/ldap管理用户及授权

日志审计:方便查错及跟踪行为

分布式存储:在仓库中镜像数量剧增时,需要考虑对接分布式存储

负载均衡:仓库中镜像访问量剧增时,需要考虑采用负载均衡

1.3存在的问题

1原生的私有仓库提供的功能不够丰富,很多功能需要二次开发。如用户权限控制方面,基本没有实现,需要重新开发

2缺少UI界面,不适用于生产环境

2docker私有仓库开源解决方案比较

如果docker原生的仓库不能满足需求,这里提供了几种开源的解决方案。网上对私有仓库解决方案的比较不是很多,收集了以下三个较常见的私有仓库解决方案

2.1protus

Portus(by SUSE)是用于 Docker Registry API(v2)的开源前端和授权工具,最低要求registry版本是 2.1。它可以作为授权服务器和用户界面。

优缺点

优点:
1.安全:Portus 实现了最新的Docker Registry中定义的新的授权方案。它允许对你所有的镜像进行细颗粒度控制,你可以决定哪个用户和团队可 push/pull 镜像。
2.轻松管理用户: 在 Portus 映射你的公司,可以定义任意数量的 Team,并从 Team 添加和移除用户。Team 有三种类型的用户:Viewers ,只能 pull 镜像;Contributors,可以 push/pull 镜像;Owners,类似 contributors,但可以从 team 添加或移除用户。 
3.搜索: Portus 提供你的私人注册表的内容的预览,同时有一个快速搜索镜像的功能。 
4.审计: 用户的所有相关事件都会被Portus自动记录,并可被管理员进行用户分析。

5支持对接到AD/LDAP

缺点:

1UI界面不支持中文

部署过程

项目github托管地址:https://github.com/SUSE/Portus

注:部署完成后,界面无法与registry容器通信。也一直没找到如何解决,建议采用下一个方案harbor

2.2harbor

Project Harbor是由VMware公司中国团队为企业用户设计的Registry server开源项目,包括了权限管理(RBAC)、LDAP、审计、管理界面、自我注册、HA等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能

优缺点

优点:

1可以实现 images 的私有存储

2支持日志统计

3支持基于角色的访问控制(Role Based Access Control)

4支持创建多项目

5提供了管理UI界面,并原生支持中文。

6支持AD/LDAP集成

缺点:

暂未发现

2.3AppHouse

未进行深入了解,如果后续有需要,可继续调研

3harbor私有仓库搭建步骤流程

参考官方教程:

https://github.com/vmware/harbor/blob/master/docs/installation_guide.md

过程比较简单,没遇到问题,不再赘述

4harbor 功能及使用说明

界面如下图:

通过测试以下功能均可用,且体验良好。

以管理员(admin/Harbor12345)登入登出registry

创建项目

创建用户test

以test身份pull/push 镜像

搜索功能

日志审计功能

作者博客:vps精选网

Docker 私有仓库方案比较与搭建的更多相关文章

  1. Docker 私有仓库最简便的搭建方法

    http://blog.csdn.net/wangtaoking1/article/details/44180901/ Docker学习笔记 — Docker私有仓库搭建http://www.jian ...

  2. 一步步搭建docker私有仓库并从私有仓库中下载镜像

    一步步搭建docker私有仓库 #下载镜像 docker pull registry#查看镜像 docker images #运行私有仓库,指定端口和数据卷 docker run -d -p : -v ...

  3. 搭建docker私有仓库

    保存镜像的地方成为仓库(registry).目前有2种仓库:公共仓库和私有仓库. 最方便的是使用公共仓库上传和下载镜像,下载不需要注册,上传需要到公共仓库注册.公共仓库网站:https://hub.d ...

  4. docker 私有仓库简易搭建

    概要 本地私有仓库 局域网私有仓库 总结 概要 docker hub 使用非常方便,而且上面有大量的镜像可以使用. 但是,每次都远程下载镜像速度非常慢,如果能在本地做一个 docker 的仓库,多人协 ...

  5. Docker私有仓库registry的搭建及使用

    前言 由于Docker Hub公共仓库很多时候使用这并不是很方便,大分部因为网络的问题可能拉取的时候会很慢或者拉取不到,所以搭建一个本地的私有仓库. 准备 由于此篇文章是在Kubernetes集群安装 ...

  6. windows 环境下搭建docker私有仓库

    windows 环境下搭建docker私有仓库 1.在公用仓库中pull仓库镜像 docker pull regitry 2.启动仓库镜像 //-d意思是后台运行,-p是做端口映射,这里是将本地的50 ...

  7. 03搭建docker私有仓库

    搭建docker私仓,可以使用docker官方提供的registry镜像.该镜像目前有2.0,2.3和2.3.1版本.它只与1.6.0以上版本的docker兼容.搭建私仓的步骤如下: 一:无代理.无认 ...

  8. Docker容器化【Dockerfile编写&&搭建与使用Docker私有仓库】

    # Docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启动 掌握Docker镜像与容器相关命令 掌握Tomcat Nginx 等软件的常用 ...

  9. CentOS7搭建Docker私有仓库----Docker

    有时候使用Docker Hub这样的公共仓库可能不方便,这种情况下用户可以使用registry创建一个本地仓库供私人使用,这点跟Maven的管理类似.目前Docker Registry已经升级到了v2 ...

随机推荐

  1. 20165318 2017-2018-2 《Java程序设计》第二周学习总结

    20165318 2017-2018-2 <Java程序设计>第二周学习总结 教材学习内容总结 本周学习了第二章和第三章的内容,掌握了Java中基本数据类型.数组.运算符.表达式和语句等方 ...

  2. A NB群友 【记忆化搜索】(2019年华南理工大学程序设计竞赛(春季赛))

    冲鸭!去刷题:https://ac.nowcoder.com/acm/contest/625/A 题目描述 CC是著名的算法竞赛选手,他不仅人长得帅,而且技术了得,自然而然就有了许多粉丝. 为了能帮助 ...

  3. django restframework 快速入门

    django restframework 快速入门 基本流程 建立 Models 依靠 Serialiers 将数据库取出的数据 Parse 为 API 的数据(可用于返回给客户端,也可用于浏览器显示 ...

  4. PAT乙级1005

    1005 继续(3n+1)猜想 (25 分) 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程 ...

  5. 再起航,我的学习笔记之JavaScript设计模式05(简单工厂模式)

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前几 ...

  6. 轻量级IOC容器:Ninject

    Ninject是一个快如闪电.超轻量级的基于.Net平台的依赖注入框架.它能够帮助你把应用程序分离成一个个松耦合.高内聚的模块,然后用一种灵活的方式组装起来.通过使用Ninject配套你的软件架构,那 ...

  7. 【LeetCode445】 Add Two Numbers II★★

    题目描述: 解题思路: 给定两个链表(代表两个非负数),数字的各位以正序存储,将两个代表数字的链表想加获得一个新的链表(代表两数之和). 如(7->2->4->3)(7243) + ...

  8. springboot集成elk实现分布式日志管理

    1.安装elk https://www.cnblogs.com/xuaa/p/10769759.html 2.idea创建springboot项目 File -> New -> Proje ...

  9. 【js】走近小程序

    一.什么是小程序? 基于微信的可以为用户提供一些服务的web项目,利用微信提供的接口可以让所有开发者使用到微信的原生能力,去完成一些之前做不到或者难以做到的事情. 二.小程序开发工具以及语言? 小程序 ...

  10. 2017-2018-1 20155231 《信息安全系统设计基础》实现mypwd

    2017-2018-1 20155231 <信息安全系统设计基础>实现mypwd Linux pwd命令用于显示工作目录. 执行pwd指令可立刻得知您目前所在的工作目录的绝对路径名称. p ...