云原生之Docker镜像仓库

news/2024/6/3 17:30:07 标签: 云原生, docker, 容器

1. 前言

        同为虚拟化技术,Docker相对于VMWare有什么特点,或者最吸引我的特点?我认为最主要的是Docker Image技术,它让我们非常方便地把应用程序包和其依赖环境打包成一个Docker镜像文件,而且这个文件相对来说还非常小,一般就是几M到几十M,然后不管是开发环境、测试环境、预发布环境还是各个线上环境,只要环境里安装了Docker Engine就可以行为一致地运行起来,不需要去考虑烦人的目标系统的依赖问题。

        那么这个Docker镜像文件怎么管理?是不是手工直接放到文件系统里,每个环境的每台Linux服务器都去scp上传一次,如果这么做,运维人员就有巨大工作量了,所以需要一个集中存储镜像文件的系统,以及很方便的访问API接口服务,一次push推送进镜像管理系统,其它任何Linux服务器按API接口进行pull拉取即可。

        这样的系统叫作Docker镜像仓库,一般有公有仓库和私有仓库两种。

2. 公有仓库Docker Hub

        Docker Hub是Docker提供的一项服务,我们可以查找一般的公共容器镜像,比如基础的Linux系统镜像,这种镜像我们没有必要自己来制作。

        Docker Hub是世界上最大的容器镜像存储库,拥有一系列内容源,包括容器社区开发人员、开放源代码项目和独立软件供应商(ISV)在容器中构建和分发代码。

        官网:https://hub.docker.com/

        我们可以访问免费的公共存储库来存储和共享镜像,也可以为私有存储库选择订阅计划。

        Docker Hub提供以下主要功能:

  1. 仓库:推拉容器镜像。
  2. 团队和组织:管理对容器映像的私有存储库的访问。
  3. 官方镜像:提取并使用Docker提供的高质量容器镜像。
  4. Publisher-Images:拉取并使用外部供应商提供的高质量容器镜像。
  5. 构建:从GitHub和Bitbucket自动构建容器镜像,并将它们推送到Docker Hub。
  6. Webhooks:成功推送到存储库后触发操作,以将Docker Hub与其他服务集成。

        从仓库下载一个镜像:

 docker image pull [OPTIONS] NAME[:TAG|@DIGEST]

        向仓库上传一个镜像:

docker image push [OPTIONS] NAME[:TAG] 

        如果我们在配置image参数时不设置域名和端口,则默认从Docker Hub上拉取镜像。当然互联网上还有一些其它镜像仓库可供使用,可以自己去搜索一下。 

3. 私有仓库Docker Registry

        基础镜像从Docker Hub拉取非常方便,但是我们自己业务系统构建生成的镜像文件,推送到Docker Hub存储起来供我们使用,有几个问题:

  1.  访问慢:毕竟是国外的服务,push和pull肯定不是每时每刻都速度快;
  2.  安全问题:企业的业务系统镜像文件,不可能推送到公共镜像仓库里去;
  3.  内网问题:如果是安全性要求高的内网环境,无法访问互联网,所以访问Docker Hub无从谈起。

        因此,我们需要自己建立一个镜像仓库,在自己的机房环境里,专门供自己业务平台使用,这就是私有仓库。

        Docker Hub上已经制作好了它的镜像registry和docker-registry-web,一个是私有镜像系统本身,一个是它的web管理系统。

        我们可以编写一个docker-compose.yaml来编排这两个服务进行安装和管理:

version: '3'

services:
  api:
    image: registry:2.7.1
    restart: always
    volumes:
      - /data/registry:/var/lib/registry
    ports:
      - 5000:5000
  web:
    image: hyper/docker-registry-web:v0.1.2
    restart: always
    ports:
      - 8080:8080
    environment:
      - REGISTRY_URL=http://api:5000/v2
      - REGISTRY_NAME=192.168.1.100:5000
      - REGISTRY_READONLY=false

        服务安装执行:

docker-compose up -d 

         docker push和docker pull默认是访问https协议的,我们内网一般采用http即可,需要修改/etc/docker/daemon.json:

{                                              
  "insecure-registries" : ["registry:5000"]  
}                                              

        修改配置文件之后,需要重启docker daemon:

sudo systemctl restart docker 

        上面用到了registry域名,我们需要在每个docker swarm节点上/etc/hosts设置域名指向192.168.1.100,或者使用CoreDNS进行配置就更好。 

        一切都准备好之后,我们就可以push和pull镜像文件到我们自己的私有镜像仓库了,只要在docker-compose.yml或其它命令参数里指定registry:5000,如:

image: registry:5000/backend-api:${VERSION}

        最后我们可以访问registry web进行查看和管理我们推送的镜像文件了:http://192.168.1.100:8080/

        界面实在是太简陋,就是显示出镜像文件列表和详情,就不截图说明了。

4. 私有仓库Harbor

        如果嫌弃Docker registry太简陋,需要更强大的管理能力,那就使用CNCF的Harbor系统,CNCF说明参见:Harbor | CNCF,Harbor官网:Harbor,具体的架构分析和安装使用,我们在另外单独的文章中再叙述。

5. 总结

        Docker镜像仓库是Docker镜像文件集中存储和管理的系统,我们发布的镜像文件可以很方便地push进镜像仓库,而容器集群任何节点都可以很方便地pull镜像仓库里的镜像文件下来进行部署。如果你的系统环境很小很简单,使用Docker registry就足够了,不然则使用Harbor吧。


http://www.niftyadmin.cn/n/5378562.html

相关文章

Jenkins打包springboot项目到k8s

目录 一、Jenkins配置1.1、pipeline插件安装 二、拉取git代码三、Maven打包spring项目三、docker构建镜像四、docker推送镜像五、kubelctl执行参考资料 一、Jenkins配置 1.1、pipeline插件安装 二、拉取git代码 pipeline {agent anystages {stage(Checkout) {steps {echo &q…

分布式锁redisson

文章目录 1. 分布式锁1.1 基本原理和实现方式对比synchronized锁在集群模式下的问题多jvm使用同一个锁监视器分布式锁概念分布式锁须满足的条件分布式锁的实现 1.2 基于Redis的分布式锁获取锁&释放锁操作示例 基于Redis实现分布式锁初级版本ILock接口SimpleRedisLock使用示…

基于requests框架实现接口自动化测试项目实战

requests库是一个常用的用于http请求的模块,它使用python语言编写,在当下python系列的接口自动化中应用广泛,本文将带领大家深入学习这个库,Python环境的安装就不在这里赘述了,我们直接开干。 01、requests的安装 wi…

原神4.0.1单机版【开局满级】纯单机,无限原石材料

版本介绍 版本4.0.1稳定版【过分追新并不稳,合理才完美】 独家原神,游戏内自带剧情任务,完美仿官,一比一完美复制! 已经拥有完美剧情、任务、副本、卡池、深渊、全物品、和全部功能和皮肤。 修改注意 如果要进行不…

​StableSwarmUI#超越文本的prompt

今天看到一个新的webui方案,是Stability-AI开源的: StableSwarmUI 是一个模块化的稳定扩散web用户界面,着重于使强大的工具易于访问、高性能和可扩展性。 由于项目还在开发中,我们可以先了解下,翻看了它的特点&#xf…

React和Vue 中的 router 实现原理如何

React 和 Vue 中的路由器(Router)实现原理类似,都是基于监听 URL 变化,然后根据不同的 URL 加载相应的组件或页面。下面是它们的一般实现原理: React Router 实现原理: History API: React Rou…

74HC373使用方法

74HC373属于D锁存器 OC:输出控制,低电平输出使能 LE:锁存使能输入,低电平直通,高电平锁存 Q:数据输出引脚 D:数据输入引脚

python从入门到精通(十):python常见标准库的使用

python数据分析和可视化基础 (一)Python 中处理日期和时间的模块time导入time模块time获取当前时间戳localtime获取当前时间struct_timeasctime获取格式化的时间ctime获取格式化的时间gmtime获取格式化的时间计时器功能strftime格式化日期strptime格式化日期格式化日期字符da…