当前位置: 首页 > backend >正文

docker(四)使用篇一:docker 镜像仓库

前文我们已经介绍了 docker 并安装了 docker,下面我们将正式步入使用环节,本章是第一个使用教学:docker 镜像仓库

一、什么是镜像仓库

所谓镜像仓库,其实就是负责存储、管理和分发镜像的仓库,并且建立了仓库的索引,提供了登录认证能力。

镜像仓库可以看做一个大仓库,其内部又管理多个小镜像仓库(Repository),这些小镜像仓库通过命名来区分。

每个 Repository 包含一个或多个镜像,镜像之间则通过镜像名称和标签 (Tag)来区分。

镜像仓库整体视图

大镜像仓库(Registry)

镜像仓库可以看做一个大仓库,要从哪一个镜像仓库拉取镜像,通常通过 DNS 或 IP 地址来确定一个镜像仓库(如hub.docker.com)。一个 Registry 中可以存在多个 Repository。

小镜像仓库(Repository) 

由某特定的 docker 镜像的所有迭代版本组成的镜像仓库;又可分为“顶层仓库用户仓库”,用户仓库名称格式为“用户名 / 仓库名”。
每个仓库可以包含多个 Tag(标签),每个标签对应一个镜像。(镜像名称(name)+标签(tag):如 nginx:latest)

认证能力:

提供用户注册,登录、登出镜像仓库的能力。

索引:

提供镜像的索引信息,方便检索。

一个容器镜像实际包含了两个部分:

一个是元数据(存储镜像信息的数据),其实就是由 dockerfile 构建出来的描述文件,这个描述文件会说这个容器镜像有多少层,每一层里面有什么内容,它的 checksum 这些信息都会记录下来,还有最终的可执行文件在哪,都是在这个元数据里面。

还有一个是 blob 文件,它真正保存了数据,也真正占用空间。

二、镜像仓库的分类

1、以是否对外开放划分种类(研发人员常用):

1)公有仓库:像阿里云、docker hub 等放到公有网络上的镜像仓库,不用登录就可以下载镜像,供大家访问使用。

2)私有仓库:不对外开放,往往位于私有网络,只有公司内部人员可以使用。

2、按供应商和面向群体划分种类

(1)sponsor(赞助) registry:第三方的 registry,供客户和 docker 社区版使用。

(2)mirror(镜像) registry:第三方的 registry,只让客户使用,例如阿里云必须注册才能使用。

(3)vendor(供应商) registry:由发布 docker 镜像的供应商提供的 registry,例如像 Google 和 Redhat 提供了镜像仓库服务。

(4)private registry:通过没有防火墙和额外的安全层的私有实体提供的 registry,仅供内部使用。

三、镜像仓库的工作机制

1、镜像仓库的使用流程

(1)通过 docker login 登录仓库

(2)Docker pull 拉取需要的镜像

(3)通过 dockerfile 或者 commit 等方式制作完镜像再通过 docker push 上传到仓库

2、在实际研发中镜像仓库如何使用

Docker Registry 中的镜像通常由开发人员制作,而后推送至公共私有”Registry 上保存,供其他人员使用,例如“部署到生产环境。

实际工作中的 docker 使用流程图

开发环境:开发人员使用的一套环境

测试环境:需求开发完成后,发布到供测试人员进行测试的环境

预发布环境:版本测试完成后,发布到和生产类似的环境,提前模拟生产发布

生产环境:真正面向客户的环境

3、镜像仓库的拉取机制

启动容器时,docker daemon 会试图从本地获取相关的镜像;本地镜像不存在时,其会从 Registry 中下载该镜像并保存到本地。

四、常见的镜像仓库

1、docker hub(已被封禁,可以拉取公有镜像,但无法登陆私有仓库)

注意:截止至文章发布,因某些原因,docker hub 在国内已经被封禁,无法通过国内网络访问,仅可以拉取公有镜像!

Docker Hub Docker 提供的托管存储库服务,用于查找容器映像并与团队共享。

具有以下功能:

1)个人可以注册私有仓库,能够发布自己的镜像

2)提供镜像检索能力

3)提供海量官方和认证组织的镜像

4)从 GitHub Bitbucket 自动构建容器镜像并将它们推送到 Docker Hub

5)支持 webhook(webhook 是一种基于 HTTP 的回调函数,发生指定的事件时,服务器会自动将相关的有效负载发送到客户端的 webhook URL)

docker hub 的功能浏览

1、搜索镜像

 2、镜像 tag 查找

3、对应版本拉取命令

4、镜像的大小,idcpu 架构查看

2、国内公有镜像仓库

由于 docker hub 已经被封禁,通过正常渠道,我们只能访问国内各大云服务商提供的镜像仓库,如腾讯、阿里、华为等,笔者由于云服务器是华为云的,因此这里给出华为云镜像仓库的链接以及如何创建私有的镜像仓库:

华为开源镜像仓库

Docker华为云创建私人镜像仓库

3私有仓库

私有镜像仓库则是指部署在公司或组织内部的,用于自身应用 Docker 镜像存储、分发的镜像仓库。

在构建公司内部使用的自动化发布系统的过程中,从安全的角度出发,应用的打包镜像一般情况下只会被存储在私有镜像仓库中,CI / CD 流程的衔接点也是通过向私有镜像仓库上传镜像和拉取镜像的操作来完成的。

常见的私有仓库工具:

Harbor:Harbor: 

VMware 公司最近开源的企业级 Docker Registry 项目, 其目标是帮助用户迅速搭建一个企业级的 Docker registry 服务。它以 Docker 公司开源的registry 为基础,提供了管理 UI, 基于角色的访问控制(Role Based Access Control),AD/LDAP 集成、以及审计日志(Audit logging) 等企业用户需求的功能,同时还原生支持中文。Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 Docker Compose 来对它进行部署。

Nexus:

Nexus Sonatype 公司发布的一款仓库(Repository)管理软件,目前常被用来作为 Maven 私服、Docker 私服。

Docker registry:

docker 官方提供的私服,类似于 docker hub。用于保存公司内部上传的 Docker 镜像。

五、核心:镜像仓库相关命令

命令清单

命令别名功能备注
docker login登录仓库(在拉取私人镜像 / 向个人仓库推送镜像时,需要使用)必须掌握
docker logout登出仓库
docker pulldocker image pull从仓库拉取镜像(拉取公有镜像不需要登录)必须掌握
docker pushdocker image push向仓库推送镜像必须掌握
docker search查找镜像仓库中某个镜像(一般直接在网页查询了,用的较少)

1、docker login

# 注意:[]表示可选项,可有可无,后面都是如此,这里特别说明,后面不再赘述
docker login [核心参数] [镜像仓库地址]

核心参数:

-u(镜像仓库的用户名)

-p(镜像仓库的密码,建议不要在命令行中输入,会被看见

功能登陆到一个 Docker 镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub。 

通过华为云容器镜像服务给的登录指令,成功登录笔者自己的仓库

2、docker pull

# 此处的 TAG 指的是镜像标签;DIGEST则是另一种表示,sha256的值
docker pull [关键参数] 镜像仓库名[:TAG 或者 @DIGEST]

关键参数:

-a:拉取指定仓库中的某一镜像的所有不同版本。

--disable-content-trust :忽略镜像的校验,默认开启

功能:从镜像仓库中拉取指定镜像

# 示例:拉取 nginx 1.23.3 版本
docker pull nginx:1.23.3

3、docker push

docker push [关键参数] 镜像名称[:TAG]

关键参数:

-a:推送某一镜像的所有不同版本。

--disable-content-trust :忽略镜像的校验,默认开启

功能:把本地镜像上传至当前登录的镜像仓库

# 示例:向自己的的仓库推送 myapache v1 版本
docker push myapache:v1

4、docker search

# 因 docker hub 被国内封禁,此命令暂时无法实操
docker search [关键参数] 镜像名称

关键参数

--no-trunc:显示完整的镜像描述;

 -f <过滤条件>:列出收藏数不小于指定值的镜像。

功能:查找镜像仓库中某个镜像(一般直接在网页查询了,用的较少)

# 从 Docker Hub 查找所有镜像名包含 nginx,并且 star 数大于 10 的镜像
docker search -f stars=10 nginx

 5、docker logout

docker logout [镜像仓库地址]

功能:登出镜像仓库

http://www.xdnf.cn/news/6379.html

相关文章:

  • 全球宠物经济新周期下的亚马逊跨境采购策略革新——宠物用品赛道成本优化三维路径
  • SQL练习(3/81)
  • 【Python】【面试凉经】Fastapi为什么Fast
  • uniapp,小程序中实现文本“展开/收起“功能的最佳实践
  • 5G + 区块链:技术巨浪下的新型数字生态!
  • 【生活相关-日语-日本-东京-搬家后-引越(ひっこし)(3)-踩坑点:国民健康保险】
  • Cloudflare防火墙拦截谷歌爬虫|导致收录失败怎么解决?
  • 国产化中间件 替换 nginx
  • MySQL索引优化面试高频考点解析(附实战场景)
  • 16.2 VDMA视频转发实验之模拟源
  • 【爬虫】DrissionPage-3
  • Ubuntu离线安装Minio
  • 鸿蒙OSUniApp 实现的地图定位与导航功能#三方框架 #Uniapp
  • websocket简介与基本使用
  • Protobuf3协议关键字详解与应用实例
  • mybatis-plus配置逻辑删除
  • 以项目的方式学QT开发(一)
  • upload-labs靶场通关详解:第6-9关
  • 解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs- MCP内幕解析
  • css画图形
  • 海康立体相机3DMVS软件使用不同工作模式介绍
  • vue3项目中使用CanvasEditor开箱即用(组件的形式,组件封装好了)
  • AI数字人融合VR全景:从技术突破到可信场景落地
  • Hive PredicatePushDown 谓词下推规则的计算逻辑
  • Springboot3自定义starter笔记
  • 数据科学和机器学习的“看家兵器”——pandas模块 之五
  • AI实时对话的通信基础,WebRTC技术综合指南
  • 网络安全-等级保护(等保) 2-5 GB/T 25070—2019《信息安全技术 网络安全等级保护安全设计技术要求》-2019-05-10发布【现行】
  • WebRTC技术下的EasyRTC音视频实时通话SDK,助力车载通信打造安全高效的智能出行体验
  • day 17 无监督学习之聚类算法