docker私有仓库的介绍以及 Docker registry 安装

news/2024/11/30 5:04:11/

文章目录

    • 什么是 Docker Registry
    • 镜像仓库工作机制
    • 常用的镜像仓库
    • 快速部署 Docker Registry
    • 上传镜像
    • 下载镜像
    • 部署域名地址的Docker registry

什么是 Docker Registry

镜像仓库(Docker Registry)负责存储、管理和分发镜像,并且提供了登录认证能力,建立了仓库的索引。

镜像仓库管理多个 Repository, Repository 通过命名来区分。每个 Repository 包含一个或多个镜像,镜像通过镜像名称和标签(Tag)来区分。

整体视图如下:

在这里插入图片描述

镜像仓库(Registry):通常通过 DNS 或 IP 地址来确定一个镜像仓库,如 hub.docker.com。一个 Registry 中可以存在多个 Repository,Repository 可分为 “顶层仓库” 和 “用户仓库”。用户仓库名称格式为 “用户名 / 仓库名”。每个仓库可以包含多个 Tag(标签),每个标签对应一个镜像。

  • Repository:由某特定的 docker 镜像的所有迭代版本组成的镜像仓库。
  • 镜像名称(name)+ 标签(tag)如 nginx:latest
  • 认证能力:提供用户注册,登录、登出能力。
  • 索引:提供镜像的索引信息,方便检索。

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

镜像仓库分类

  • 公有仓库:像阿里云、dockerhub 等放到公有网络上,不用登录就可以下载镜像,供大家访问使用。
  • 私有仓库:不对外开放,往往位于私有网络,只有公司内部人员可以使用。

镜像仓库工作机制

镜像仓库使用流程

  1. 通过 docker login 登录仓库。

  2. Docker pull 拉取需要的镜像。

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


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

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

实际工作中镜像仓库的使用:

在这里插入图片描述


常用的镜像仓库

  • DockerHub

    Docker Hub 是全球最大的镜像仓库,它是 Docker 提供的托管存储库服务,用于查找容器映像并与您的团队共享。

    具有以下功能:

    • 个人可以注册私有仓库,能够发布自己的镜像。
    • 提供镜像检索能力。
    • 提供海量官方和认证组织的镜像。
    • 从 GitHub 和 Bitbucket 自动构建容器镜像并将它们推送到 Docker Hub。
    • 支持 webhook(webhook 是一种基于 HTTP 的回调函数,发生指定的事件时,服务器会自动将相关的有效负载发送到客户端的 webhook URL)。
  • 国内镜像源

    国内从 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 流程的衔接点也是通过向私有镜像仓库上传镜像和拉取镜像的操作来完成的。

    常见的私有仓库工具:

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

快速部署 Docker Registry

# 下载镜像
docker pull registry
# 启动容器
docker run -d -p 5000:5000 --restart always --name=docker_registry registry

上传镜像

给要上传到私服的镜像打上标签:

docker tag 镜像名称 私服IP:5000/镜像名称
# 示例:
docker tag redis 127.0.0.1:5000/redis# 上传镜像到私服
docker push 127.0.0.1:5000/redis

在这里插入图片描述


下载镜像

可以先将本地的镜像删除

docker rmi 127.0.0.1:5000/redis
# 这里删除的只是tag,redis的原始镜像还在# 从私服拉取镜像
docker pull 127.0.0.1:5000/redisl

这里可以看到我们删除的只是tag,redis的原始镜像还在

在这里插入图片描述


部署域名地址的Docker registry

# 加载registry镜像。仅安装registry的主机执行
docker load -i registry.tar# 创建registry的自签名证书。仅安装registry的主机执行
openssl req -newkey rsa:4096 -nodes -sha256 -x509 -days 1825 \
-keyout /usr/local/docker_registry/certs/harbor.key \
-out /usr/local/docker_registry/certs/harbor.crt \
-config openssl_req.cnf# 将certs/harbor.crt拷贝到所有主机# 更新主机的registry自签名证书。所有主机都需要执行
\cp -f harbor.crt /etc/pki/ca-trust/source/anchors
update-ca-trust# 编辑系统/etc/hosts文件,添加registry域名解析地址。所有主机都需要执行
192.168.10.100 harbor.paic.com.cn# 更新docker配置文件中私有仓库地址。所有主机都需要执行
vi /etc/docker/daemon.json
``````
{"insecure-registries": ["harbor.paic.com.cn"]
}
``````# 重新加载docker配置。所有主机都需要执行
systemctl reload docker# 启动registry容器。仅安装registry的主机执行
docker run -d -p 443:5000 \
--restart=always \
# 容器名称
--name registry \
# 仓库镜像存放路径
-v /usr/local/docker_registry/docker_registry_storage:/var/lib/registry \
# registry自签名证书存放路径
-v /usr/local/docker_registry/certs:/home/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/home/certs/harbor.crt \
-e REGISTRY_HTTP_TLS_KEY=/home/certs/harbor.key \
registry:2.0

注:

  • 192.168.10.100 :registry 镜像仓库域名解析 ip 的示例,应为安装安装 registry 的主机 ip

  • harbor.paic.com.cn :registry 镜像仓库域名的示例,可修改

  • openssl_req.cnf :registry 自签名配置文件

    # 定义输入用户信息选项的"特征名称"字段名,该扩展字段定义了多项用户信息。
    distinguished_name = req_distinguished_name# 如果设为no,那么 req 指令将直接从配置文件中读取证书字段的信息,而不提示用户输入。
    prompt = no[req_distinguished_name]
    #国家代码,一般都是CN(大写)
    C = CN
    #省份
    ST = []
    #城市
    L = City
    #企业/单位名称
    O = YZT
    #企业部门
    OU = []
    #证书的主域名
    CN = harbor.paic.com.cn
    


http://www.ppmy.cn/news/1551109.html

相关文章

开发需求总结18-vue el-table合计功能, 前几列使用合计求和,最后一列的百分比数据,计算出平均百分比

需求&#xff1a; 在element UI的el-table组件中&#xff0c;可以通过show-summary属性和summary-method属性来实现合计功能。如果需要在合计行中显示特定列的百分比数据&#xff0c;可以在summary-method中自定义合计逻辑。 代码实现&#xff1a; <template><el-ta…

Excel如何设置超出单元格的内容不显示?

如图&#xff0c;在使用EXCEL时经常出现超出单元格显示的情况&#xff1a; 如果想要把超出单元格的部分隐藏&#xff0c;需要进行以下设置&#xff1a; 选中想要设置的单元格&#xff0c;然后点击对齐方式右边的按钮&#xff0c;对齐设置&#xff0c;选择“对齐”选项卡&#…

Hive构建日搜索引擎日志数据分析系统

1.数据预处理 根据自己或者学校系统预制的数据 使用less sogou.txt可查看 wc -l sogou.txt 能够查看总行数 2.数据扩展部分 我的数据位置存放在 /data/bigfiles 点击q退出 将一个文件的内容传递到另一个目录文件下 原数据在 /data/bigfiles ->传递 到/data/workspac…

为什么PHP爬虫抓取失败?解析cURL常见错误原因

豆瓣电影评分作为中国电影市场的重要参考指标&#xff0c;凭借其广泛覆盖的观众反馈和真实评分&#xff0c;成为电影市场推广和策略优化的核心依据之一。通过精准获取这些评分数据&#xff0c;电影制作方和发行方可以更好地理解观众需求&#xff0c;优化宣传策略&#xff0c;并…

Jenkins-基于 SSH 实现 Jenkins 分布式

工作原理 主节点与从节点通信&#xff1a; 主节点通过 SSH 登录到从节点&#xff0c;并启动 Jenkins Agent 程序&#xff08;Agent.jar&#xff09;Agent 程序通过主节点指定的端口&#xff08;默认为 50000&#xff09;与主节点保持通信 任务分发&#xff1a; 主节点根据任务配…

GaussianDreamer: Fast Generation from Text to 3D Gaussians——点云论文阅读(11)

此内容是论文总结&#xff0c;重点看思路&#xff01;&#xff01; 文章概述 本文提出了一种快速从文本生成3D资产的新方法&#xff0c;通过结合3D高斯点表示、3D扩散模型和2D扩散模型的优势&#xff0c;实现了高效生成。该方法利用3D扩散模型生成初始几何&#xff0c;通过噪声…

spring +fastjson 的 rce

前言 众所周知&#xff0c;spring 下是不可以上传 jsp 的木马来 rce 的&#xff0c;一般都是控制加载 class 或者 jar 包来 rce 的&#xff0c;我们的 fastjson 的高版本正好可以完成这些&#xff0c;这里来简单分析一手 环境搭建 <dependency><groupId>org.spr…

laravel中队列使用

Laravel 提供了强大的队列系统&#xff0c;允许开发者将耗时任务推送到后台执行&#xff0c;从而提升系统性能和用户体验。本文将从基本使用到深入解析&#xff0c;结合单进程队列的特点&#xff0c;完整地介绍 Laravel 队列的使用。 队列的作用和场景* 在 Web 开发中&#x…