Docker Registry(镜像仓库)

发布时间:2024年01月23日

什么是Docker Registry

镜像仓库负责存储,管理和分发镜像,并且提供登入认证能力,建立仓库的索引。
镜像仓库管理多个repositoy,repositoy通过命名来区分。每个repository包含一个或多个镜像,镜像通过镜像名称和标签(tag)来区分。
image.png

  • 镜像仓库(regisry):要从哪一个镜像仓库拉取镜像,通常通过 DNS 或 IP 地址来确定一个镜像仓库如 hub.docker.com;一个 Registry 中可以存在多个Repository·Repository 可分为“顶层仓库”和“用户仓库”;·用户仓库名称格式为“用户名/仓库名”·每个仓库可以包含多个 Tag(标签),每个标签对应一个镜像
  • Repository:由某特定的docker镜像的所有迭代版本组成的镜像仓库
  • 镜像:tag :如nginx:1.20.1
  • 认证能力:提供用户注册,登入,登场能力
  • 索引:提供镜像的索引信息,方便检索

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

镜像仓库分类

按是否对外开放划分,也是研发人员常说的
(1)公有仓库:像阿里云、dockerhub 等放到公有网络上,不用登录就可以下载镜像,
供大家访问使用
(2)私有仓库:不对外开放,往往位于私有网络,只有公司内部人员可以使用。
按供应商和面向群体划分
(1) sponsor(赞助) registry:第三方的 registry,供客户和 docker 社区版使用
(2) mirror(镜像) registry:第三方的 registry,只让客户使用,例如阿里云必须注册才能使用
(3) vendor(供应商) registry:由发布 docker 镜像的供应商提供的 registry,例如像Google 和 Redhat 提供了镜像仓库服务
(4) private registry:通过没有防火墙和额外的安全层的私有实体提供的 registry,仅供内部使用

镜像仓库工作机制

镜像仓库使用流程

  1. 通过docker login 登入仓库
  2. docker pull 拉取需要的镜像
  3. 通过dockerfile/commit将制作完成的镜像通过docker push上传到仓库

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

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

常用的镜像仓库

docker hub

Docker Hub 是 Docker 提供的托管存储库服务,用于查找容器映像并与您的团队共享。
具有以下功能:
(1)个人可以注册私有仓库,能够发布自己的镜像
(2)提供镜像检索能力
(3)提供海量官方和认证组织的镜像
(4)从 GitHub 和 Bitbucket 自动构建容器镜像并将它们推送到 Docker Hub
(5)支持 webhook(webhook 是一种基于 HTTP 的回调函数,发生指定的事件时,服务器会自动将相关的有效负载发送到客户端的 webhook URL)
镜像搜索
镜像tag查找
对应版本的拉取命令,镜像大小,id,cpu架构,漏洞

国内镜像源

国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。国内很多 云服务商都提供了国内镜像加速器服务,例如:
阿里云加速器(点击管理控制台 -> 登录账号(淘宝账号) -> 右侧镜像工具 -> 镜像加速器 -> 复制加速器地址)
网易云加速器地址 https://hub-mirror.c.163.com
百度云加速器地址"https://mirror.baidubce.com"
可以在 /etc/docker/daemon.json 中写入如下内容(如果文件不存在请新建该文件)

{
# 注意如果最外层以及你给有了配置,不要直接覆盖,而是将下面的内容添加,然
后确保 json 的格式正确
 "registry-mirrors": [
 "https://hub-mirror.c.163.com",
 "https://mirror.baidubce.com"
 ]
}

添加完成后需要重新加载配置,重启 Docker

# 加载配置
sudo systemctl daemon-reload 
# 重启 docker
sudo systemctl restart docker 
#查看 docker 状态
sudo systemctl status docker

私有仓库

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

  • Nexus:_Nexus 是 _Sonatype 公司发布的一款仓库(Repository)管理软件,目前常被用来作为 Maven 私服、Docker 私服。
  • Docker registry:由 docker 官方提供的私服,类似于 docker hub。用于保存公司内部上传的 Docker 镜像。
  • Harbor:Harbor 是 VMware 公司最近开源的企业级 Docker Registry 项目, 其目标 是帮助用户迅速搭建一个企业级的 Docker registry 服务。它以 Docker 公司开源的registry 为基础,提供了管理 UI, 基于角色的访问控制(Role Based Access Control),AD/LDAP 集成、以及审计日志(Audit logging) 等企业用户需求的功能,同时还原生支持中文。Harbor 的每个组件都是以 Docker 容器的形式构建的,使用 Docker Compose 来对它进行部署。

镜像仓库命令

命令清单
命令别名功能
docker login登入仓库
docker pulldocker image pull拉取镜像
docker pushdocker image push推送镜像
docker search
查找镜像
docker logout登出仓库

docker login
docker login [options] [server]
  • 参数
    • -u:登入的用户名
    • -p:登入的密码

不写server默认登入docker hub

image.png

docker pull
docker pull [options] name:[:tag|@digest]
# 别名
docker image pull
  • 参数
    • -a:拉取所有tagge的镜像
    • –disable-content-trust:忽略镜像校验,默认开启

image.png

docker push
docker push [options] name[:tag]
# 别名
docker image push
  • 参数
    • -a:拉取所有tagge的镜像
    • –disable-content-trust:忽略镜像校验,默认开启

在进行push之前要先有自己仓库repositoy
image.png
image.png

docker tag nginx:1.23.3 你的仓库名:tagname
docker push 你的仓库名:tagname

image.png

docker search
docker search [options] term
  • 参数
    • –no-trunc:显示完整的镜像描述
    • -f<过滤条件>:列出收藏数不小于指定值的镜像

image.png

docker logout
docker logout [server]

image.png

文章来源:https://blog.csdn.net/weixin_61427900/article/details/135771623
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。