专栏首页宝哥的专栏Docker系列学习文章 - 镜像仓库的介绍(七)
原创

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 条评论
登录 后参与评论

相关文章

  • Docker系列学习文章 - 如何安装Docker(三)

    | 导语 前面介绍了关于容器和docker的知识,那么从这篇文章开始,正式进入实操,带大家手把手安装docker环境。

    宝哥@devops运维
  • Docker系列学习文章 - 什么是docker?(二)

    | 导语 前面我们介绍了什么是容器,那么这篇文章我们继续跟大家讲解什么是docker。 docker是目前最火的LXC高级容器引擎,docker到现在几乎是容器...

    宝哥@devops运维
  • Docker系列学习文章 - docker API基本介绍和使用(十)

    API这个词在维基百科里解释是这样的:应用程序接口(英语:application programming interface,缩写作 API),又称为应用编程接...

    宝哥@devops运维
  • 四、docker 仓库(让我们的镜像有处可存)

    前面讲完了docker 镜像和容器,以及通过Dockerfile 定制属于我们自己的镜像,那那现在就是需要将我们自己定制的镜像存放到仓库中供他们使用。这一套流程...

    程序员爱酸奶
  • Docker入门-搭建docker私有仓库

    目前Docker官方维护了一个公共仓库Docker Hub,其中已经包括了数量超过15000个镜像。大部分需求都可以通过在Docker Hub中直接下载镜像来使...

    小码农薛尧
  • docker本地私有仓库

    Docker默认不允许非HTTPS方式推送镜像。我们可以通过Docker 的配置选项来取消这个限制,或者查看下一节配置能够通过HTTPS访问的私有仓库。在...

    黑白格
  • 「走进k8s」Docke仓库理解和搭建(四)

    PS:建议在拉取镜像的时候不要使用lastest,docker默认最后一个版本都是lastest,最好使用确定的版本方便使用些。这里肯定有老铁问,这个仓库没界面...

    IT故事会
  • docker私有仓库搭建与使用实战

    hub.docker.com上可以保存镜像,但是网速相对较慢,在内部环境中搭建一个私有的公共仓库是个更好的方案,今天我们就来实战搭建私有docker仓库吧; 环...

    程序员欣宸
  • Nexus3最佳实践系列:搭建Docker私有仓库

    容器仓库是容器化管理中非常重要的一环,相当于 SVN 在程序研发、运维发布中的地位。因此,一个稳定、可靠的容器仓库尤为重要。

    张戈
  • Docker 仓库 Harbor

    之前写过两篇关于Docker仓库的文章,把Docker镜像装到仓库需要几步? 与 没有Docker仓库还能分发镜像吗? 。

    用户1560186

扫码关注云+社区

领取腾讯云代金券