跨境互联网 跨境互联网
首页
  • AI 工具

    • 绘图提示词工具 (opens new window)
    • ChatGPT 指令 (opens new window)
  • ChatGPT

    • ChatGP T介绍
    • ChatGPT API 中文开发手册
    • ChatGPT 中文调教指南
    • ChatGPT 开源项目
  • Midjourney

    • Midjourney 文档
  • Stable Diffusion

    • Stable Diffusion 文档
  • 其他

    • AIGC 热门文章
    • 账号合租 (opens new window)
    • 有趣的网站
  • Vue

    • Vue3前置
  • JAVA基础

    • Stream
    • Git
    • Maven
    • 常用第三方类库
    • 性能调优工具
    • UML系统建模
    • 领域驱动设计
    • 敏捷开发
    • Java 测试
    • 代码规范及工具
    • Groovy 编程
  • 并发编程&多线程

    • 并发编程
    • 高性能队列 Disruptor
    • 多线程并发在电商系统下的应用
  • 其他

    • 面试题
  • 消息中间中间件

    • Kafka
    • RabbitMQ
    • RocketMQ
  • 任务调度

    • Quartz
    • XXL-Job
    • Elastic-Job
  • 源码解析

    • Mybatis 高级使用
    • Mybatis 源码剖析
    • Mybatis-Plus
    • Spring Data JPA
    • Spring 高级使用
    • Spring 源码剖析
    • SpringBoot 高级使用
    • SpringBoot 源码剖析
    • Jdk 解析
    • Tomcat 架构设计&源码剖析
    • Tomcat Web应用服务器
    • Zookeeper 高级
    • Netty
  • 微服务框架

    • 分布式原理
    • 分布式集群架构场景化解决方案
    • Dubbo 高级使用
    • Dubbo 核心源码剖析
    • Spring Cloud Gateway
    • Nacos 实战应用
    • Sentinel 实战应用
    • Seata 分布式事务
  • 数据结构和算法的深入应用
  • 存储

    • 图和Neo4j
    • MongoDB
    • TiDB
    • MySQL 优化
    • MySQL 平滑扩容实战
    • MySQL 海量数据存储与优化
    • Elasticsearch
  • 缓存

    • Redis
    • Aerospike
    • Guava Cache
    • Tair
  • 文件存储

    • 阿里云 OSS 云存储
    • FastDF 文件存储
  • 基础

    • Linux 使用
    • Nginx 使用与配置
    • OpenResty 使用
    • LVS+Keepalived 高可用部署
    • Jekins
  • 容器技术

    • Docker
    • K8S
    • K8S
  • 01.全链路(APM)
  • 02.电商终极搜索解决方案
  • 03.电商亿级数据库设计
  • 04.大屏实时计算
  • 05.分库分表的深入实战
  • 06.多维系统下单点登录
  • 07.多服务之间分布式事务
  • 08.业务幂等性技术架构体系
  • 09.高并发下的12306优化
  • 10.每秒100W请求的秒杀架构体系
  • 11.集中化日志管理平台的应用
  • 12.数据中台配置中心
  • 13.每天千万级订单的生成背后痛点及技术突破
  • 14.红包雨的架构设计及源码实现
  • 人工智能

    • Python 笔记
    • Python 工具库
    • 人工智能(AI) 笔记
    • 人工智能(AI) 项目笔记
  • 大数据

    • Flink流处理框架
  • 加密区

    • 机器学习(ML) (opens new window)
    • 深度学习(DL) (opens new window)
    • 自然语言处理(NLP) (opens new window)
AI 导航 (opens new window)

Revin

首页
  • AI 工具

    • 绘图提示词工具 (opens new window)
    • ChatGPT 指令 (opens new window)
  • ChatGPT

    • ChatGP T介绍
    • ChatGPT API 中文开发手册
    • ChatGPT 中文调教指南
    • ChatGPT 开源项目
  • Midjourney

    • Midjourney 文档
  • Stable Diffusion

    • Stable Diffusion 文档
  • 其他

    • AIGC 热门文章
    • 账号合租 (opens new window)
    • 有趣的网站
  • Vue

    • Vue3前置
  • JAVA基础

    • Stream
    • Git
    • Maven
    • 常用第三方类库
    • 性能调优工具
    • UML系统建模
    • 领域驱动设计
    • 敏捷开发
    • Java 测试
    • 代码规范及工具
    • Groovy 编程
  • 并发编程&多线程

    • 并发编程
    • 高性能队列 Disruptor
    • 多线程并发在电商系统下的应用
  • 其他

    • 面试题
  • 消息中间中间件

    • Kafka
    • RabbitMQ
    • RocketMQ
  • 任务调度

    • Quartz
    • XXL-Job
    • Elastic-Job
  • 源码解析

    • Mybatis 高级使用
    • Mybatis 源码剖析
    • Mybatis-Plus
    • Spring Data JPA
    • Spring 高级使用
    • Spring 源码剖析
    • SpringBoot 高级使用
    • SpringBoot 源码剖析
    • Jdk 解析
    • Tomcat 架构设计&源码剖析
    • Tomcat Web应用服务器
    • Zookeeper 高级
    • Netty
  • 微服务框架

    • 分布式原理
    • 分布式集群架构场景化解决方案
    • Dubbo 高级使用
    • Dubbo 核心源码剖析
    • Spring Cloud Gateway
    • Nacos 实战应用
    • Sentinel 实战应用
    • Seata 分布式事务
  • 数据结构和算法的深入应用
  • 存储

    • 图和Neo4j
    • MongoDB
    • TiDB
    • MySQL 优化
    • MySQL 平滑扩容实战
    • MySQL 海量数据存储与优化
    • Elasticsearch
  • 缓存

    • Redis
    • Aerospike
    • Guava Cache
    • Tair
  • 文件存储

    • 阿里云 OSS 云存储
    • FastDF 文件存储
  • 基础

    • Linux 使用
    • Nginx 使用与配置
    • OpenResty 使用
    • LVS+Keepalived 高可用部署
    • Jekins
  • 容器技术

    • Docker
    • K8S
    • K8S
  • 01.全链路(APM)
  • 02.电商终极搜索解决方案
  • 03.电商亿级数据库设计
  • 04.大屏实时计算
  • 05.分库分表的深入实战
  • 06.多维系统下单点登录
  • 07.多服务之间分布式事务
  • 08.业务幂等性技术架构体系
  • 09.高并发下的12306优化
  • 10.每秒100W请求的秒杀架构体系
  • 11.集中化日志管理平台的应用
  • 12.数据中台配置中心
  • 13.每天千万级订单的生成背后痛点及技术突破
  • 14.红包雨的架构设计及源码实现
  • 人工智能

    • Python 笔记
    • Python 工具库
    • 人工智能(AI) 笔记
    • 人工智能(AI) 项目笔记
  • 大数据

    • Flink流处理框架
  • 加密区

    • 机器学习(ML) (opens new window)
    • 深度学习(DL) (opens new window)
    • 自然语言处理(NLP) (opens new window)
AI 导航 (opens new window)
  • Docker

    • 基础使用-Docker是什么
    • 基础使用-为什么使用Docker
    • 基础使用-Docker安装
    • 基础使用-Docker架构
    • 基础使用-Docker部署微服务
    • 集群管理-微服务Docker打包
      • 1 DockerHUb仓库管理
        • 1.1 什么是DockerHUb
        • 1.2 账号注册和登陆
        • 1.3 Docker客户端登录
        • 1.4 管理镜像
        • 1.4.1 删除镜像
        • 1.4.2 修改镜像命名
        • 1.5 推送镜像
        • 1.5.1 推送镜像
        • 1.5.2 检查镜像
        • 1.6 仓库镜像测试
        • 1.6.1 删除本地镜像
        • 1.6.2 从仓库拉取镜像
        • 1.6.3 运行镜像
        • 1.6.4 访问测试
        • 1.6.5 直接运行测试
      • 2 registry仓库管理
        • 2.1 registry简介
        • 2.2 安装registry
        • 2.2.1 访问测试
        • 2.3 上传镜像
        • 2.3.1 修改镜像名称
        • 2.3.2 推送镜像
        • 2.3.3 修改Docker推送配置
        • 2.3.4 再次进行推送
        • 2.3.5 再次访问registry
        • 2.4 registry镜像测试
        • 2.4.1 删除本地镜像
        • 2.4.2 运行registry中的镜像
        • 2.4.3 访问微服务测试
      • 3 使用Harbor管理仓库
        • 3.1 什么是Harbor
        • 3.2 Harbor的三种安装方式
        • 3.3 为什么使用私用仓库
        • 3.4 harbor 的基本组件
        • 3.5 前置工作
        • 3.5.1 下载安装包
        • 3.5.2 准备环境
        • 3.6 离线安装
        • 3.6.1 解压安装包
        • 3.6.2 修改harbor.yml
        • 3.6.3 加载本地镜像
        • 3.6.4 执行安装命令
        • 3.6.5 启动和停止harbor
        • 3.7 harbor使用
        • 3.7.1 访问harbor
        • 3.7.2 Docker登录harbor
        • 3.7.3 修改Docker配置
        • 3.7.4 再次进行登录
        • 3.7.5 修改镜像tag
        • 3.7.6 推送镜像
        • 3.8 harbor 测试
        • 3.8.1 删除本地镜像
        • 3.8.2 运行harbor 中的镜像
        • 3.8.3 访问微服务测试
        • 3.8.4 查看harbor详情
        • 3.9 HarBor用户权限说明
        • 3.10 HarBor权限配置
        • 3.10.1 新建用户
        • 3.10.2 用户授权
        • 3.10.3 用户登录测试
        • 3.10.4 docker登录测试
        • 3.10.5 拉取镜像测试
      • 4 Harbor支持Https(扩展)
        • 4.1 生成证书颁发机构证书
        • 4.1.1 创建证书目录
        • 4.1.2 生成CA证书私钥
        • 4.1.3 生成CA证书
        • 4.2 生成服务器证书
        • 4.2.1 生成私钥
        • 4.2.2 生成证书签名请求(CSR)
        • 4.2.3 生成一个x509 v3扩展文件
        • 4.2.4 生产主机证书
        • 4.3 配置harbor.yml
        • 4.4 重新安装harbor服务
        • 4.4.1 停止harbor
        • 4.4.2 重新安装
        • 4.5 修改Docker推送配置
        • 4.6 修改本地host文件
        • 4.7 域名访问harbor
    • 集群管理-微服务Docker打包
    • 集群管理-任务编排工具
    • 集群管理-docker-compose容器编排
    • 集群管理-Swarm集群编排
    • 集群管理-Docker Stack管理服务
    • 集群管理-portainer使用
    • 补充-Docker
    • 资料
  • k8s

  • k8s

  • Docker容器
  • Docker
Revin
2023-06-19
目录

集群管理-微服务Docker打包

img

docker仓库,用来管理镜像

主要分为公共仓库和私人仓库,下面介绍了公共仓库Docker Hub、私人仓库Registry和harbor

# 1 DockerHUb仓库管理

# 1.1 什么是DockerHUb

保存和分发镜像的最直接方法就是使用 Docker Hub

Docker Hub 是 Docker 公司维护的公共 Registry,用户可以将自己的镜像保存到 Docker Hub 免费的 repository 中,如果不希望别人访问自己的镜像,也可以购买私有 repository

# 1.2 账号注册和登陆

一般,你需要先在docker中心创建一个账户(如果您尚未有),你可以直接在Docker Hub (opens new window)创建你的账户。

image-20210324090340213

如果有已有账号可以点击sign in 进行登录,登陆后是这个样子

image-20210324090450380

# 1.3 Docker客户端登录

使用docker login登录dockerhub

这将提示您输入用户名,这个用户名将成为你的公共存储库的命名空间名称。如果你的名字可用,docker会提示您输入一个密码和你的邮箱,然后会自动登录到Docker Hub,你现在可以提交和推送镜像到Docker Hub的你的存储库。

docker login
1

image-20210324090729476

出现 Login Succeeded就说明我们登录成功

注:你的身份验证凭证将被存储在你本地目录的.dockercfg文件中

# 1.4 管理镜像

通过docker images可以看到我们所有的镜像列表

docker images
1

image-20230616001345357

# 1.4.1 删除镜像

我们现在的learn-docker-storage有三个版本,现在我们把前两个有问题的版本删除,docker rmi 镜像ID可以删除镜像

docker rmi learn-docker-storage:0.0.1 learn-docker-storage:0.0.2
1

image-20210331104535211

这样我们就删除了我们没有用的镜像了,可以节省内存空间

# 1.4.2 修改镜像命名

修改镜像的 repository 使之与 Docker Hub 账号匹配

Docker Hub 为了区分不同用户的同名镜像,镜像的 registry 中要包含用户名,完整格式为:[用户名]/镜像名:tag

我们通过 docker tag 命令重命名镜像

docker tag learn-docker-storage:0.0.3 baiyp/learn-docker-storage:0.0.3
1

image-20210331105623934

这样就将我们的镜像改名了,这个就符合我们的dockerhub的规范了

# 1.5 推送镜像

# 1.5.1 推送镜像

现在我们要将我们的镜像推送到docker hub

推送镜像的规范是docker push 注册用户名/镜像名:tag,因为我们上面已经把镜像名字改正确了,所以可以直接推送。

docker push baiyp/learn-docker-storage:0.0.3
1

image-20210331112655104

这样我们就将我们的数据推送到docker hub,我们发现只有最顶层的镜像推送了,openjdk的镜像并没有推送,直接复用了仓库的,这就是分层的好处

# 1.5.2 检查镜像

我们可以到docker hub检查我们的镜像

image-20210324095956948

可以看到我们的镜像已经推送过来了,点开详情可以看到我们镜像的内容以及tag号

image-20210324100107954

# 1.6 仓库镜像测试

# 1.6.1 删除本地镜像

可以通过docker rmi 镜像ID删除本地镜像

docker rmi baiyp/learn-docker-storage:0.0.3 learn-docker-storage:0.0.3
1

image-20210331112937966

再次查看本地镜像,已经没有了我们的微服务的镜像

docker images
1

image-20210331112953391

# 1.6.2 从仓库拉取镜像

这个时候可以从docker hub拉取镜像

docker pull baiyp/learn-docker-storage:0.0.3
1

image-20210331113214552

这个时候已经将镜像拉取下来了,我们可以运行镜像了

# 1.6.3 运行镜像

执行下面的命令进行创建镜像

docker run -d \
-v /tmp/data/logs:/logs \
-p 8003:8003 \
--name learn-docker-storage \
--network=learn-docker-network \
baiyp/learn-docker-storage:0.0.3
1
2
3
4
5
6

image-20210331113332483

# 1.6.4 访问测试

我们访问下,检查下是否可以正常运行

 curl http://192.168.64.153:8003/storage/employe/findByID/10001 | python -m json.tool
1

image-20210331113422484

到这里我们就完成dockerhub仓库的发布与拉取

# 1.6.5 直接运行测试

在真实环境中,我们一般不会拉取在运行,一般都是直接运行,如果docker检查镜像不存在会自动拉取

停止服务并删除镜像

 docker rm -f learn-docker-storage
 docker rmi baiyp/learn-docker-storage:0.0.3
1
2

image-20210331140042638

我们直接运行容器

docker run -d \
-v /tmp/data/logs:/logs \
-p 8003:8003 \
--name learn-docker-storage \
--network=learn-docker-network \
baiyp/learn-docker-storage:0.0.3
1
2
3
4
5
6

image-20210331140649430

这一个run命令就解决了容器的拉取以及容器运行的问题

# 2 registry仓库管理

# 2.1 registry简介

官方提供了Docker Hub网站来作为一个公开的集中仓库,然而,本地访问Docker Hub速度往往很慢,并且很多时候我们需要一个本地的私有仓库只供网内使用

Docker仓库实际上提供两方面的功能,一个是镜像管理,一个是认证。前者主要由docker-registry项目来实现,通过http服务来上传下载;后者可以通过docker-index(闭源)项目或者利用现成认证方案(如nginx)实现http请求管理。

docker registry 就是管理 docker 镜像的服务, Docker 公司维护的 registry 就是 http://hub.docker.com ,它可以让我们方便的下载预先做好的镜像。

# 2.2 安装registry

我们可以通过获取官方的 registry 镜像来运行。

这将使用官方提供的 registry 镜像来启动私有仓库,默认情况下,仓库会被创建在容器的 /var/lib/registry 目录下。我们可以通过 -v 参数将镜像文件存放在本地的指定路径。

docker run -d \
-p 5000:5000 \
-v /tmp/data/registry:/var/lib/registry \
--restart=always \
registry
1
2
3
4
5

image-20210324105655868

这样我们的registry已经启动起来了

# 2.2.1 访问测试

这时我们可以通过浏览器访问 http://ip:5000/v2/_catalog 查看仓库是否启动成功。

curl http://192.168.64.152:5000/v2/_catalog
1

image-20210324105822342

# 2.3 上传镜像

registry 上传镜像的命名规范是 仓库IP:5000/镜像名称:tag

# 2.3.1 修改镜像名称

将我们的镜像改成服务规范的名字

docker tag baiyp/learn-docker-storage:0.0.3 192.168.64.153:5000/learn-docker-storage:0.0.3
1

image-20210331140928437

# 2.3.2 推送镜像

使用命令推送镜像

docker push 192.168.64.153:5000/learn-docker-storage:0.0.3
1

我们发现推送报错了,这是因为docker推送默认使用的https的方式,而我们的registry只支持http的方式

image-20210331141014750

# 2.3.3 修改Docker推送配置

对于 Linux 系统,我们可以在 /etc/docker/daemon.json (daemon.josn 文件不存在则新建该文件)

 vi /etc/docker/daemon.json
1

添加下面的配置

{ "insecure-registries": ["仓库IP:5000"] }
1

完整的配置如下

{
  "insecure-registries": ["192.168.64.153:5000"],
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
1
2
3
4

执行以下命令重启重新加载配置并生效

systemctl daemon-reload
service docker restart
1
2

image-20210324111734152

# 2.3.4 再次进行推送

执行命令再次推送

docker push 192.168.64.153:5000/learn-docker-storage:0.0.3
1

image-20210331141340211

我们发现这次推送成功了

# 2.3.5 再次访问registry

访问测试检查是否已经推送

curl http://192.168.64.153:5000/v2/_catalog | python -m json.tool
1

image-20210331141400915

我们发现我们的镜像已经推送到了registry,我们通过以下URL访问下tag列表

curl http://192.168.64.153:5000/v2/learn-docker-storage/tags/list | python -m json.tool
1

image-20210331141442723

# 2.4 registry镜像测试

# 2.4.1 删除本地镜像

可以通过docker rmi 镜像ID删除本地镜像

docker rmi baiyp/learn-docker-storage:0.0.3 192.168.64.153:5000/learn-docker-storage:0.0.3
1

image-20210331141542750

# 2.4.2 运行registry中的镜像

docker run -d \
-v /tmp/data/logs:/logs \
-p 8003:8003 \
--name learn-docker-storage \
--network=learn-docker-network \
192.168.245.165:5000/learn-docker-storage:0.0.2
1
2
3
4
5
6

image-20210331141807319

我们发现自己的registry很快就拉取并且运行起来了

# 2.4.3 访问微服务测试

 curl http://192.168.245.165:8003/storage/employe/findByID/10001 | python -m json.tool
1

image-20210331141853362

# 3 使用Harbor管理仓库

# 3.1 什么是Harbor

  • 管理用户界面
  • 基于角色的访问控制
  • LDAP/AD 集成及日志审计等基本运维操作

harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是 Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功能外,它还整合了K8s的插件(Add-ons)仓 库,即Helm通过chart方式下载,管理,安装K8s插件,而chartmuseum 可以提供存储chart数据的仓库。

另外它还整合了两个开源的安全组件,一个是Notary,另一个是Clair,Notary类似 于私有CA中心,而Clair则是容器安全扫描工具,它通过各大厂商提供的 CVE漏洞库来获取最新漏洞信息,并扫描用户上传的容器是否存在已知的 漏洞信息,这两个安全功能对于企业级私有仓库来说是非常具有意义的。

# 3.2 Harbor的三种安装方式

这里我们使用离线安装

  • 在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小
  • 离线安装:安装包包含部署的相关镜像,因此安装包比较大
  • OVA安装程序(第三方):当用户具有vCenter环境时,使用此安装程序,在部署 OVA后启动Harbor

# 3.3 为什么使用私用仓库

公司的项目一般不予许我们上传到 Docker Hub 这类的公共仓库中,所有学会创建一个私有仓库也是非常必要的

虽然hub.docker.com上可以保存镜像,但是网速相对较慢,在内部环境中搭建一个私有的公共仓库是个更好的方案。

# 3.4 harbor 的基本组件

组件 功能
harbor-adminserver 配置管理中心
harbor-db 数据库
harbor-jobservice 镜像复制
harbor-log 日志操作
harbor-ui Web管理页面和API
nginx 前端代理,负责前端页面和镜像上传/下载转发
redis 会话
registry 镜像存储

# 3.5 前置工作

# 3.5.1 下载安装包

Harbor官方地址:https://github.com/goharbor/harbor/releases 下载最新版安装包

image-20210324142854935

# 3.5.2 准备环境

需要安装docker以及docker-compose的环境上面我们已提前安装了

  • 安装Docker环境
  • 安装docker-compose环境

# 3.6 离线安装

# 3.6.1 解压安装包

解压harbor的安装包

tar -zxf harbor-offline-installer-v2.1.4.tgz
1

进入目录 然后将harbor.yml.tmp复制一份并该命为harbor.yml

cd harbor
cp harbor.yml.tmpl harbor.yml
1
2

image-20210324143437705

注意: 这里跟老版本不一样,没有了harbor.cfg文件,我们需要手动复制harbor.yml.tmpl在做修改即可

# 3.6.2 修改harbor.yml

harbor作为私有仓库作用在公司内网,一般都是信任关系,没多大必要做https,使用http即可! 所以 把https相关的已经注释掉

image-20210324143725678

并注意配置文件的用户名密码配置,默认是 用户名是:admin,密码是:Harbor12345,如果修改需要安装前修改

image-20230616001857831

# 3.6.3 加载本地镜像

使用docker load命令加载本地镜像,不用再从dockerhub下载了

docker load -i harbor.v2.1.4.tar.gz
1

image-20210324145201802

这样容器镜像就被加载到了本地,我们可以通过docker images命令查看导入的镜像

docker images
1

image-20210324145335024

# 3.6.4 执行安装命令

先执行预处理命令,会创建一些文件夹,初始化一些文件

./prepare
1

image-20210324145537352

然后开始真正的安装过程

./install.sh
1

image-20210324145623107

如果出现-Harbor has been installed and started successfully表示安装成功,并查看docker进程

docker ps
1

image-20210324145731364

可以看到很多服务已经起来了。

# 3.6.5 启动和停止harbor

在harbor的安装目录执行以下命令就可以启动和停止了

# 启动
docker-compose up -d 
# 停止
docker-compose stop 
# 重新启动
docker-compose restart 
1
2
3
4
5
6

# 3.7 harbor使用

# 3.7.1 访问harbor

输入 http://harborIP就可以直接访问了,这里访问我们的地址http://192.168.64.153/

image-20210331150438618

输入用户名密码就可以登录了 ,如果没有修改配置文件 默认是 用户名是:admin,密码是:Harbor12345

image-20210324150050490

登录后就可以进行操作了

# 3.7.2 Docker登录harbor

使用docker login命令就可以登录harbor了

docker login -u admin -p Harbor12345 192.168.245.165
1

image-20210331151336481

我们发现登录报错了,这和registry一样,docker模式使用https方式,而我们使用的是http的方式登录

# 3.7.3 修改Docker配置

对于 Linux 系统,我们可以在 /etc/docker/daemon.json (daemon.josn 文件不存在则新建该文件)

 vi /etc/docker/daemon.json
1

添加下面的配置

{ "insecure-registries": ["harbor地址"] }
1

完整的配置如下

{
   #因为默认端口号是80 所以不需要加端口号
  "insecure-registries": ["192.168.64.153"],
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}
1
2
3
4
5

执行以下命令重启重新加载配置并生效

systemctl daemon-reload
service docker restart
1
2

image-20210324111734152

# 3.7.4 再次进行登录

docker login -u admin -p Harbor12345 192.168.64.153
1

这次我们就成功登录了

image-20210331151727178

到这里我们就已经登录成功了

# 3.7.5 修改镜像tag

我们推送镜像我要把我们的镜像名称改成符合规范的格式

docker tag \
192.168.64.153:5000/learn-docker-storage:0.0.3 \
192.168.64.153/library/learn-docker-storage:0.0.3
1
2
3

image-20210331152202104

这里有一个library路径,是harbor默认的项目名称

image-20210324152934888

# 3.7.6 推送镜像

可以通过docker push进行推送镜像,注意需要先登录在进行推送

docker push 192.168.64.153/library/learn-docker-storage:0.0.3
1

image-20210331152246897

到这里我们已经推送到了harbor,我们可以登录library页面查看

image-20210331152311185

# 3.8 harbor 测试

# 3.8.1 删除本地镜像

可以通过docker rmi 镜像ID删除本地镜像

docker rmi \
192.168.64.153:5000/learn-docker-storage:0.0.3 \
192.168.64.153/library/learn-docker-storage:0.0.3
1
2
3

image-20210331152425560

# 3.8.2 运行harbor 中的镜像

执行运行命令

docker run -d \
-v /tmp/data/logs:/logs \
-p 8003:8003 \
--name learn-docker-storage \
--network=learn-docker-network \
192.168.64.153/library/learn-docker-storage:0.0.3
1
2
3
4
5
6

image-20210331152525670

# 3.8.3 访问微服务测试

 curl http://192.168.245.165:8003/storage/employe/findByID/10001 | python -m json.tool
1

image-20210331141853362

# 3.8.4 查看harbor详情

详情里面会显示拉取次数

image-20210331152651961

# 3.9 HarBor用户权限说明

HarBor用户角色在项目(项目-成员-新加成员)中为3类:项目管理员、开发人员、访客

  • 项目管理员:增删改查
  • 开发人员:上传和下载
  • 访客:只允许下载

# 3.10 HarBor权限配置

# 3.10.1 新建用户

点击创建用户可以创建一个用户

image-20210331152752225

我们创建一个itcast的用户

image-20210331152913815

# 3.10.2 用户授权

创建用户后进入项目模块添加成员

image-20210331152957344

选择成员后并选择权限

image-20210331153028433

访客只能进行拉取不能推送和管理

image-20210331153104028

# 3.10.3 用户登录测试

我们用itcast用户通过web端登录测试下,我们发现用户是没有修改权限的

image-20210331153234254

# 3.10.4 docker登录测试

登录docker客户端

 docker login -u itcast -p Qwert123 192.168.64.153
1

尝试推送镜像

docker push 192.168.64.153/library/learn-docker-storage:0.0.3
1

image-20210331153359673

我们发现是无法进行推送镜像的

# 3.10.5 拉取镜像测试

先删除本地的容器以及镜像

 docker rm -f learn-docker-storage
 docker rmi 192.168.64.153/library/learn-docker-storage:0.0.3
1
2

image-20210331153609668

尝试拉取并启动本地镜像

docker run -d \
-v /tmp/data/logs:/logs \
-p 8003:8003 \
--name learn-docker-storage \
--network=learn-docker-network \
192.168.245.165/library/learn-docker-storage:0.0.3
1
2
3
4
5
6

image-20210331153645985

微服务访问测试

 curl http://192.168.64.153:8003/storage/employe/findByID/10001 | python -m json.tool
1

image-20210331141853362

# 4 Harbor支持Https(扩展)

为了支持微服务推送我们需要将HarBor设置为https,可以让HarBor在任何地方使用以及推送

前面说了怎么搭建harbor仓库,这里讲一讲harbor实现https访问,因为只需要内网访问,没必要去申请一个ssl证书,所以我就用openssl颁发自签名证书,实现https访问。

# 4.1 生成证书颁发机构证书

在生产环境中,您应该从CA获得证书,在测试或开发环境中,您可以生成自己的CA,要生成CA证书,请运行以下命令

# 4.1.1 创建证书目录

mkdir -p /tmp/data/cert && cd /tmp/data/cert && ll
1

image-20210325140825326

# 4.1.2 生成CA证书私钥

openssl genrsa -out ca.key 4096
1

# 4.1.3 生成CA证书

调整-subj选项中的值以反映您的组织,如果使用FQDN连接Harbor主机,则必须将其指定为通用名称(CN)属性

openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=itcast/OU=Personal/CN=itcast.harbor.com" \
 -key ca.key \
 -out ca.crt
1
2
3
4

这里subj是主题的意思含义如下

C=国家,S=省(市),L=区(县、市),O=组织机构,OU=组织单位,CN=通用名称
1

# 4.2 生成服务器证书

证书通常包含一个.crt文件和一个.key文件,例如yourdomain.com.crt和yourdomain.com.key

# 4.2.1 生成私钥

openssl genrsa -out itcast.harbor.com.key 4096
1

# 4.2.2 生成证书签名请求(CSR)

调整-subj选项中的值以反映您的组织。如果使用FQDN连接Harbor主机,则必须将其指定为通用名称(CN)属性,并在密钥和CSR文件名中使用它

openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=itcast/OU=Personal/CN=itcast.harbor.com" \
    -key itcast.harbor.com.key \
    -out itcast.harbor.com.csr
1
2
3
4

# 4.2.3 生成一个x509 v3扩展文件

无论您使用FQDN还是IP地址连接到Harbor主机,都必须创建此文件,以便可以为您的Harbor主机生成符合主题备用名称(SAN)和x509 v3的证书扩展要求,替换DNS条目以反映您的域。

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names


[alt_names]
DNS.1=itcast.harbor.com
DNS.2=itcast.harbor
DNS.3=harbor
EOF
1
2
3
4
5
6
7
8
9
10
11
12
13

# 4.2.4 生产主机证书

使用该v3.ext文件为您的Harbor主机生成证书,注意将yourdomain.comCRS和CRT文件名中的替换为Harbor主机名。

openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in itcast.harbor.com.csr \
    -out itcast.harbor.com.crt
1
2
3
4
5

# 4.3 配置harbor.yml

然后进入harbor安装目录修改harbor.yml,修改下面几个选项

  • hostname,使用IP或域名,不要用回环地址,localhost等
  • certificate,yourdomain.com.crt的路径/tmp/data/cert/itcast.harbor.com.crt
  • private_key,yourdomainr.com.key的路径/tmp/data/cert/itcast.harbor.com.key

image-20210325141657676

# 4.4 重新安装harbor服务

# 4.4.1 停止harbor

停止运行中的服务

 docker-compose down
1

运行目录harbor下的prepare完成https的配置

./prepare
1

image-20210325142029247

# 4.4.2 重新安装

在harbor目录下运行安装命令

./install.sh
1

image-20210325142309245

# 4.5 修改Docker推送配置

我们需要将推送的IP改成域名

vi /etc/docker/daemon.json
1

上文中我们对registry已经操作了,这里需要改用harbor,需要重新配置

#因为默认端口号是80 所以不需要加端口号
{ "insecure-registries": ["仓库IP或域名"] }
1
2

完整的配置如下

{
  "insecure-registries": ["itcast.harbor.com"],
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}


1
2
3
4
5
6

执行以下命令重启重新加载配置并生效

systemctl daemon-reload
service docker restart
1
2

# 4.6 修改本地host文件

为了让本机能够正常访问到harbor的web环境需要配置本地的hosts文件增加如下配置

192.168.64.153 itcast.harbor.com
1

windows环境下host路径在C:\Windows\System32\drivers\etc

# 4.7 域名访问harbor

通过域名访问harbor,域名就是我们刚才配置的itcastharbor.com域名访

image-20210325150215826

因为我们的证书是自签的,不是第三方认证的,素以有安全性提示,点击继续就可以访问

image-20210325150354123

到这里登录后就可以访问了

image-20210325150423787

上次更新: 2025/04/03, 11:07:08
基础使用-Docker部署微服务
集群管理-微服务Docker打包

← 基础使用-Docker部署微服务 集群管理-微服务Docker打包→

最近更新
01
tailwindcss
03-26
02
PaddleSpeech
02-18
03
whisper
02-18
更多文章>
Theme by Vdoing | Copyright © 2019-2025 跨境互联网 | 豫ICP备14016603号-5 | 豫公网安备41090002410995号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式