当前位置: 首页 > article >正文

第八部分-企业级实践——39. 私有镜像仓库

39. 私有镜像仓库1. 私有镜像仓库概述私有镜像仓库用于存储和管理企业内部 Docker 镜像提供镜像存储、分发、安全扫描、访问控制等功能。┌─────────────────────────────────────────────────────────────┐ │ 私有镜像仓库架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 镜像推送 │ │ │ │ 开发者 ──▶ 构建 ──▶ 推送 ──▶ Harbor/Registry │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 镜像分发 │ │ │ │ Harbor/Registry ──▶ 拉取 ──▶ 测试环境 │ │ │ │ │ │ │ │ │ ├──▶ 拉取 ──▶ 预发环境 │ │ │ │ │ │ │ │ │ └──▶ 拉取 ──▶ 生产环境 │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ 核心功能 │ │ - 镜像存储和版本管理 │ │ - 漏洞扫描 │ │ - 镜像签名 │ │ - 访问控制 │ │ - 跨地域复制 │ │ │ └─────────────────────────────────────────────────────────────┘2. Docker Registry2.1 部署 Registry# 简单部署dockerrun-d\--nameregistry\-p5000:5000\-v/data/registry:/var/lib/registry\registry:2# 带认证的 Registrydockerrun-d\--nameregistry\-p5000:5000\-v/data/registry:/var/lib/registry\-v/data/auth:/auth\-eREGISTRY_AUTHhtpasswd\-eREGISTRY_AUTH_HTPASSWD_REALMRegistry\-eREGISTRY_AUTH_HTPASSWD_PATH/auth/htpasswd\registry:2# 创建密码文件dockerrun--entrypointhtpasswd registry:2-Bbnadmin admin123/data/auth/htpasswd2.2 Registry 配置# config.ymlversion:0.1log:level:infostorage:filesystem:rootdirectory:/var/lib/registrydelete:enabled:truecache:blobdescriptor:inmemoryhttp:addr::5000headers:X-Content-Type-Options:[nosniff]tls:certificate:/certs/domain.crtkey:/certs/domain.keyauth:htpasswd:realm:Registrypath:/auth/htpasswd# 使用配置文件dockerrun-d\--nameregistry\-p5000:5000\-v$(pwd)/config.yml:/etc/docker/registry/config.yml\registry:23. Harbor3.1 Harbor 安装# 下载 Harborgitclone https://github.com/goharbor/harbor.gitcdharbor# 复制配置cpharbor.yml.tmpl harbor.yml# 编辑配置vimharbor.yml# harbor.yml 示例hostname: harbor.example.com https: port:443certificate: /data/cert/server.crt private_key: /data/cert/server.key# 安装./install.sh --with-notary --with-trivy --with-chartmuseum3.2 Harbor 配置# harbor.yml 完整配置hostname:harbor.example.com# HTTP 配置http:port:80# HTTPS 配置https:port:443certificate:/data/cert/server.crtprivate_key:/data/cert/server.key# 外部 URLexternal_url:https://harbor.example.com# 数据存储data_volume:/data/harbor# 日志trl_log:location:/data/logsrotate_count:50rotate_size:200M# 数据库database:password:root123max_idle_conns:100max_open_conns:900# Redisredis:url:redis:6379password:# 认证模式auth_mode:db_auth# 自注册self_registration:false# 令牌过期时间token_expiration:30# 项目创建限制project_creation_restriction:adminonly# 漏洞扫描clair:updaters_interval:12# 镜像签名notary:enabled:true4. 镜像管理4.1 基础操作# 登录 Harbordockerlogin harbor.example.com# 打标签dockertag myapp:latest harbor.example.com/project/myapp:v1.0dockertag myapp:latest harbor.example.com/project/myapp:latest# 推送镜像dockerpush harbor.example.com/project/myapp:v1.0dockerpush harbor.example.com/project/myapp:latest# 拉取镜像dockerpull harbor.example.com/project/myapp:v1.0# 删除本地镜像dockerrmi harbor.example.com/project/myapp:v1.04.2 镜像复制# 复制规则配置apiVersion:replication/v1kind:Replicationmetadata:name:replica-rulespec:src_registry:url:https://harbor-primary.example.cominsecure:falsedest_registry:url:https://harbor-secondary.example.cominsecure:falsefilters:-type:namevalue:project/.*-type:tagvalue:v*trigger:type:event_basedsettings:cron:0 */6 * * *deletion:falseoverride:true4.3 镜像清理# 设置保留策略# Harbor UI → Projects → Project → Policies# CLI 清理dockerrun--rm-it\-v/var/run/docker.sock:/var/run/docker.sock\-eHARBOR_HOSTharbor.example.com\-eHARBOR_USERadmin\-eHARBOR_PASSWORDadmin123\harbor-cleanup/cleanup# 删除未使用的镜像# 设置自动清理任务# 保留最近 N 个标签# 保留最近 N 天的镜像5. 安全配置5.1 漏洞扫描# Trivy 扫描Harbor 集成trivy image harbor.example.com/project/myapp:v1.0# 设置扫描策略# Harbor UI → Interrogation Services → Scan All# 阻止漏洞镜像部署# Harbor UI → Project → Policies → Prevent vulnerable images5.2 镜像签名# 启用 NotaryexportDOCKER_CONTENT_TRUST1# 推送签名镜像dockerpush harbor.example.com/project/myapp:v1.0# 拉取验证签名dockerpull harbor.example.com/project/myapp:v1.0# 查看签名信息notary-shttps://notary.harbor.example.com\list harbor.example.com/project/myapp5.3 RBAC 权限# 用户角色# - Project Admin: 完全控制# - Developer: 推送拉取# - Guest: 只读# - Master: 镜像复制权限# 创建机器人账户# Harbor UI → Project → Robot Accounts# 机器人账户配置robot:name:robot-cidescription:CI/CD systemexpires_at:2025-12-31permissions:-access:-resource:repositoryaction:pushnamespace:project-name6. CI/CD 集成6.1 GitLab CI 集成# .gitlab-ci.ymlvariables:HARBOR_REGISTRY:harbor.example.comHARBOR_PROJECT:myprojectbuild:stage:buildscript:-docker login-u $HARBOR_USER-p $HARBOR_PASSWORD $HARBOR_REGISTRY-docker build-t $HARBOR_REGISTRY/$HARBOR_PROJECT/myapp:$CI_COMMIT_SHA .-docker push $HARBOR_REGISTRY/$HARBOR_PROJECT/myapp:$CI_COMMIT_SHA6.2 GitHub Actions 集成-name:Login to Harboruses:docker/login-actionv2with:registry:harbor.example.comusername:${{secrets.HARBOR_USER}}password:${{secrets.HARBOR_PASSWORD}}-name:Build and pushrun:|docker build -t harbor.example.com/myapp:latest . docker push harbor.example.com/myapp:latest7. 高可用部署7.1 Harbor HA 架构# docker-compose.ha.ymlversion:3.8services:harbor-core:image:goharbor/harbor-core:latestreplicas:3networks:-harborharbor-portal:image:goharbor/harbor-portal:latestreplicas:2redis:image:redis:6-alpinecommand:redis-server--appendonly yesnetworks:-harbordatabase:image:postgres:13environment:POSTGRES_PASSWORD:root123volumes:-pg-data:/var/lib/postgresql/datanetworks:harbor:driver:overlayvolumes:pg-data:7.2 负载均衡配置# nginx.conf upstream harbor { server harbor-node1:8080 weight1 max_fails3 fail_timeout30s; server harbor-node2:8080 weight1 max_fails3 fail_timeout30s; server harbor-node3:8080 weight1 max_fails3 fail_timeout30s; } server { listen 443 ssl; server_name harbor.example.com; ssl_certificate /etc/nginx/ssl/harbor.crt; ssl_certificate_key /etc/nginx/ssl/harbor.key; location / { proxy_pass http://harbor; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }8. 监控与告警8.1 Prometheus 监控# prometheus.ymlscrape_configs:-job_name:harborstatic_configs:-targets:[harbor-exporter:8080]metrics_path:/metrics8.2 关键指标指标说明告警阈值harbor_project_count项目数量-harbor_repository_count仓库数量-harbor_push_count推送次数-harbor_pull_count拉取次数-storage_used_bytes存储使用 80%registry_latency延迟 5s9. 成本优化9.1 存储优化# 启用压缩# Harbor UI → Configuration → System Settings# 启用可重复使用层# 清理未使用 Blobdockerrun--rm-it\-v/data/harbor:/data\goharbor/garbage-collector\-d1h9.2 过期清理# 设置清理策略# 保留最近 30 天的镜像# 保留最近 10 个版本# 手动清理dockerexecharbor-database psql-Upostgres-dregistry-c DELETE FROM blob WHERE id NOT IN ( SELECT DISTINCT blob_id FROM artifact_blob ); 10. 常用命令速查操作命令登录docker login harbor.example.com标签docker tag myapp harbor.example.com/project/myapp:v1推送docker push harbor.example.com/project/myapp:v1拉取docker pull harbor.example.com/project/myapp:v1删除本地docker rmi harbor.example.com/project/myapp:v1扫描trivy image harbor.example.com/project/myapp:v1启动 Registrydocker run -d -p 5000:5000 registry:2启动 Harbordocker-compose up -d11. 常见问题Q1: 镜像推送失败怎么办检查登录状态、权限、磁盘空间。Q2: Harbor 忘记密码如何重置dockerexec-itharbor-database psql-Upostgres-dregistry UPDATE harbor_user SET password新密码hashWHERE usernameadmin;Q3: 如何迁移 Harbor 数据备份 /data 目录在新服务器挂载相同路径。12. 小结Registry轻量级私有仓库Harbor企业级功能全面镜像管理版本、复制、清理安全漏洞扫描、签名、RBACCI/CD 集成自动化推送高可用多副本 负载均衡监控Prometheus Grafana成本优化压缩、清理、保留策略

相关文章:

第八部分-企业级实践——39. 私有镜像仓库

39. 私有镜像仓库 1. 私有镜像仓库概述 私有镜像仓库用于存储和管理企业内部 Docker 镜像,提供镜像存储、分发、安全扫描、访问控制等功能。 ┌────────────────────────────────────────────────────────…...

VMware Unlocker 3.0:5分钟快速配置macOS虚拟机终极指南

VMware Unlocker 3.0:5分钟快速配置macOS虚拟机终极指南 【免费下载链接】unlocker VMware Workstation macOS 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker VMware Unlocker 3.0是一款专为破解VMware限制而设计的开源工具,让您能在…...

第八部分-企业级实践——38. 容器化改造

38. 容器化改造 1. 容器化改造概述 容器化改造是将传统应用迁移到容器环境的过程,涉及应用架构调整、Dockerfile 编写、配置管理、数据持久化等多个方面。 ┌──────────────────────────────────────────────────…...

阴阳师百鬼夜行自动化脚本终极指南:3种智能模式解放你的双手

阴阳师百鬼夜行自动化脚本终极指南:3种智能模式解放你的双手 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 你是否曾在深夜为刷百鬼夜行而手指酸痛?是否…...

量子误差缓解技术与BBGKY层次结构的应用

1. 量子误差缓解的现状与挑战在当前的NISQ(噪声中等规模量子)时代,量子计算机的实际应用面临着一个根本性障碍:量子噪声。与经典计算机不同,量子比特极易受到环境干扰,导致计算错误。这种噪声主要来源于量子…...

Poppins字体:如何用一款免费字体搞定多语言设计难题?

Poppins字体:如何用一款免费字体搞定多语言设计难题? 【免费下载链接】Poppins Poppins, a Devanagari Latin family for Google Fonts. 项目地址: https://gitcode.com/gh_mirrors/po/Poppins 还在为多语言项目寻找合适的字体而烦恼吗&#xff…...

像素即坐标,跨镜即连续:镜像视界空间级全域跟踪引擎技术解析方案

像素即坐标,跨镜即连续:镜像视界空间级全域跟踪引擎技术解析方案 一、方案前言 在全域视频感知、智慧城市、智慧园区、安防管控、跨境物流等场景中,传统跨摄像机(跨镜)跟踪技术长期面临目标ID断裂、轨迹碎片化、外观特…...

2025年英雄联盟国服内存级换肤技术深度解析:R3nzSkin架构设计与实现

2025年英雄联盟国服内存级换肤技术深度解析:R3nzSkin架构设计与实现 【免费下载链接】R3nzSkin-For-China-Server Skin changer for League of Legends (LOL) 项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server 你是否曾想过&#xff…...

让你的自定义结构体也能被qDebug优雅打印:Qt运算符重载的妙用与避坑指南

让自定义结构体与qDebug完美融合:Qt运算符重载实战解析 在Qt开发中,调试信息输出是日常开发不可或缺的环节。当项目规模扩大,自定义数据结构变得复杂时,如何优雅地输出这些结构体的调试信息就成了开发者面临的现实挑战。本文将深入…...

Task Slack集成:团队协作的任务管理终极指南

Task Slack集成:团队协作的任务管理终极指南 【免费下载链接】task A fast, cross-platform build tool inspired by Make, designed for modern workflows. 项目地址: https://gitcode.com/gh_mirrors/ta/task Task 是一款受 Make 启发的快速跨平台构建工具…...

STM32H7网络通信避坑指南:CubeMX配置LWIP 2.1.2时,这几个DCache和ETH的坑你别踩

STM32H7网络通信深度优化:LWIP 2.1.2配置与Cache一致性实战解析 当你在CubeMX中勾选了ETH和LWIP组件,生成代码后却发现设备无法稳定响应ping请求,或者传输大文件时出现数据错乱——这很可能与STM32H7独特的Cache架构有关。本文将带你深入理解…...

Laravel-Permission性能基准测试:与其他权限包的终极对比分析

Laravel-Permission性能基准测试:与其他权限包的终极对比分析 【免费下载链接】laravel-permission Associate users with roles and permissions 项目地址: https://gitcode.com/gh_mirrors/la/laravel-permission 在构建现代Web应用时,权限管理…...

Android Studio报错救星:一招永久优化Gradle下载,告别‘Could not install’

Android Studio开发环境深度优化:根治Gradle下载问题的系统方案 每次新建Android项目时,看着进度条卡在"Downloading Gradle"动弹不得,你是否也经历过这种绝望?Gradle下载失败堪称Android开发者入门的第一道坎&#xff…...

用Arduino UNO和L298N驱动板,手把手教你让麦轮小车原地画个‘8’字(附完整代码)

用Arduino UNO和L298N驱动板实现麦轮小车8字轨迹编程实战 想让你的麦克纳姆轮小车跳出机械舞步吗?一个完美的"8"字轨迹不仅能展示麦轮的全向移动特性,更是检验运动控制算法的绝佳试金石。作为已经完成基础搭建的Arduino玩家,这个项…...

Sonic搜索集群终极指南:从单机到高可用的完整部署方案

Sonic搜索集群终极指南:从单机到高可用的完整部署方案 【免费下载链接】sonic 🦔 Fast, lightweight & schema-less search backend. An alternative to Elasticsearch that runs on a few MBs of RAM. 项目地址: https://gitcode.com/gh_mirrors/…...

Vivado里FIFO IP核的Standard和FWFT模式到底怎么选?一个波形对比就懂了

Vivado中FIFO IP核模式选择:Standard与FWFT的深度解析与实战指南 在FPGA开发中,数据缓冲是几乎所有高速数据处理系统不可或缺的一环。作为Xilinx工具链中的核心IP之一,FIFO Generator提供了灵活的数据缓冲解决方案。但当面对Standard FIFO和F…...

Android数据存储终极指南:SharedPreferences与ContentProviders完全解析

Android数据存储终极指南:SharedPreferences与ContentProviders完全解析 【免费下载链接】android-best-practices Dos and Donts for Android development, by Futurice developers 项目地址: https://gitcode.com/gh_mirrors/an/android-best-practices 在…...

终极天气API开发指南:从数据获取到可视化展示的完整流程

终极天气API开发指南:从数据获取到可视化展示的完整流程 【免费下载链接】Awesome_APIs :octocat: A collection of APIs 项目地址: https://gitcode.com/gh_mirrors/aw/Awesome_APIs 天气API是现代应用开发中不可或缺的组件,能够为用户提供实时天…...

如何在PC上快速配置yuzu模拟器:完整游戏体验指南

如何在PC上快速配置yuzu模拟器:完整游戏体验指南 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu 想在电脑上畅玩任天堂Switch游戏吗?yuzu模拟器是你的最佳选择!作为目前最成熟的…...

如何在5分钟内配置鸣潮自动化助手,实现多账号高效管理?

如何在5分钟内配置鸣潮自动化助手,实现多账号高效管理? 【免费下载链接】better-wuthering-waves 🌊更好的鸣潮 - 后台自动剧情 项目地址: https://gitcode.com/gh_mirrors/be/better-wuthering-waves 厌倦了《鸣潮》中重复的剧情对话…...

终极KMS激活指南:如何永久免费激活Windows和Office系统

终极KMS激活指南:如何永久免费激活Windows和Office系统 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows激活弹窗而烦恼吗?是否遇到过Office突然变成只读模式…...

WebRTC、SIP通话背后的隐形功臣:手把手调试G711A/G711U的PCM音频数据

WebRTC与SIP通话背后的音频基石:G711编解码实战解析 实时音视频通信已经成为现代互联网的基础设施,从在线会议到客服电话,背后都离不开高效的音频编解码技术。在众多音频编码标准中,G711系列以其简单可靠的特性,依然活…...

基于python-telegram-bot的审批按钮系统设计与实现

1. 项目概述:一个为Telegram机器人设计的审批按钮系统如果你在团队协作、内容审核或者自动化流程中,经常需要通过Telegram机器人来处理“同意”或“拒绝”这类审批请求,那么你很可能遇到过这样的困扰:用户发来一条需要审核的消息&…...

ARM Fast Models MTI插件开发与性能优化实战

1. Fast Models中的Model Trace Interface架构解析在嵌入式系统仿真领域,ARM Fast Models提供的Model Trace Interface(MTI)是一套高效的仿真数据采集框架。作为一位长期从事嵌入式调试工具开发的工程师,我发现MTI的独特设计使其成…...

定制软件开发公司实施方

定制软件开发,为何80%的企业选错实施方?这3个坑你踩过吗?“我们项目预算超了50%,还没上线……”“系统动不动就卡死,用户天天投诉,售后根本找不到人!”“当时说好的功能,现在告诉我实…...

使用Taotoken后模型API调用的延迟与稳定性实际体验观察

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken后模型API调用的延迟与稳定性实际体验观察 作为一名日常需要调用多种大模型API的开发者,将多个供应商的接…...

从手机5G到智能声呐:LMS自适应波束形成算法在真实场景里是怎么用的?

从手机5G到智能声呐:LMS自适应波束形成算法的工程实践 当你在嘈杂的会议室里对着智能音箱说话时,它为何能精准捕捉你的声音而忽略背景噪音?当5G基站需要同时服务数百个移动设备时,又是如何避免信号相互干扰?这些看似毫…...

芯片人才危机破局:D.E.I.B.战略如何驱动创新与商业成功

1. 芯片行业人才危机的深度剖析与D.E.I.B.的战略价值 最近和几位在芯片设计公司和晶圆厂负责招聘的老友聊天,大家不约而同地提到了同一个词:“焦头烂额”。不是项目进度卡脖子,而是人根本招不到。一位在模拟芯片公司做HR总监的朋友告诉我&…...

AI开发者实战指南:从工具全景到本地知识库搭建

1. 从Awesome List到实战地图:一份AI开发者工具全景解析如果你是一名AI开发者、研究者,或者只是对构建AI应用充满好奇的技术爱好者,面对浩如烟海的工具、框架和平台,最头疼的恐怕就是“我该从哪里开始?”这个问题。网上…...

几何字体革命:如何用Poppins解决多语言设计的世界性难题?

几何字体革命:如何用Poppins解决多语言设计的世界性难题? 【免费下载链接】Poppins Poppins, a Devanagari Latin family for Google Fonts. 项目地址: https://gitcode.com/gh_mirrors/po/Poppins 还在为跨语言设计项目寻找完美的字体方案而苦恼…...