openstack上传镜像失败_基于 Distribution / Harbor 部署 Docker 私有镜像仓库

本文介绍了Docker Registry的作用和分类,包括公共和私有Registry,并详细阐述了如何使用Distribution搭建私有仓库,以及遇到的HTTPS安全问题。接着,文章讨论了Harbor这个开源的私有仓库项目,强调了其特性如访问控制和镜像复制。最后,文中提供了安装Harbor的步骤和验证过程,以及如何在私有仓库中上传下载镜像。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

84ddc061d098097311cb2a58208a4683.png


1、了解 Docker Registry

1.1 介绍

  • Registry 用于保存 Docker 镜像,包括镜像的层次结构和元数据。

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

  • 拉取镜像时,如果不知道 Registry 仓库地址,默认从 Docker Hub 搜索拉取镜像。

1.2 分类

  • Sponsor Registry:第三方的 Registry,供客户和 Docker 社区使用。

  • Mirror Registry:第三方的 Registry,只让客户使用。如 docker cn 和 阿里云的镜像加速器。

  • Vendor Registry:服务商的 Registry,由发布 Docker 镜像的供应商提供的 Registry。如:红帽提供的专有的,收费提供。

  • Private Registry:通过设有防火墙和额外的安全层的私有实体提供的 Registry。自建的 Registry,在本地搭建 Registry,节省带宽。

1.3 Registry 组成( Repository 和 Index)

(1)Repository

  • 由特定的 Docker 镜像的所有迭代版本组成的镜像仓库。

  • 一个 Registry 中可以存在多个 Repository。

  • Repository 可分为 “顶层仓库” 和 “用户仓库”。

  • 用户仓库名称格式为 “用户名/仓库名”。

  • 每个仓库可以包含多个 Tag(标签),每个标签对应一个镜像。

(2)Index

  • 维护用户账户、镜像的校验以及公共命名空间的信息。

  • 相当于为 Registry 提供了一个完成用户认证等功能的检索接口。

1.4 拉取上传仓库镜像

(1)拉取镜像

docker pull <registry>[:<port>]/[<namespace>/]<name>:<tag>
  •  registry:仓库服务器地址,不指定默认是 Docker Hub。

  •  port:端口,默认是 443,因为是 https 协议。

  •  namespace:名称空间,指是哪个用户的仓库。如果是顶层仓库,可省。

  •  name:仓库名。

  •  tag:标签名,默认是 latest 版本。

(2)上传镜像

docker push [OPTIONS] NAME[:TAG]

1.5 知名三方 Docker 仓库

  • https://hub.docker.com/

  • https://quay.io/

2、使用官方 Distribution 搭建私有仓库

2.1 Distribution 介绍

Docker 在 2015 年推出了 Distribution 项目,即 Docker Registry 2。相比于 Old Registry,Registry 2 使用 Go 实现,在安全性、性能方面均有大幅改进。Registry 设计了全新的 Rest API,并且在 Image 存储格式等方面不再兼容于 Old Registry。如果你要与Registry2 交互,你的 Docker 版本至少要是 Docker 1.6。

Registry 2 在镜像存储方面不仅支持本地盘,还支持诸多主流第三方存储方案。通过分布式存储系统你还可以实现一个分布式 Docker Registry 服务。

2.2 安装启动 Registry 

Docker 的开发者也一直在致力于改善 Registry 安装和使用的体验,通过提供官方 Registry Image 以及 Docker Compose 工具等来简化 Registry 的配置。

在本文中,我们只是利用 Docker 以及 Registry 的官方 Image 来部署Registry。

2.2.1 方案1:使用 yum 安装(直接从 extras 源中下载安装)

[root@docker2 ~]# yum info docker-distribution已加载插件:fastestmirrorLoading mirror speeds from cached hostfile可安装的软件包名称    :docker-distribution架构    :x86_64版本    :2.6.2发布    :2.git48294d9.el7大小    :3.5 M源    :extras/7/x86_64简介    : Docker toolset to pack, ship, store, and deliver content网址    :https://github.com/docker/distribution协议    : ASL 2.0描述    : Docker toolset to pack, ship, store, and deliver content[root@docker2 ~]# yum -y install docker-distribution

2.2.2 方案2:以容器方式安装

(1)拉取镜像

[root@docker2 ~]# docker pull registry:2.6.22.6.2: Pulling from library/registryd6a5679aa3cf: Pull completead0eac849f8f: Pull complete2261ba058a15: Pull completef296fda86f10: Pull completebcd4a541795b: Pull completeDigest: sha256:5a156ff125e5a12ac7fdec2b90b7e2ae5120fa249cf62248337b6d04abc574c8Status: Downloaded newer image for registry:2.6.2

(2)启动 Registry 容器

[root@docker2 ~]# docker run --name registry -p 5000:5000 -v /data/registry:/var/lib/registry -d registry:2.6.2a43f802e737eba89879a4dc02562b38e0042db981f9bdb91782b453f0bac4119[root@docker2 ~]# docker port registry5000/tcp -> 0.0.0.0:5000[root@docker2 ~]# ss -nutlp |grep 5000tcp    LISTEN     0      128      :::5000                 :::*                   users:(("docker-proxy",pid=4901,fd=4))[root@docker2 ~]# docker inspect -f {
    {."Mounts"}} registry[{bind  /data/registry /var/lib/registry   true rprivate}]

注:

  • -p 5000:5000:将容器中的 5000 端口,暴露在宿主机的 5000 端口。

  • -v /data/registry:/var/lib/registry:指定宿主机存储的位置为 /data/registry。

  • -d:后台运行容器。

2.3 从私有仓库上传下载镜像

2.3.1 将本地的镜像上传到私有仓库

(1)先将本地仓库打上合适的标签

[root@docker1 ~]# docker tag busybox:latest 192.168.10.102:5000/busybox:v0.1[root@docker1 ~]# docker image lsREPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE192.168.10.102:5000/busybox   v0.1                758ec7f3a1ee        13 days ago         1.15 MBbusybox                       latest              758ec7f3a1ee        13 days ago         1.15 MB

(2)尝试上传镜像

[root@docker1 ~]# docker push 192.168.10.102:5000/busybox:v0.1The push refers to a repository [192.168.10.102:5000/busybox]Get https://192.168.10.102:5000/v1/_ping: http: server gave HTTP response to HTTPS client


可以看到上传镜像失败。其原因为:Docker 上传下载默认只支持 HTTPS 协议,搭建的私有仓库是 HTTP 协议。

(3)修改重启 Docker 服务

[root@docker1 ~]# vim /etc/docker/daemon.json{
      "registry-mirrors": ["https://registry.docker-cn.com"],  "insecure-registries": ["192.168.10.102:5000"]}[root@docker1 ~]# systemctl restart docker


注:让 Docker 支持私有仓库为 Insecure Registry。

(4)再次上传镜像

[root@docker1 ~]# docker push 192.168.10.102:5000/busybox:v0.1The push refers to a repository [192.168.10.102:5000/busybox]23bc2b70b201: Pushedv0.1: digest: sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe size: 527

(5)在私有仓库的服务器上验证

[root@docker2 ~]# ls /data/registry/docker/registry/v2/blobs  repositories

(6)从私有仓库拉取镜像,先删除再拉取

[root@docker1 ~]# docker rmi 192.168.10.102:5000/busybox:v0.1Untagged: 192.168.10.102:5000/busybox:v0.1Untagged: 192.168.10.102:5000/busybox@sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe[root@docker1 ~]# docker image lsREPOSITORY               TAG                 IMAGE ID            CREATED             SIZEbusybox                  latest              758ec7f3a1ee        2 weeks ago         1.15 MB[root@docker1 ~]# docker pull
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值