Docker镜像安全管理最佳实践(Harbor深度配置指南)

第一章:Docker镜像仓库搭建(Harbor)

Harbor 是一个开源的企业级 Docker 镜像仓库,提供权限管理、镜像签名、安全扫描和图形化界面等高级功能。它由 VMware 开发并维护,适用于生产环境中对容器镜像进行集中管理和分发。

环境准备与安装依赖

在部署 Harbor 之前,需确保服务器已安装 Docker 和 Docker Compose。推荐使用 Linux 操作系统(如 Ubuntu 20.04 或 CentOS 7+),并配置好网络和防火墙规则。
  1. 安装 Docker:
    # 安装最新版 Docker
    curl -fsSL https://get.docker.com | sh
  2. 安装 Docker Compose:
    # 下载 docker-compose 二进制文件
    sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    sudo chmod +x /usr/local/bin/docker-compose

Harbor 安装配置流程

从 GitHub 获取 Harbor 的离线安装包,并解压至目标目录:
# 下载并解压 Harbor 离线包
wget https://github.com/goharbor/harbor/releases/download/v2.8.0/harbor-offline-installer-v2.8.0.tgz
tar -xzf harbor-offline-installer-v2.8.0.tgz
cd harbor
复制配置模板并修改关键参数:
# 复制配置文件
cp harbor.yml.tmpl harbor.yml

# 编辑 harbor.yml,设置主机名、HTTPS(可选)、管理员密码等
hostname: registry.example.com
harbor_admin_password: Admin@123
执行安装脚本启动服务:
sudo ./install.sh

功能特性对比表

特性HarborDocker Registry
图形化界面支持不支持
用户权限控制基于角色的访问控制(RBAC)需额外集成
镜像漏洞扫描集成 Clair 扫描器无原生支持
安装完成后,可通过浏览器访问 `http://registry.example.com` 登录 Web 界面,默认管理员账户为 `admin`,密码在配置文件中指定。推送镜像前需先登录:
docker login registry.example.com

第二章:Harbor架构解析与核心组件配置

2.1 Harbor整体架构与安全设计原理

Harbor 采用微服务架构,由多个松耦合组件协同工作,核心模块包括 Registry、UI、Notary、Trivy、Job Service 和 Database。各组件通过 HTTPS 和消息队列安全通信,确保镜像存储与分发的完整性。
核心组件职责
  • Registry:负责镜像的存储与拉取,基于 Docker Distribution 实现
  • Notary:提供镜像签名与验证,支持内容可信(Content Trust)
  • Trivy:集成漏洞扫描,自动检测镜像中的 CVE 漏洞
安全通信配置示例
# harbor.yml 配置 TLS 加密
proxy:
  http_proxy: http://proxy.example.com:3128
  https_proxy: https://proxy.example.com:3129
  trusted_ca_file: /path/to/ca.pem
上述配置确保 Harbor 组件在代理环境中仍能通过受信 CA 进行安全通信,防止中间人攻击。
权限控制模型
Harbor 基于角色的访问控制(RBAC)支持项目级权限管理,结合 LDAP/AD 认证,实现细粒度的安全策略。

2.2 安装部署Harbor企业级镜像仓库

环境准备与依赖安装
在部署 Harbor 前,需确保主机已安装 Docker 和 Docker Compose。建议使用 CentOS 7 或 Ubuntu 20.04 以上系统版本,并关闭 SELinux 或配置相应策略。
  • Docker 版本 ≥ 19.03
  • Docker Compose 版本 ≥ v2.0
  • 开放端口:80(HTTP)、443(HTTPS)、4443(Notary)
Harbor 配置文件修改
下载 Harbor 离线安装包后,解压并编辑 harbor.yml 文件,主要配置如下:
hostname: harbor.example.com
http:
  port: 80
https:
  port: 443
  certificate: /path/to/cert.pem
  private_key: /path/to/key.pem
harbor_admin_password: Admin@123
data_volume: /data
上述配置中,hostname 必须为可解析的域名;启用了 HTTPS 时需提供证书路径;data_volume 指定持久化存储目录,避免容器重启导致数据丢失。
启动 Harbor 服务
执行安装脚本生成配置并启动容器:
./install.sh --with-notary --with-trivy
该命令启用内容信任(Notary)和漏洞扫描(Trivy)功能,增强镜像安全治理能力。服务启动后,可通过浏览器访问 https://harbor.example.com 进行登录管理。

2.3 配置HTTPS加密通信保障传输安全

为确保客户端与服务器之间的数据传输安全,配置HTTPS是关键步骤。HTTPS基于SSL/TLS协议对通信内容进行加密,有效防止窃听、篡改和中间人攻击。
证书申请与部署流程
通常使用Let's Encrypt等CA机构签发免费SSL证书,部署时需将证书文件与私钥配置到Web服务器中。

server {
    listen 443 ssl;
    server_name example.com;

    ssl_certificate /etc/ssl/certs/example.crt;
    ssl_certificate_key /etc/ssl/private/example.key;

    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512;
}
上述Nginx配置启用了TLS 1.2及以上版本,并采用ECDHE密钥交换算法实现前向安全性。参数`ssl_certificate`指定公钥证书路径,`ssl_certificate_key`指向私钥文件,二者必须匹配且权限受限。
安全策略优化建议
  • 禁用不安全的SSLv3及以下协议
  • 优先选择支持前向安全的加密套件
  • 定期轮换私钥并监控证书有效期

2.4 管理存储后端与高可用性设置

存储后端配置策略
在分布式系统中,选择合适的存储后端是保障数据持久化和性能的关键。常用后端包括本地磁盘、NFS、Ceph 和 S3 兼容对象存储。
  • 本地存储:适用于单节点部署,性能高但缺乏冗余
  • Ceph RBD:支持多副本,具备动态扩展能力
  • S3 存储:适合跨区域备份,需注意网络延迟影响
高可用架构实现
为避免单点故障,应配置多实例共享存储并结合仲裁机制。例如,在 Kubernetes 中使用 StatefulSet 配合持久卷(PV)实现 Pod 故障迁移时的数据一致性。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-storage
spec:
  accessModes:
    - ReadWriteMany
  resources:
    requests:
      storage: 100Gi
上述声明请求支持多节点读写的持久化存储,确保多个副本可同时访问同一数据源。ReadWriteMany 模式对 NFS 或 CephFS 等后端尤为重要,是实现高可用的基础前提。

2.5 权限模型与用户身份认证集成

在现代系统架构中,权限模型与身份认证的集成是保障安全访问的核心环节。通过将RBAC(基于角色的访问控制)与OAuth 2.0结合,系统可在认证用户身份后动态分配权限。
核心组件交互流程
用户 → 认证服务(JWT签发) → 网关校验Token → 权限服务查询角色 → 接口访问控制
典型权限映射表
角色可访问资源操作权限
admin/api/v1/usersCRUD
user/api/v1/profileREAD, UPDATE
JWT扩展权限示例
{
  "sub": "123456",
  "role": "editor",
  "permissions": ["post:read", "post:write"],
  "exp": 1735689600
}
该JWT在标准声明基础上扩展了role和permissions字段,使网关或资源服务器可直接解析并执行细粒度授权决策,减少对后端服务的权限查询压力。

第三章:镜像安全管理机制深度配置

3.1 镜像扫描策略与漏洞检测实践

镜像安全扫描的核心流程
容器镜像在构建完成后需立即进行安全扫描,以识别其中包含的已知漏洞。典型流程包括镜像拉取、层解析、软件包识别、漏洞匹配和报告生成。
  • 选择支持多架构的扫描工具,如Trivy或Clair
  • 集成至CI/CD流水线,实现自动化检测
  • 设定严重级别阈值,阻断高危镜像部署
使用Trivy进行漏洞扫描示例

# 扫描本地镜像并输出详细结果
trivy image --severity HIGH,CRITICAL myapp:latest
该命令对名为myapp:latest的镜像执行扫描,仅报告高危和严重级别的漏洞。参数--severity用于过滤风险等级,提升修复优先级判断效率。
扫描策略配置建议
策略项推荐配置
扫描频率每次构建后触发
漏洞源更新每日同步NVD数据库
忽略机制基于CVE编号的白名单管理

3.2 内容信任启用与签名验证机制

在分布式系统中,确保内容来源的可信性是安全架构的核心环节。启用内容信任需依赖数字签名机制,对传输数据进行完整性与身份验证。
签名验证流程
系统在接收端对内容执行签名验证,确认其由可信源签发且未被篡改。典型流程包括:获取公钥、验证签名、校验哈希值。
代码实现示例

// VerifySignature 验证数据与签名的匹配性
func VerifySignature(data, signature []byte, pubKey *ecdsa.PublicKey) bool {
	hash := sha256.Sum256(data)
	return ecdsa.VerifyASN1(pubKey, hash[:], signature)
}
该函数使用 ECDSA 算法对数据进行 SHA-256 哈希后,调用 ecdsa.VerifyASN1 校验签名有效性。data 为原始内容,signature 是签发方生成的签名,pubKey 为对应的公钥。
信任策略配置
  • 启用内容信任需在配置中开启 strict-verification 模式
  • 公钥证书应通过可信 CA 签发并定期轮换
  • 所有镜像或包必须附带有效签名方可加载

3.3 镜像不可变策略与生命周期管控

镜像不可变性是保障容器环境一致性和安全性的核心原则。一旦镜像构建完成,其内容不应被修改,任何变更都应通过重新构建新版本镜像实现。
不可变性的实施方式
通过CI/CD流水线强制校验镜像哈希值,确保运行时镜像未被篡改。使用签名机制(如Cosign)验证镜像来源可信。
apiVersion: v1
kind: Pod
spec:
  containers:
  - name: app
    image: registry/app:v1.2.3@sha256:abc123  # 固定digest,防止意外替换
上述配置通过指定镜像digest而非标签,确保部署的镜像是完全确定的版本,避免标签漂移问题。
生命周期管理策略
  • 自动清理过期镜像,释放存储空间
  • 按标签策略归档历史版本(如dev、staging、prod)
  • 设置镜像保留规则,例如仅保留最近10个版本

第四章:企业级安全合规与运维实践

4.1 基于角色的访问控制(RBAC)实施

在现代系统安全架构中,基于角色的访问控制(RBAC)通过将权限分配给角色而非用户个体,显著提升了管理效率与安全性。
核心组件模型
RBAC 包含三个基本要素:用户、角色和权限。用户通过被赋予角色获得相应权限,角色则绑定具体操作许可。
  • 用户(User):系统使用者标识
  • 角色(Role):权限的集合
  • 权限(Permission):对资源的操作权(如读、写、删除)
策略配置示例
{
  "role": "admin",
  "permissions": ["user:read", "user:write", "config:delete"]
}
上述 JSON 定义了名为 admin 的角色,具备用户管理与配置删除权限。系统在鉴权时检查当前用户所属角色是否包含请求操作所需的 permission 字符串。
权限验证逻辑
每次 API 请求触发时,中间件提取用户角色,加载对应权限列表,并比对请求路径与动作是否在允许范围内,实现细粒度访问控制。

4.2 审计日志分析与安全事件追踪

日志结构化与采集
现代系统产生的审计日志通常包含时间戳、用户标识、操作类型和目标资源等关键字段。为实现高效分析,需将原始日志统一转换为结构化格式,如JSON。
{
  "timestamp": "2023-10-05T08:23:12Z",
  "user": "admin",
  "action": "DELETE",
  "resource": "/api/v1/users/1001",
  "ip": "192.168.1.100",
  "status": "success"
}
该日志样本记录了一次敏感资源删除操作,可用于后续行为审计。字段ip和user有助于溯源,而status用于判断操作是否成功。
安全事件关联分析
通过规则引擎匹配异常模式,可识别潜在攻击行为。常见策略包括:
  • 短时间内多次登录失败
  • 高权限操作来自非常用IP
  • 非工作时间的数据导出行为
结合时间窗口与行为频率建立基线模型,能有效提升检测准确率。

4.3 多租户隔离与项目级安全策略

在云原生平台中,多租户隔离是保障数据安全的核心机制。通过命名空间(Namespace)实现资源的逻辑隔离,结合RBAC策略控制访问权限。
基于角色的访问控制配置
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: tenant-a
  name: developer-role
rules:
- apiGroups: [""]
  resources: ["pods", "services"]
  verbs: ["get", "list", "create", "delete"]
该配置为租户A定义开发者角色,仅允许操作Pod和服务资源。verbs字段限定具体操作权限,实现最小权限原则。
安全策略对比表
策略类型隔离级别适用场景
命名空间隔离逻辑隔离同一集群内多团队协作
网络策略通信隔离限制跨租户服务调用

4.4 与CI/CD流水线的安全集成方案

在现代DevOps实践中,将安全机制无缝嵌入CI/CD流水线是保障软件交付安全的关键环节。通过“安全左移”策略,可在开发早期识别漏洞,降低修复成本。
静态代码分析集成
使用SAST工具在构建阶段自动扫描源码,识别潜在安全缺陷。例如,在GitHub Actions中配置Checkmarx扫描任务:

- name: Run SAST Scan
  uses: checkmarx/cx-action@v1
  with:
    cx-project-name: "my-app"
    severity-threshold: "HIGH"
该配置会在每次推送代码时触发扫描,若发现高危漏洞则阻断流水线执行,确保问题代码无法进入生产环境。
依赖组件安全检测
通过SBOM(软件物料清单)生成与分析,监控第三方库风险。可采用Syft和Grype组合检测依赖项中的已知漏洞:

syft my-app:latest -o json > sbom.json
grype sbom:sbom.json --fail-on high
此命令链先生成镜像的SBOM,再对其中组件进行漏洞匹配,达到指定风险等级时中断流程,实现自动化依赖治理。

第五章:总结与展望

性能优化的持续演进
现代Web应用对加载速度的要求日益严苛。以某电商平台为例,通过引入懒加载与资源预加载策略,首屏渲染时间从2.8秒降至1.3秒。关键代码如下:

// 预加载关键资源
const preloadLink = document.createElement('link');
preloadLink.rel = 'preload';
preloadLink.as = 'script';
preloadLink.href = '/static/main.chunk.js';
document.head.appendChild(preloadLink);

// 图像懒加载实现
const imageObserver = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const img = entry.target;
      img.src = img.dataset.src;
      imageObserver.unobserve(img);
    }
  });
});
document.querySelectorAll('img[data-src]').forEach(img => imageObserver.observe(img));
技术选型的决策依据
在微前端架构落地过程中,团队面临框架兼容性挑战。通过建立统一的通信机制与生命周期规范,成功整合React与Vue子应用。以下是核心依赖版本对比表:
组件方案A(Webpack Module Federation)方案B(独立部署+iframe)
加载延迟120ms300ms
状态共享支持受限
调试复杂度中等低
未来架构趋势观察
边缘计算与Serverless结合正重塑后端部署模式。某内容分发网络(CDN)平台已将90%的动态请求处理迁移至边缘函数,降低中心服务器负载达65%。典型部署流程包括:
  • 将身份验证逻辑封装为边缘函数
  • 利用地理路由将请求导向最近节点
  • 在边缘层完成A/B测试分流
  • 集中式日志聚合与异常追踪

相关推荐

Docker Scout:容器镜像安全扫描与SBOM生成实战指南

容器镜像安全是云原生软件供应链治理的核心环节,其本质在于精准识别镜像中所含组件及其已知漏洞。Docker Scout 通过解析包管理器元数据(而非文件扫描)实现快速、准确的 CVE 关联,并结合上下文感知与可利用性过滤,将原始漏洞数据转化为可操作的修复建议。它原生集成于 Docker CLI,支持本地构建后即时扫描、远程镜像预检及 SPDX/CycloneDX 格式 SBOM 自动生成,直接满足等保三级、ISO27001 等合规要求。作为面向开发者和 DevOps 的‘构建时安全显微镜’,Scout 不替代

weixin_33802505的博客 390

Linux—Harbor 镜像仓库部署实战

Harbor 是一个开源的企业级容器镜像仓库,旨在提供镜像管理和分发的功能。它扩展了 Docker Registry,添加了企业级功能,如用户管理、权限控制、镜像扫描和镜像复制等。Harbor 可以用于存储和管理 Docker 镜像,支持多种认证机制,帮助企业在大规模的容器环境中实现安全、高效的镜像管理。

各位大佬有任何问题欢迎在相应文章下一起讨论,博主会第一时间帮助大家处理相应问题~ 1105

告别命令行!用Docker Desktop和IDEA插件搞定Java项目容器化(附私有仓库配置)

本文介绍了如何利用Docker Desktop和IDEA插件简化Java项目容器化流程,告别繁琐的命令行操作。通过图形化界面实现一键构建、热部署和私有仓库配置,显著提升开发效率。特别适合需要快速上手容器化技术的Java开发者。

weixin_26899659的博客 334

Docker数据管理、容器互联与私有仓库完全指南

创建自定义网络 docker network create \ --driver bridge \ --subnet 172.20 .0.0/16 \ --gateway 172.20 .0.1 \ my-network # 查看网络详情 docker network inspect my-network # 创建多个隔离的网络 docker network create frontend。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 9313

Harbor机器人账户权限管理详解:如何安全配置项目级访问控制

本文详细解析了Harbor机器人账户的权限管理机制,重点阐述如何安全配置项目级访问控制。通过深入剖析机器人账户的核心特性、权限模型及适用场景,并结合实战案例,指导管理员遵循最小权限原则,为CI/CD流水线等自动化任务创建安全的项目级机器人账户,实现精细化的权限隔离与安全管理。

weixin_28829479的博客 196

GitLab Container Registry和 Harbor私有仓库对比

轻量+集成需求企业级功能+复杂安全管理→ Harbor可根据团队现有技术栈和扩展性需求选择,两者也可并存使用(如用Harbor统一管理镜像,GitLab专注于CI/CD)。

极客栈 427

Ubuntu 22.04配置containerd连接Harbor私有仓库指南

容器运行时containerd作为Kubernetes生态的核心组件,其与镜像仓库Harbor的安全集成是企业级容器化部署的关键技术点。本文从容器运行时与镜像仓库的基础交互原理出发,详解在Ubuntu 22.04 LTS系统中配置containerd连接内网Harbor仓库的完整方案,包含自签名证书处理、认证信息安全管理等企业级实践。针对容器镜像拉取、网络策略配置等典型场景,提供了包含性能调优参数和故障排查方法的技术实施方案,适用于需要保障软件供应链安全的DevOps环境。

weixin_30315905的博客 377

构建企业级私有docker镜像的仓库(Harbor)

摘要:Harbor是一款企业级Docker私有镜像仓库解决方案,提供Web界面、权限管理和安全审计功能。支持Helm chart仓库、Notary证书认证和Clair漏洞扫描。安装步骤包括:1)下载docker-compose工具;2)创建Harbor目录并下载安装包;3)修改配置文件后启动服务。国内用户可通过GitCode获取安装包。启动后通过docker-compose管理服务,访问指定IP即可登录使用。

weixin_64378412的博客 981

保姆级教程:在Rocky Linux 9上从零搭建Jenkins,并配置Docker推送镜像到私有Harbor仓库

本文提供在Rocky Linux 9上从零搭建Jenkins并配置Docker推送镜像到私有Harbor仓库的保姆级教程。涵盖系统优化、Jenkins部署、Docker集成、Harbor配置及CI/CD流水线实战,帮助开发者快速构建完整的自动化构建与部署环境。

weixin_29233333的博客 287

招财牛猫|股社区|猫笔刀公众号历史文章13-21年(含评论),投资内容 收藏学习

招财大牛猫|股社区|猫笔刀公主号历史文章13-21年(含评论)

ZhaoCaiDaNiuMao的博客 7239

解决ADS1.2报错Cannot obtain license

报错如下 将licenses文件下的license内容进行修改: 修改为如下内容即可。 # # Generated on 2021-dec-1 by licwizard # PACKAGE ads armlmd 1.200 E32F0DE5161D COMPONENTS="armasm compiler bats armulate axd adwu fromelf armlink codewarrior armsd" INCREMENT ads armlmd 1.200 permanent uncounte

qq_46110320的博客 3462

从Docker Hub到阿里云镜像服务:一站式搞定你的镜像仓库登录配置

本文详细介绍了从Docker Hub到阿里云镜像服务的跨平台Docker镜像仓库登录与配置实战指南。涵盖公共仓库、云厂商服务及私有化部署的认证机制,提供Docker login等关键操作的具体命令和最佳实践,助力开发者高效管理镜像仓库。

weixin_33690963的博客 425

信贷审批中的那些坑:从零开始搭建风控策略体系的5个关键步骤

本文深入探讨了信贷审批中的风控策略体系搭建,从数据陷阱识别、规则冲突诊断到反欺诈攻防,提供了5个关键步骤的实战指南。重点解析了如何通过特征工程、决策树优化和模型可解释性技术,构建动态平衡的风控体系,有效降低逾期风险并提升审批效率。

weixin_29253711的博客 413

容器镜像管理终极指南:Harbor自动化标签清理与版本控制实践

你是否还在为Docker镜像仓库占用空间过大而烦恼?是否因标签混乱导致生产环境部署出错?本文将带你掌握Harbor容器镜像仓库(Container Image Registry)的标签生命周期管理方案,通过自动化清理策略与精细化版本控制,解决90%的镜像管理痛点。读完本文你将获得: - 基于规则的标签自动清理实现方法 - 防止误删除的不可变标签(Immutable Tag)配置 - 企业级镜像版本...

gitblog_00058的博客 389

别再只用CANape测数据了!手把手教你用ASAP2 Studio编辑A2L文件(附MAP文件更新避坑指南)

本文深入探讨ASAP2 Studio在ECU开发中的高阶应用,特别是如何利用其编辑A2L文件并同步更新MAP文件,提升测量标定效率。文章详细解析了ASAP2 Studio的双向同步能力、MAP文件更新全流程及变量管理技巧,帮助工程师避免常见错误,优化工作流程。

weixin_26833939的博客 508

使用 Python 调用 GitHub REST API 爬取 GitHub 仓库信息(完整指南)

GitHub 提供了功能强大的 REST API,允许开发者通过编程方式访问 GitHub 上的仓库、用户、提交记录、PR(Pull Request)等信息。GitHub REST API 是 GitHub 官方提供的 API 接口,支持通过 HTTP 请求来操作 GitHub 上的资源。在本文中,我们将使用 Python 编写一个完整的爬虫程序,调用 GitHub 的 REST API 来爬取 GitHub 仓库的信息。目前 GitHub 使用的主要是 v3 版本的 REST API。

2201_76125261的博客 1111

Harbor容器镜像漏洞扫描实战:从原理到CI/CD集成

在云原生和容器化部署中,软件供应链安全是核心议题。容器镜像作为应用交付的载体,其内部依赖的操作系统包、语言运行时库可能存在已知安全漏洞,这些漏洞一旦随镜像分发部署,将构成严重风险。通过漏洞扫描技术,系统能自动识别镜像中的软件成分并与CVE等漏洞数据库匹配,从而实现风险前置发现。这项技术是DevSecOps实践的关键环节,能有效将安全左移,在CI/CD流程中建立自动化质量门禁。本文以企业级镜像仓库Harbor为例,深入解析其如何集成Trivy等扫描器,实现从镜像推送、定时扫描到结果阻断的完整安全闭环,并演示如

weixin_34401479的博客 355

解锁Vscode:C/C++环境配置超详细指南

本文详细介绍如何在 VSCode 中配置 C/C++ 开发环境,帮助开发者快速搭建高效的编码调试环境。内容涵盖前期准备、软件下载安装、环境变量配置、工作区文件设置及测试运行全流程:首先需准备 VSCode 编辑器、MinGW-w64 编译器及 C/C++ 插件;接着完成工具下载与安装,配置系统环境变量以确保编译器可全局调用;然后通过创建.vscode工作区文件夹,配置核心文件,实现代码智能提示与调试功能;最后通过编写 Hello World 示例验证环境可用性,并附上常见问题排查方案。

邓邓子的博客 3047

手把手搭建Harbor+Proxy Cache:实现Docker镜像跨地域极速拉取

解决跨地域Docker镜像拉取慢难题,手把手教你搭建Harbor并配置Proxy Cache作为镜像拉取代理,适用于多区域部署场景。通过本地缓存加速访问,提升拉取效率与稳定性,节省带宽成本,值得收藏。

InstrIsle的博客 519

(五)激光线扫描-位移台标定

线激光属于主动测量方式,但是由于线激光的特性,我们只能通过提取激光中心线获取这一条线上的高度信息,那么要进行三维重建的话,就需要通过平移或者是旋转的方式,来让线激光扫描被测物体的完整轮廓,也就是整个表面。激光线的密度越高还原出来的物体越细腻,但由于数据量大,也会导致速度变慢。下面以位移台为例讲解,如何标定位移台。

FlyWine的博客 2890

YOLOv11改进 - 卷积Conv | PATConv(Partial Attention Convolution)部分注意力卷积,在减少计算量的同时融合卷积与注意力的优势 | AAAI 2026

本文提出部分注意力卷积(PATConv)机制,并将其集成到YOLOv11中。传统神经网络中,卷积计算密集,注意力机制全局计算冗余,此前的“部分卷积”会丢失未计算通道的特征价值。PATConv通过“通道拆分 - 并行处理 - 结果拼接”的逻辑,给不同通道分配“擅长的任务”,兼顾局部与全局特征。基于此,它还衍生出PAT_ch、PAT_sp和PAT_sf三种细分模块。此外,还提出了动态部分卷积(DPConv),并构建了新的混合网络家族PartialNet。我们将PATConv代码集成到YOLOv11中,实验表明,

魔改工程师的博客 1085

(Docker镜像同步工具选型指南)2024年最值得推荐的7款工具盘点

解决多环境镜像管理难题,本文盘点2024年主流Docker镜像仓库的同步工具,涵盖跨平台复制、自动化同步与安全传输方案,支持企业级容灾与CI/CD集成,助力高效运维,值得收藏

Instrustar的博客 900

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【Docker私有仓库镜像管理实战】:5大核心技巧提升企业级镜像管控效率

掌握Docker私有仓库镜像管理核心技巧,提升企业级镜像管控效率。涵盖权限控制、镜像扫描、版本规范、自动化同步与存储优化五大方法,适用于金融、制造、互联网等多场景。安全高效,降低运维风险,值得收藏。

SimSolve的博客 1014

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

告别打包噩梦:现代软件打包核心思想与最佳实践指南

软件打包是将代码、依赖和配置整合为可部署单元的关键环节,其核心原理在于构建自包含、可重现的交付物。在云原生时代,打包的技术价值已从简单的文件归档,演进为确保应用在不同环境中的一致性、安全性和高效交付。面对微服务、多架构适配等复杂场景,传统的打包方式往往导致依赖冲突、环境不一致和构建产物臃肿。通过采用容器化、多阶段构建等现代打包技术,开发者可以系统性地解决这些问题,实现从开发到生产的平滑过渡。本文聚焦于Docker、Buildpacks、Jib等工具链的工程实践,深入探讨如何构建轻量、安全的软件包,为高效、稳

weixin_30530339的博客 353

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

从零到一:K8S与Harbor私有仓库的权限握手协议

本文详细解析了Kubernetes(K8S)与Harbor私有仓库的权限握手协议,重点解决了401 Unauthorized错误问题。通过认证流程解析、机器人账号管理和Secret配置实战,帮助开发者实现安全的镜像拉取与权限控制,适用于企业级容器化部署场景。

earth的博客 188

为什么选择kaniko?深入解析Kubernetes原生容器镜像构建的5大优势

在Kubernetes环境中构建容器镜像时,传统Docker daemon方式往往面临安全风险和资源限制。kaniko作为一款**Kubernetes原生容器镜像构建工具**,通过无守护进程的设计和用户空间执行机制,为云原生环境提供了更安全、更高效的镜像构建解决方案。本文将深入解析kaniko的五大核心优势,帮助你理解为何它能成为容器化部署的理想选择。 ## 1. 无需Docker守护进程,彻底

gitblog_00158的博客 297
上一篇: 【Docker数据持久化终极指南】:深入解析Volume与Bind Mount核心差异及最佳实践
下一篇: 【前端开发者进阶必备】:掌握VSCode扩展开发的8个关键技术点
CodePulse
博客等级 码龄2年 187粉丝 2233原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值