Docker系列学习文章 - 镜像仓库的介绍(七)

| 导语 前面我们讲了镜像的制作,知道了镜像是怎么生成的。但是镜像制作好了后,要怎么管理?他们存在哪里。通过本篇文章的讲解,大家就清楚了。

前面我们讲docker架构的时候,有一张图,如下:

我们注意右边,发现有个Registry,这就是仓库。仓库在docker架构里是很重要的一部分。镜像会因为业务的需要以不同类型的方式存在。所以,这么多类型的镜像如果没有一个很好的机制去管理,那么肯定会乱套。好比一生产车间,生产需要各种各样的螺丝钉、齿轮等配件,如果没有一个很好的仓库管理员负责对配件进行管理,那么车间里将乱七八糟。同样的,docker 镜像也需要标准化管理,那么负责这块功能的模块就是Registry。

Docker的仓库分为共有仓库和私有仓库,接下来我们通过分别讲解这两种仓库跟大家说说Registry仓库的功能和特点。

一、共有仓库

Docker Hub(https://hub.docker.com/) 是默认的 Registry,由 Docker 公司自己维护,上面有数以万计的镜像,用户可以自由下载和使用。当然除了docker hub,咱们国内也有很多共有仓库,因为docker hub因为当初有“墙”的原因,有时候会很慢,后来国内一些公司也搞了一些国内的共有仓库。做仓库其实是有盈利点的,所以大家开始都愿意去做,抢那风头。

我们接下来通过两大方面去跟大家介绍共有仓库的一些特点和使用方式。

1. 共有仓库的特点

共有仓库Docker Hub的特点总结下有这么四个:

  • 官方、权威

共有仓库比如docker hub,都是运营了多年的、公认不错的仓库。里面的镜像都是官方推出的,由docker公司自己维护,所以自然而然官方权威。一些比较流行的开源软件都会先在官方仓库发布推荐。

  • 数量大、种类多

共有仓库一般运营了多年,里面聚集着世界上所有容器爱好者以及相关公司存储的镜像。大家有最新、最好的镜像一般都会先在共有仓库docker hub里发布,所以数量大、种类多。基本上你想要的一些比较流行的镜像,这里都能找到。

  • 稳定、可靠、干净

正因为docker hub的官方、权威,所以上面的镜像都是经得住考验的,无论是稳定性、可靠性都能得以保证。

  • 仓库名称前没有命名空间

这个特点是docker hub比较重大的特点,因为docker hub是镜像仓库的原始发源地,是所有镜像仓库的“根”,加上它是放在公网上,所以前面不存在命名空间去区分。

2. 共有仓库的使用方式

我们使用Docker Hub有这么三种方式,一种是命令、一种是web界面,最后一种是API。

  • 命令方式

我们可以通过login、docer search、pull和push等命令连接操作Docker Hub服务。

登录我们一般执行docker login 就默认会登录docker hub的官方仓库里,当然你也可以带一些参数,比如带上用户名和密码(一般不推荐):

# docker login -u 用户名 -p 密码

如果想登录其他的仓库地址,只要跟上其他仓库的地址名就可以了:

# docker login registry.tencent.com

# docker login localhost:8080

如果想退出,那就执行:

# docker logout

登录到仓库后,你就能做接下来的一些命令了,比如search、pull和push。比如你要搜索一个你想要的镜像,直接执行 docker search 镜像名 即可。pull 是下载你要的镜像命令,push是你要上传的镜像命令。

  • web界面方式

界面的方式操作docker hub或者其他官方仓库那就很简单的,你只要登录它的地址,做好注册,然后登录即可根据界面的提示进行操作。比如下面这个界面就是登录后的界面,我们可以看到这上面的那几个链接功能,可以创建自己的仓库、创建组织、浏览提供的镜像列表、构建镜像、共享镜像等等。

界面操作,只要自己登录一下多操作两下基本就熟悉了。

  • API方式

现在的平台架构都讲究REST风格,所以都有API接口提供给用户去使用,这样能做一些自动化或者二次开发的操作。

这里有张关于API的表,大家可以参考使用:

方法

路径

分类

描述

GET

/v2/

Base

检查是否支持2.0接口

GET

/v2/<image>/tags/list

Tags

获取镜像标签列表

GET

/v2/<image>/manifests/<referevce>

Manifest

获取镜像主要信息

PUT

/v2/<image>/manifests/<referevce>

Manifest

修改镜像主要信息

DELETE

/v2/<image>/manifests/<reference>

Manifest

删除镜像的主要信息

GET

/v2/<image>/blobs/<digest>

Blob

获得镜像层

DELETE

/v2/<image>/blobs/<digest>

Blob

删除镜像层

POST

/v2/<image>/blobs/uploads/

Initiate Blob Upload

开始分块上传

GET

/v2/<image>/blobs/uploads/<uuid>

Blob Upload

获得分块上传的速度

PATCH

/v2/<image>/blobs/uploads/<uuid>

Blob Upload

分块上传数据

PUT

/v2/<image>/blobs/uploads/<uuid>

Blob Upload

完成上传

DELETE

/v2/<image>/blobs/uploads/<uuid>

Blob Upload

取消上传

GET

/v2/_catalog

Catalog

获得镜像列表

另外,如果大家想更加详细的了解API的一些信息,可以访问官方 API v2说明文档:

https://docs.docker.com/registry/spec/api/

3. 比较好用的共有仓库推荐

官方的docker hub仓库肯定不用说了,这是首推的仓库站点。但是有时候访问国外的有点慢,如果你想快点,可以看看国内的一些docker镜像仓库,这里推荐几个,大家可以采用,当然你也可以自己到网上搜搜,寻找自己合适的。

  • 腾讯镜像仓库

购买了腾讯云的CVM就能免费使用腾讯的CCS服务,CCS产品里面有免费的镜像仓库。好用不收费!赞!

  • DaoCloud

据说DaoCloud是国内第一家Dock Hub加速器提供商 注意,加速器 2.0 需要使用 DaoCloud 自己的云服务器才可以使用。官方宣称会继续支持加速器1.0。 网址: https://dashboard.daocloud.io/mirror

  • 阿里云docker仓库

阿里做云比较早,容器方面也是早有涉及。它的镜像仓库在国内也有很多人用,可以参考学习!

https://dev.aliyun.com/search.html

二、私有仓库

上面我们说的共有仓库特点很多,也非常好用。但是,共有仓库也有它不能满足的地方。比如公司企业级的一些私有镜像,这些镜像涉及到一些机密的数据和软件,私密性比较强,就不太适合放在共有仓库里。另外,假如你们的服务器环境不允许上外网,那么也无法下载到共有仓库的镜像。因此,为了解决这两大问题,我们就需要搭建自己的私有仓库,存储我们自己的私有镜像。

1. 私有仓库的特点

  • 私密性、安全性高

这个不难理解,共有仓库是放在公网,维护都是第三方,所以你没法控制它的私密和安全性。如果大家私有仓库,你可以跟外网进行隔离,这样一定程度上保证了你的私密性和安全性。加上有些涉及到公司机密的镜像,还是放在自家的仓库里放心。

  • 访问速度快

私有仓库一般是放在公司内网的,当然不受外网访问的限制影响。

  • 自主控制、维护性高

共有仓库再怎么方便还是别人搭建的仓库,你的使用方式、管理镜像的方式都得按照别人的来,所以,当你需要添加存储空间、做一些额外定制化功能的时候,你就受到制约了。如果是自己搭建的仓库,那么想怎么玩就怎么玩,自主性、维护性比较高。

2. 私有仓库的搭建

那么如何搭建属于自己的私有仓库呢?这里咱们只要用到docker提供的镜像分发工具Registry就可以了。

Registry是docker公司发布的一个用于打包、传输、存储和分发镜像的工具集,它是镜像仓库的核心。

Registry的Logo 一个扇贝里包着集装箱

接下来我们具体说说如何搭建私有仓库,其实很简单,之需要做几步操作即可。

  • 首先,先把Registry镜像下载好

# docker pull registry

一般的装好了docker,registry都有的,如果没有那就执行这条命令。Registry虽然是工具集,但是docker也把它打包成镜像了,使用它就是pull下载它即可。

  • 其次,规划好你镜像仓库服务的存储分配

因为镜像是占存储空间的,所以你需要在你服务器上预留一个路径专门存储镜像文件。一般的,我们会专门的用一个服务器做docker的仓库server。这里我们举例把 /data/docker_images 路径作为本地存储镜像的地址。然后Registry镜像内部,也定个路径存储镜像,我们定为 /var/lib/registry/images 路径。最后我们要把这两路径映射起来就OK了。

  • 再次,启动Registry镜像,启动仓库服务

# docker run -d --name private-registry --restart=always -hostname localhost -p 5000:5000  -v /data/docker_images:/var/lib/registry/images registry:2

我们知道Registry就是一个镜像,所以我们只要执行docker run命令就能把它给启动了,里面所有的功能都通过这个Registry镜像提供了,不需要再做其他什么额外配置,本身就是容器。

然后我们再分析下上面那命令,第一次看好像比较复杂,其实仔细看下很简单理解。private-registry就是自己设置的私有仓库的名字;--restart=always意思是永久启动,不会关闭被轻易删除;locahost就是设置本地路径为仓库服务地址;5000:5000就是你要给仓库设置的端口,一般都给5000,你也可以设置成其他的,注意你的服务器里防火墙把端口打开;后面那个路径就是本地路径和容器内部路径的映射了;最后一个是标明使用Registry的版本,现在是v2版本。

  • 配置HTTPS,让仓库更具有安全性

通过前面这几步,私有仓库其实已经搭建好了。你可以执行docker push localhost:5000/test/centos:latest这样的命令去上传你制作好的镜像。但是在实际生产环境中,直接暴露了5000的端口是不安全的,内网还好,但是如果你的仓库要放到公网那就不安全了。这里我们需要设置下HTTPS的方式加固下安全。

设置HTTPS的方法有很多,结合openssl和nginx做反向代理即可。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Brian

Docker 学习系列一之原理

---- Docker 认识 在谈及Docker时,不得不牵扯到一个现在很重要的一个领域:云计算。云计算是一种资源的服务模式,该模式可以按需的从可配置计算资源共...

37190
来自专栏运维小白

25.1 Docker简介

Docker介绍 Docker流行的特性:在于快速部署交覆 比如在企业中做开发,还是在线上跑一些服务,跑一些业务,都需要去部署很多的环境,如lnmp,mysq...

54170
来自专栏程序你好

从 Docker 的新手村出发?那么你需要这11条守则

11720
来自专栏Rainbond开源「容器云平台」

在生产环境使用Kubernetes一年后,我们总结了这些经验和教训

32330
来自专栏北京马哥教育

docker容器技术系列一:基本概念

前言:从去年下半年开始,我们就尝试在使用docker部署生产应用,至现在已经有十多个项目使用了docker容器部署,docker为我们节约 了大量的服务器资源,...

31340
来自专栏重庆的技术分享区

在API网关和微服务开发中使用Docker

原文地址:https://dzone.com/articles/using-docker-in-api-gateway-and-microservice-dev...

22540
来自专栏生信技能树

跟着jimmy学docker系列之第4讲:docker容器资源调度问题(MAC版本)

前面我们复习了docker的用法,而且我还带领大家亲自构建了一个自己的docker容器,也成功的在测试数据集里面运行了,但是前面我说的,我这次搞docker是因...

18320
来自专栏从零学习云计算

kubernetes学习记录(1)——kubernetes初理解

入门时,学习阅读的为《你闺女也能看懂的插画版Kubernetes指南》。由Deis的平台架构师Matt Butcher向他女儿介绍什么是Kubernetes,内...

55300
来自专栏SDNLAB

Docker生态系统系列之网络和通信

编者按:网络一直是Docker集群中的最令人头疼的问题,目前Docker已经收购了SocketPlane团队来解决相关问题,也发布了 libnetwork项目。...

35090
来自专栏魏艾斯博客www.vpsss.net

如何下载安装使用 SSH 软件

26850

扫码关注云+社区

领取腾讯云代金券