简单的docker学习 第11章 镜像中心

第11章 镜像中心

Docker Hub 与阿里云都是 Docker 的公网镜像中心,用户可以将自己的镜像 push 到公网镜像中心中自己的镜像仓库,并可将仓库设置为私有库,使他人无法看到,更无法 pull,以保证镜像的安全性。不过,在实际生产中为了保障镜像的安全性,为了避免由于网络带宽或网速等问题而影响到镜像的拉取或推送,公司一般不会使用公网镜像中心,而是在公司内部搭建一个私有镜像中心。

注册发布暂不赘述,官网查看

11.7 harbor镜像中心

11.7.1 Harbor 简介

Harbor 是由 VMware 公司中国团队使用 Go 语言开发的一款 Registry server 开源项目,其是在 Docker Registry 的基础之上进行了二次封装。作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能与安全,同时也提供了一个非常方便、漂亮的 Web 管理界面。

Harbor 的官网为 https://goharbor.io/ 。Harbor 在 github 上的官网

11.7.2 Harbor 安装系统要求

Harbor 要安装的主机需要满足硬件与软件上的要求。

  • 硬件要求

    硬件资源 最小要求 推荐要求
    CPU 2CPU 4CPU
    内存 4GB 8GB
    硬盘 40G 160G
  • 软件要求

    软件资源 版本要求 作用
    Docker CE引擎 17.06.0 或更高版本 Harbor 是以容器形式在运行,需要Docker 引擎
    Docker Compose 1.18.0 或更高版本 Harbor 是 10 个容器在运行,通过 Docker ompose 编排
    OpenSSL 最新版 生成数字证书,以支持 HTTPS
11.7.3 安装 Harbor
  • 下载安装包

    在官网复制 Latest 最新版的离线安装包的下载链接地址,在 Linux 系统中通过 wget 命令下载,将其下载到某目录中。

    shell 复制代码
    wget https://github.com/goharbor/harbor/releases/download/v2.6.2/harbor-offline-installer-v2.6.2.tgz
  • 解压安装包

    将下载好的包解压到某目录中。解压后其就是一个独立的目录 harbor

    tar -zxvf harbor-offline-installer-v2.6.2.tgz -C /opt/apps
    
  • 修改 harbor.yml

    复制一份 harbor 解压包中的 harbor.yml.tmpl,并重命名为 harbor.yml。修改 harbor.yml 配置文件。共修改三处:

    • 将 hostname 指定为当前主机的 IP

    • 注释掉所有 https 相关配置

    • 记住(或修改)admin 用户的登录密码

      另外需要注意一点,harbor 默认的端口号为 80,修改为其他不易占用端口8005

      cp harbor.yml.tmpl harbor.yml

  • 运行 install.sh

    运行 harbor 解压目录中的 install.sh 命令,其会自动完成五步的安装过程,并在最终启动很多的容器。这些容器本质上就是通过 docker-compose 进行编排管理的

11.7.4 windows 浏览器访问

在浏览器地址栏中输入 http://192.168.138.129:8005 即可看到如下页面,在其中输入用户名admin,密码为 harbor.yml 中设置的密码,即可登录。

11.7.5 Harbor 的启停

由于 Harbor 是由 10 个容器同时运行完成的,且是通过 docker-compose 完成的容器编排。Harbor 安装完成后会在 harbor 解压目录中生成 docker-compose.yml 文件,所以 Harbor的启停命令,都是由 docker-compose 完成的,且需要在 harbor 的解压目录中完成

  • Harbor 停止

    docker-compose stop
    
  • Harbor 启动

    docker-compose up -d
    
11.7.6 Docker 客户端操作

registry 私有镜像中心搭建成功了,Docker 客户端就可以对其进行操作了。

  • 修改 daemon.json 文件

    默认情况下,为了保证安全,Docker 客户端都采用的是 https 提交各种请求,例如,登录请求、pull 请求、push 请求等。但私有镜像中心不接受 https 请求。所以需要告诉 Docker客户端该镜像中心地址是安全的,这样 Docker 客户端将会自动采用 http 请求方式。而对Docker 客户端的告知方式是,手工修改 Docker 客户端的/etc/docker/daemon.json 文件。在文件中添加如下内容:

    shell 复制代码
    vim /etc/docker/daemon.json
    {
      "registry-mirrors": ["https://z583cmea.mirror.aliyuncs.com"],
      "insecure-registries": ["192.168.138.129:8005"]
    }
    
    # 重启docker服务
    systemctl restart docker
  • 登录私有镜像中心

    shell 复制代码
    docker login 192.168.138.129
    Username: admin
    Password: 101022
  • 新增test项目

  • 复制并重命名镜像

    通过 docker tag 命令可以对原有镜像进行复制并重命名。

    这个重命名的镜像的<repository>中需要采用<domain-name>/<project-name><software-name>格式。

    当然,如果需要区分用户的话,也可以采用<domain-name>/<project-name>/<username>/<software-name>格式。

    • domain-name => 192.168.138.129:8005
    • project-name => test
    • username => admin
    • busy-box:1.0
    shell 复制代码
    # 复制三个镜像
    docker tag busybox 192.168.138.129:8005/test/admin/busy-box:1.0
    docker tag busybox 192.168.138.129:8005/test/admin/busy-box:1.2
    docker tag busybox 192.168.138.129:8005/test/admin/busy-box:1.3
  • 推送镜像

    docker push 192.168.138.129:8005/test/admin/busy-box:1.0
    docker push 192.168.138.129:8005/test/admin/busy-box:1.2
    docker push 192.168.138.129:8005/test/admin/busy-box:1.3
    
  • 查看镜像中心

  • 拉取镜像文件

    点击拉取命令复制图标即可

    shell 复制代码
    docker pull 192.168.138.129:8005/test/admin/busy-box:1.3
  • 登出私有镜像中心

    shell 复制代码
    docker logout 192.168.139.129:8005

11.9 Harbor 架构与工作原理

11.9.1 Harbor 架构模块

Harbor 整体架构中的组件非常多,下面简单介绍几个非常重要的模块。

  • Proxy

    反向代理服务器,由 Nginx 充当。负责接收并转发来自客户端的请求,无论请求是直接来自于浏览器的 HTTP 请求,还是来自于 Docker 客户端的命令。根据不同的请求,Proxy 会将其转发至 Core 或 Registry 模块

  • Core

    Harbor 的核心模块,有两个非常重要的子服务模块:

    • Notification Manager:通过 webhook 实现的消息管理模块。当 registry 中镜像发生改变时,会立即通知到 web 页面,即会在 web 页面中显示更新。

    • API Server:Proxy 根据不同的路由规则将请求首先转发到 API Server 的不同接口。但无论哪个处理接口,都强制要求对请求进行权限控制,即都需要请求先根据不同身份从

    • API Server 中的 AUTH 模块中获取到一个有效的 token。AUTH 模块是通过 token service实现的用户认证。

  • GC Collector

    负责整个系统中的 GC 管理。

  • Chart Museum

    Helm 的仓库。

  • Notary

    数据权限控制器。

  • Log Collector

    负责 Harbor 中其他模块的日志汇总。

  • Job Service

    负责镜像复制。在高可用 Harbor 集群中,通过 Job Service 可以将本地镜像同步到远程Harbor 实例上。

  • Distribution

    镜像中心,由 registry 镜像充当,负责存储 Docker 镜像,及处理 docker push/pull 请求。

  • k-v storage

    主要是为 Job Service 提供缓存服务的,将 Job 元数据临时性存放在其中。默认由 Redis充当。所以,Redis 在高可用 Harbor 集群中的作用很大

  • Local/Remote Storage

    可以将工程元数据、用户数据、角色数据、同步策略以及镜像元数据等存放在本地或远程服务器中的内存块、文件或持久化对象中。不过,一般会使用 SQL Database。

  • SQL Database

    用于存放工程元数据、用户数据、角色数据、同步策略以及镜像元数据等。默认采用PostgreSQL 数据库。

11.9.2 Harbor 架构图及工作原理

有关 Harbor 的系统架构描述,Harbor 在 GitHub 的官网中如下地址有直接的描述及架构图,架构图分解的非常细致。

11.9.3 Docker 命令执行流程
  • 关于公钥与私钥

    Harbor 搭建完毕后,token service 中就会保存该 harbor 的私钥,registry 中保存该 harbor的公钥。使用私钥加密称为数字签名,使用公钥解密称为签名验证。使用公钥加密称为加密,使用私钥解密稀烂解密。

  • docker login 命令

  • docker push 命令

相关推荐
dsywws2 分钟前
Linux学习笔记之时间日期和查找和解压缩指令
linux·笔记·学习
道法自然04023 分钟前
Ethernet 系列(8)-- 基础学习::ARP
网络·学习·智能路由器
爱吃生蚝的于勒9 分钟前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
wclass-zhengge24 分钟前
K8S篇(基本介绍)
云原生·容器·kubernetes
颜淡慕潇30 分钟前
【K8S问题系列 |1 】Kubernetes 中 NodePort 类型的 Service 无法访问【已解决】
后端·云原生·容器·kubernetes·问题解决
cuisidong19972 小时前
5G学习笔记三之物理层、数据链路层、RRC层协议
笔记·学习·5g
南宫理的日知录2 小时前
99、Python并发编程:多线程的问题、临界资源以及同步机制
开发语言·python·学习·编程学习
川石课堂软件测试2 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
数据与后端架构提升之路3 小时前
从神经元到神经网络:深度学习的进化之旅
人工智能·神经网络·学习
一行13 小时前
电脑蓝屏debug学习
学习·电脑