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

深入理解K8s与Docker的关系:容器化技术的双雄

友情提示:本文内容由银河易创(https://ai.eaigx.com)AI创作平台gpt-4-turbo模型生成,仅供参考。

在现代云计算及微服务架构的发展中,Docker与Kubernetes(K8s)作为两大核心技术,被广泛应用于应用程序的开发、部署和管理中。对于许多开发者和运维人员而言,理解这两者之间的关系至关重要。本文将详细探讨K8s与Docker的关系,帮助你更好地掌握这两种技术在容器化生态系统中的角色。

一、Docker:容器的创建者

1.1 Docker简介

Docker是一种开源的容器化平台,最早由Solomon Hykes于2013年推出,旨在简化应用程序的开发、交付和部署。通过Docker,开发人员可以将应用程序及其所有依赖项(如库、配置文件和环境变量)封装在一个独立的"容器"中。容器是轻量级的、可移植的,能够在任何支持Docker的环境中快速部署和运行。Docker的出现彻底改变了传统的应用程序部署模式,使得“写一次,处处运行”成为可能。

1.2 Docker的工作原理

Docker使用操作系统层级虚拟化技术,它通过以下几个关键组件实现容器的创建与管理:

  • Docker Daemon(守护进程) :这是Docker的核心管理服务,运行在宿主机上,负责创建、运行和管理Docker容器。它可以通过命令行或API接受指令。

  • Docker Client(客户端) :用户通过Docker CLI(命令行界面)与Docker Daemon进行交互。开发者可以使用一系列命令来构建、运行和管理容器,比如docker rundocker build等。

  • Docker Images(镜像) :镜像是Docker的基本构建块,它是一个只读的模板,包含了运行某个应用所需的所有文件、库和设置。开发者可以通过Dockerfile来定义镜像的内容,将应用及其依赖项描述成代码。

  • Docker Containers(容器) :容器是从镜像创建的一个运行实例。每个容器都是一个轻量级的隔离环境,进程运行在容器中,但与主机系统共享Linux内核。容器启动时快速执行相应的镜像,生成一个运行环境。

  • Docker Registry(注册表) :Docker Registry是存储Docker镜像的仓库,包括公有Docker Hub和私有Registry。开发者可以将镜像推送到Registry,或者从中拉取已有镜像,以便在不同环境中使用。

1.3 Docker的优势

Docker的出现带来了众多优势,使其成为现代软件开发的流行选择:

  • 轻量级:Docker容器相较于虚拟机(VM)占用更少的系统资源,启动速度更快。由于容器不需要启动完整的操作系统,只需启动应用进程。这使得容器化的服务可以快速扩展和收缩。

  • 一致性与可移植性:容器包含了所有运行应用所需的依赖项,无论在开发、测试还是生产环境,应用都能以相同的方式运行,从而消除了“在我机器上可以运行”的困扰。

  • 提高开发效率:开发人员可以通过Docker快速搭建一致的开发环境,加快应用程序的开发周期。CI/CD(持续集成/持续交付)流程中,Docker能够有效地实现自动化构建和测试。

  • 简化应用程序管理:Docker容器可在多种平台上运行(如本地开发机、服务器、云环境等),并且能够方便地创建、删除和更新。这使得微服务架构得以更加灵活地运行。

1.4 Docker在微服务架构中的应用

随着微服务架构的普及,Docker作为容器技术的代表,逐渐成为微服务的标准选择。微服务架构将单一应用程序拆分为多个小型服务,每个服务可以独立开发、部署和扩展。Docker为每个微服务提供了隔离的运行环境,使得不同服务之间的依赖关系得以减少,有效降低了系统的复杂度。

开发者可以轻松地在每个服务上创建和管理Docker容器,确保每个服务都在可控的环境中运行。Docker还支持服务的水平扩展,可以根据流量动态增加或减少容器实例,从而保持服务的可用性和响应性。

Docker作为容器的创建者,为开发者和运维人员提供了一种高效、便捷的应用程序打包和部署方式。通过Docker,应用程序的开发与生产环境可以实现高度一致性,减少了环境问题导致的错误。同时,Docker的轻量级特性使得容器可以快速启动和停止,极大地提升了应用的维护与扩展能力。随着Kubernetes等容器编排工具的兴起,Docker正在成为构建和管理现代微服务架构的基石之一。

二、Kubernetes:容器编排的管理者

2.1 Kubernetes简介

Kubernetes(简称K8s)是一个开源的容器编排平台,最初由Google发起并贡献给Cloud Native Computing Foundation(CNCF)。它旨在解决在大规模容器化应用的生产环境中所面临的挑战,如容器的自动化部署、扩展、负载均衡和故障恢复等问题。Kubernetes提供了一个高度自动化的系统,帮助开发者和运维团队在大规模容器集群上管理应用的生命周期。

与Docker等容器运行时相比,Kubernetes并不直接创建或运行容器,而是负责对容器化应用进行高效的调度、部署、扩展、监控和管理。它的设计理念是简化容器化应用在生产环境中的管理,提供自愈、自动化伸缩和高可用性等能力,从而使得开发和运维更加高效。

2.2 Kubernetes的工作原理

Kubernetes是一个分布式系统,它的主要功能是通过协调和调度多个容器的工作,确保应用能够按照预期稳定运行。Kubernetes的核心组件包括以下几个:

  • Master节点(控制平面) :Master节点是K8s集群的控制中心,负责全局管理与调度。它由多个组件组成,包括:

    • API Server:接收和处理外部请求,提供RESTful API接口,用户通过它与K8s集群进行交互。
    • Scheduler:负责将Pod调度到合适的工作节点上,根据节点的资源利用情况(如CPU、内存、存储等)进行资源分配。
    • Controller Manager:负责监控集群的状态并进行控制操作,例如Pod副本数量的管理(ReplicaSet)、Pod健康检查等。
    • etcd:一个分布式键值存储系统,用于存储Kubernetes集群的所有配置数据、状态信息和元数据。
  • Worker节点(工作节点) :工作节点是K8s集群中执行容器的节点,每个节点都运行着一个Docker或其他容器运行时。在工作节点上,K8s通过以下组件来确保容器应用的运行:

    • Kubelet:是每个节点上的代理,负责确保容器在节点上按预期运行。如果容器出现故障,Kubelet会通知Master节点并执行恢复操作。
    • Kube Proxy:Kube Proxy负责处理K8s集群中的网络通信和负载均衡,将请求路由到合适的Pod上。
    • Container Runtime:如Docker、containerd等,是容器运行时,负责拉取镜像并运行容器。
  • Pod:在Kubernetes中,Pod是容器的基本部署单位。Pod可以包含一个或多个容器,这些容器共享同一网络和存储资源。Pod通常作为一组紧密相关的容器共同运行,Kubernetes确保它们能够作为一个单一单元进行调度和管理。

2.3 Kubernetes的核心功能

Kubernetes提供了许多强大的功能,使得容器化应用的管理更加自动化、灵活和高效。以下是K8s的几项核心功能:

  • 自动化部署与滚动更新:K8s可以自动化应用的部署流程,确保应用版本的无缝更新。例如,当你推送新的Docker镜像时,K8s会自动进行滚动更新(Rolling Update),逐步替换旧版本的Pod,确保应用始终保持可用状态。

  • 负载均衡与服务发现:Kubernetes通过集群内的DNS和负载均衡服务,自动将外部请求转发到适当的Pod中。它提供了服务发现的功能,即使Pod的IP发生变化,外部服务也无需感知,可以通过服务名来访问Pod。

  • 自动化伸缩:K8s可以基于负载动态调整应用的实例数量,实现水平自动伸缩(Horizontal Pod Autoscaling)。当系统负载较高时,K8s会自动增加Pod实例,反之则减少实例数。这对于处理大规模流量波动至关重要。

  • 资源管理与限制:Kubernetes能够精确控制每个容器的资源使用情况(如CPU、内存等)。通过定义资源请求和限制,K8s可以避免单个容器占用过多资源而影响整个集群的性能。

  • 自愈能力与故障恢复:K8s具备自动故障检测与修复机制。当Pod发生故障时,K8s会自动重新调度并启动新的Pod实例,确保应用始终可用。这种自愈能力极大地提高了应用的可靠性。

  • 配置管理与密钥管理:K8s通过ConfigMap和Secret等资源,允许开发者将配置信息和敏感数据(如数据库密码、API密钥)独立于容器进行管理,便于维护和安全管理。

2.4 Kubernetes的应用场景

Kubernetes的强大功能使其成为了大规模容器化应用的首选平台,适用于多种场景,包括:

  • 微服务架构的管理:微服务架构将应用拆分成多个独立的小型服务,每个服务可以独立部署、扩展和更新。Kubernetes通过自动化管理和调度,使得微服务的部署和运行更加高效和可靠。

  • CI/CD流程的自动化:K8s能够与持续集成(CI)和持续交付(CD)工具深度集成,支持自动化的构建、测试、部署和发布流程,减少人为操作,提升开发效率。

  • 混合云与多云环境:Kubernetes提供了跨云和跨数据中心的统一管理能力。通过K8s,企业可以在本地数据中心、公有云或混合云环境中灵活部署和管理应用,避免供应商锁定问题。

2.5 Kubernetes与Docker的结合

Kubernetes和Docker的结合创造了一个强大且灵活的容器化应用管理平台。在这一组合中,Docker负责容器的构建和运行,而Kubernetes则负责容器的调度、管理和扩展。开发者可以使用Docker来构建应用镜像,将应用封装为容器,然后利用Kubernetes的容器编排功能,确保容器在集群中的高效运行。

尽管Kubernetes也支持其他容器运行时(如containerd和CRI-O),Docker仍然是Kubernetes生态中最常见的容器运行时。K8s通过将Docker容器作为基础单元进行管理,实现了容器化应用的自动化部署与弹性伸缩。

Kubernetes作为容器编排的管理者,通过提供高效的自动化管理和调度能力,使得容器化应用的部署、扩展、故障恢复和更新更加便捷。它不仅优化了容器的生命周期管理,还提高了应用的可靠性、可伸缩性和可维护性。随着容器化技术的普及,K8s已经成为云原生应用的核心平台之一,为开发者和运维人员提供了强大的工具集,帮助他们应对日益复杂的分布式应用场景。

三、K8s与Docker的关系

3.1 Docker作为K8s的容器运行时

Kubernetes(K8s)是一个容器编排平台,它的核心功能是自动化部署、扩展和管理容器化应用。尽管K8s本身并不直接创建容器,但它依赖容器运行时来执行容器的创建和运行任务。Docker是最广泛使用的容器运行时之一,因此K8s和Docker的关系密不可分。

Kubernetes的工作流程中,Docker通常作为容器运行时(Container Runtime)来执行容器的启动、停止、镜像拉取等操作。当K8s调度一个Pod到某个节点时,节点上的容器运行时(通常是Docker)会根据Kubernetes的要求拉取镜像并启动容器。Kubernetes负责调度和管理容器的生命周期,而Docker负责具体的容器操作。

尽管Kubernetes不仅仅局限于Docker,它支持其他容器运行时,如containerd、CRI-O等,但Docker依然是Kubernetes支持的主要容器运行时。Docker具有广泛的生态系统和成熟的工具链,使得它在开发者和运维人员中非常受欢迎,因此大部分K8s集群仍然使用Docker作为默认的容器运行时。

3.2 共同的容器化生态系统

Kubernetes和Docker一起为容器化应用提供了完整的生命周期管理。从应用的开发、构建、打包到部署、扩展、监控和更新,它们提供了一个无缝的流程。

  • Docker的作用:Docker通过Dockerfile定义应用程序的运行环境、依赖项和配置。开发者可以利用Docker构建应用镜像,然后将镜像存储到容器镜像仓库(如Docker Hub、私有Registry等)。Docker通过命令行工具或API为开发人员提供了一个便捷的方式来创建、测试和分发容器。

  • Kubernetes的作用:Kubernetes将Docker容器部署到集群中进行管理。K8s通过控制平面调度容器的运行位置,并确保在多节点的集群中容器始终保持健康和高可用。Kubernetes提供了自动化部署、扩展和故障恢复等强大功能,从而确保容器化应用在生产环境中的稳定性。

Kubernetes和Docker协同工作,形成了一个完整的容器化解决方案,使得容器化应用的开发、交付和管理变得更加高效和可靠。

3.3 微服务架构与K8s + Docker的结合

微服务架构是当今应用开发的主流趋势之一,它将一个庞大的单体应用拆解成多个小型、独立、自治的服务。每个服务可以单独开发、测试和部署,而Docker和Kubernetes则为微服务架构提供了强大的支撑。

  • Docker容器化微服务:每个微服务可以打包成一个Docker镜像,镜像中包含了该微服务的所有依赖项和配置。通过Docker,开发人员可以确保每个微服务的开发和生产环境高度一致,避免了"在我机器上能运行"的问题。

  • Kubernetes管理微服务:Kubernetes则负责将这些微服务容器化后的Pod进行调度和管理,确保服务的高可用、自动扩缩容和健康检查等。K8s提供了ReplicaSet来管理微服务的副本,确保在某个实例失败时能够自动重启容器,保持服务的持续可用性。

  • 服务发现与负载均衡:K8s通过其内建的服务发现机制,使得微服务能够动态发现其他服务,并通过负载均衡器自动分配流量。开发人员无需关心每个服务容器的IP变化,Kubernetes会根据服务名自动处理通信。

Kubernetes和Docker的结合是微服务架构中的关键,它们帮助开发者简化了复杂应用的管理,提升了微服务的可扩展性、容错性和灵活性。

3.4 互为补充:Kubernetes与Docker的关系演变

虽然Docker和Kubernetes在容器化技术的初期是独立发展的,但它们之间的关系在容器化应用日益普及的过程中逐渐变得更加密切。早期,Docker本身便承担了容器编排的一些基本功能,但随着容器化应用规模的增大,Docker的编排能力逐渐显得不足。此时,Kubernetes作为容器编排平台应运而生,弥补了Docker在大规模集群管理中的不足。

Kubernetes并不是要替代Docker,而是与Docker共同构建容器化应用的完整解决方案。Docker负责容器的创建和运行,而Kubernetes则负责容器的管理、调度和自动化。它们相辅相成,帮助开发者高效地构建和管理容器化应用。

随着技术的不断发展,Kubernetes也支持了更多的容器运行时(如containerd和CRI-O),这些容器运行时与Docker兼容,具有类似的功能,但它们提供了更轻量化和专注于容器运行时的实现。因此,Docker的角色逐渐被抽象为一个容器运行时,而Kubernetes作为容器编排平台,不再局限于Docker。

然而,Docker和Kubernetes依然是现代容器化技术栈中最常见的组合。Docker的普及度、易用性和强大的工具链,使其成为Kubernetes集群中广泛采用的容器运行时。

3.5 未来趋势:从Docker到容器运行时接口(CRI)

随着容器技术的发展,Kubernetes越来越依赖于容器运行时接口(Container Runtime Interface,简称CRI)。CRI是Kubernetes与容器运行时之间的抽象层,使得Kubernetes能够与多种容器运行时进行集成,而不仅限于Docker。事实上,Kubernetes项目逐步将Docker从其核心容器运行时中剥离,转而使用containerd和CRI-O等更轻量、更专注的容器运行时。

即便如此,Docker仍然是容器生态系统中的重要组成部分,许多开发者依然通过Docker构建镜像,并将其推送到容器镜像仓库。对于Kubernetes而言,Docker的镜像格式仍然被广泛支持,且Docker引擎在Kubernetes集群中仍然可以作为容器运行时使用。

总结来看,Docker与Kubernetes的关系不仅仅是容器运行时与容器编排平台的简单配对,它们共同构建了一个完整的容器化生态系统,帮助开发者和运维人员高效管理、扩展和维护容器化应用。无论是Docker镜像的创建,还是Kubernetes容器的编排,它们相互依存,共同推动了云原生和微服务架构的发展。

四、总结

Docker与Kubernetes在构建现代云原生应用程序的过程中扮演着不可或缺的角色。Docker作为容器的创建者,不仅提供了一种轻量级的环境来打包和运行应用,同时也为K8s提供了强有力的支持。K8s则负责整个应用程序的生命周期管理,确保在大规模生产环境中容器应用的自动化与高可用。通过这两者的结合,开发者与运维人员能够更高效地构建和管理复杂的应用程序,使其在快速变化的商业环境中保持竞争优势。

相关文章:

深入理解K8s与Docker的关系:容器化技术的双雄

友情提示:本文内容由银河易创(https://ai.eaigx.com)AI创作平台gpt-4-turbo模型生成,仅供参考。 在现代云计算及微服务架构的发展中,Docker与Kubernetes(K8s)作为两大核心技术,被广泛…...

QT高效文件I/O编程--实用指南与最佳实践

概述 在软件开发过程中,文件输入输出(I/O)操作是数据持久化和交换的核心部分。无论是简单的日志记录还是复杂的数据集处理,高效的文件I/O操作对于应用的整体性能至关重要 最佳实践 一、选择合适的文件模式 正确选择文件打开模式是确保操作意图明确且安全的第一步。不同…...

QT记事本

记事本应用程序提供了基本的文本编辑功能,支持文件的新建、打开、保存和另存为操作,同时具备修改提示和关闭窗口时的保存确认功能。使用 UTF - 8 编码确保了对多语言文本的支持。 1. 项目整体结构 main.cpp:程序的入口点,负责初…...

【leetcode hot 100 84】柱状图中最大的矩形

解法一:单调栈 class Solution {public int largestRectangleArea(int[] heights) {int len heights.length;int area 0;// 先做一些特殊判断if(len0){return 0;}if(len1){return heights[0];}// 进入栈后发现后面更短,可以得到当前这个能勾勒的面积 …...

Spring----ioc

1.Spring 是什么? 通过前⾯的学习, 我们知道了Spring是⼀个开源框架, 他让我们的开发更加简单. 他⽀持⼴泛的应⽤场景, 有着活跃⽽庞⼤的社区, 这也是Spring能够⻓久不衰的原因. 但是这个概念相对来说, 还是⽐较抽象. 我们⽤⼀句更具体的话来概括Spring, 那就…...

C++——重载

目录 一、函数重载 基本概念 函数重载的条件 编程示例 代码讲解 函数重载的注意事项 二、运算符重载 什么是运算符重载? 运算符重载的实质是什么? 运算符重载函数的写法 运算符重载的基本语法 可重载的运算符列表 基本原则 编程示例 代码解…...

答疑解惑:EMC VMAX3 MMCS控制台不定期重启原因分析

今天有个朋友咨询他们有一台EMC的VMAX100k设备,其中MMCS2的管理控制台定期重启,但始终无法找到重启原因,稍微花了点时间,帮客户看了下。先说结论,MMCS2确实不定期发生重启,每次reboot都是一样的message信息…...

单例模式(Singleton Pattern)

单例模式(Singleton Pattern) 任务管理器可以作为一个全局的任务配置管理类,使用单例模式保证全局只有一个实例。这样你可以避免在应用程序中创建多个任务管理对象,保持配置参数的统一。 示例: class TaskManager { …...

树莓派超全系列文档--(8)RaspberryOS实用程序

RaspberryOS实用程序 实用程序kmsprintvclogvcgencmdvcosversionget_throttledmeasure_tempmeasure_clock [clock]measure_volts [block]otp_dumpget_config [configuration item|int|str]get_mem typecodec_enabled [type]mem_oommem_reloc_statsread_ring_osc 文章来源&#…...

Rust 与 FFmpeg 实现视频水印添加:技术解析与应用实践

引言 在短视频、直播、影视制作等领域,视频水印是一种常见的工具,用于保护版权、提升品牌辨识度或满足合规性要求。然而,开发者在实现水印添加时往往面临以下挑战: 手动处理效率低:使用图像编辑软件(如 P…...

绿联NAS安装内网穿透实现无公网IP也能用手机平板远程访问经验分享

文章目录 前言1. 开启ssh服务2. ssh连接3. 安装cpolar内网穿透4. 配置绿联NAS公网地址 前言 大家好,今天给大家带来一个超级炫酷的技能——如何在绿联NAS上快速安装cpolar内网穿透工具。想象一下,即使没有公网IP,你也能随时随地远程访问自己…...

如何在 React 项目中使用React.lazy和Suspense实现组件的懒加载?

大白话如何在 React 项目中使用React.lazy和Suspense实现组件的懒加载? 在 React 项目里,有时候组件功能多、体积大,要是一次性把所有组件都加载进来,网页加载速度就会变慢。而 React 提供了 React.lazy 和 Suspense 这两个好东西…...

虫洞数观系列一 | 豆瓣电影TOP250数据采集与MySQL存储实战

目录 系列文章 1. 引言 2 技术栈Request 2.1请求头headers 2.2查找定位信息 2.3处理网页html结构化数据 2.4每页url规律 2.5逐条查找所需信息 2.6完整代码 3 数据存储至mysql 3.1新建数据库 3.2编写数据库写入py文件 3.2.1构建1个执行sql语句的函数 3.2.2构造一个…...

模型 阿米巴模式

系列文章分享模型,了解更多👉 模型_思维模型目录。小团队独立经营,企业活力无限。 1 阿米巴模式的应用 1.1 日航重生(航空业成功案例) 应用领域 航空运输业破产重组与组织激活 案例名称 日本航空(JAL&…...

针对stm32F103C8t6芯片调节USB串口的经验

1、首先这是自己手搓的板子,对于之前一直没有了解过USB这方面,则这个针对USB部分没有设计上拉电阻,造成不管怎么调节PC端都没有反应。 图一 这个没有添加1.5K电阻 这个D+位置应该再接一个1.5KR的电阻如图2所示 图2 这样调节的话PC端就可以识别到USB串口,但是这是串口还是会…...

JVM详解(包括JVM内存模型与GC垃圾回收)

📖前言: 学会使用Java对于一个程序员是远远不够的。Java语法的掌握只是一部分,另一部分就是需要掌握Java内部的工作原理,从编译到运行,到底是谁在帮我们完成工作的? 接下来着重对Java虚拟机,也就…...

解锁DeepSeek潜能:Docker+Ollama打造本地大模型部署新范式

🐇明明跟你说过:个人主页 🏅个人专栏:《深度探秘:AI界的007》 🏅 🔖行路有良友,便是天堂🔖 目录 一、引言 1、什么是Docker 2、什么是Ollama 二、准备工作 1、操…...

【Linux网络】——Socket网络编程

前言 在当今数字化的时代,网络通信已经成为计算机领域不可或缺的一部分。无论是日常的网页浏览、社交媒体交互,还是大规模的企业级数据传输,都离不开高效可靠的网络通信。而在Linux操作系统中,Socket网络编程是实现各种网络应用的…...

基于javaweb的SpringBoot雪具商城系统设计与实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...

Android 简化图片加载与显示——使用Coil和Kotlin封装高效工具类

为了简化使用Coil加载网络图片和GIF的过程,我们可以封装一个工具类。这个工具类将包括初始化ImageLoader的方法、加载图片到ImageView的方法,以及可能的其他便捷方法,如加载圆形图片、设置占位图等。下面是一个示例: 首先&#x…...

Flink watermark的时间字段有空值,建表的时候,如何处理

在 Flink 中处理时间字段存在空值时,需通过 表定义阶段的特殊处理 和 Watermark 生成策略调整 来避免因空值导致的窗口计算异常或任务失败。以下是具体解决方案及实现方法: 1. 空值处理核心策略 1.1 查询时,过滤空值数据(推荐&am…...

关于matlab和python谁快的问题

关于matlab和python谁快的问题,python比matlab在乘法上快10倍,指数计算快4倍,加减运算持平,略慢于matlab。或许matlab只适合求解特征值。 import torch import timen 50000 # 矩阵规模 M torch.rand(n, 31)start_time time.t…...

【DevOps】DevOps and CI/CD Pipelines

DevOps 是一种将开发与运维实践相结合的模式,旨在缩短软件开发周期并交付高质量软件。 DevOps 是什么? 开发团队与运维团队之间的协作 • 持续集成与持续交付(CI/CD) • 流程自动化 • 基础设施即代码(IaC)…...

ROS--IMU数据包

IMU惯性测量单元 一:IMU二:ROS中三:IMU数据包三:总结 提示:以下是本篇文章正文内容,下面案例可供参考 一:IMU IMU(Inertial Measurement Unit,惯性测量单元&#xff09…...

【机器学习】手撕封装PCA——将高维数据映射到低维数据的过程

PCA将高维数据映射到低维数据的过程 一、摘要二、PCA的降维思路三、PCA代码实现降维过程3.1 PCA类的实现与封装3.2 PCA类的使用示例 四、PCA的恢复过程 一、摘要 本文详细介绍了主成分分析法(PCA)在高维数据降维中的应用。首先,阐述了PCA的基…...

LangChain开发(七)自定义输出格式(JSON/XML/YAML)

文章目录 JSON结构输出未使用PydanticPydantic流式处理 XML结构输出xml输出指定字段 YAML输出源码地址参考资料 JSON结构输出 虽然一些模型提供商支持内置的方法返回结构化输出,但并非所有都支持。我们可以使用输出解析器来帮助用户通过指示指定任意的JSON模型&…...

RustDesk部署到linux(自建服务器)

简介 ‌RustDesk‌是一款开源的远程桌面软件,由中国开发者开发,使用Rust编程语言构建。它支持跨平台运行,可以在Windows、macOS、Linux、iOS、Android和Web等多个平台上使用。RustDesk的主要功能包括远程桌面访问、文件传输、文本聊天等&…...

分布式锁,redisson,redis

目录 什么是分布式锁分布式锁解决什么问题分布式锁的特点使用分布式锁的场景怎么使用分布式锁1. 添加依赖2. 配置 Redisson 客户端3. 使用 Redisson 实现分布式锁 什么是分布式锁 分布式锁是一种锁机制,用于在分布式环境下,解决多个线程并发访问同一共享…...

linux常用指令(9)

加油同志们,我们离胜利不远了,再有两天我们就可以了解完linux的一些基本常用指令了,到时我们便可以进入一些shell脚本语法了,那么话不多说,来看. 1.more指令 功能描述:more指令是一个基于vi编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容. 基本语法…...

深入解析 JVM 内存区域及核心概念

深入解析 JVM 内存区域及核心概念 Java 虚拟机(JVM)内部划分了多个内存区域,每个区域存储不同类型的数据并承担不同的职责。本文将详细介绍以下内容: 程序计数器:记录当前线程正在执行的字节码指令及其“行号”信息&a…...

字节跳动春招研发部笔试题解

字节跳动春招研发部笔试题 1.万万没想到之聪明的编辑 我叫王大锤,是一家出版社的编辑。我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误。但是,优秀的人总能在平凡的工作中发现真理。我发现一个发…...

java对象模型

java对象自身的存储模型JVM会给这个类创建一个instanceKlass,保存在方法区,用来在JVM层表示该Java类。 a类。当我们在Java代码中,使用new创建一个对象的时候,JVM会在栈中给对象赋值,会在堆中创建一个instanceOopDesc对…...

深入理解指针(3)(C语言版)

文章目录 前言 一、字符指针变量二、数组指针变量2.1 数组指针变量是什么2.2 数组指针变量怎么初始化2.2.1 静态初始化2.2.2 动态初始化 三、二维数组传参的本质四、函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使用4.3 typedef关键字4.4拓展 五、函数指针数组六、转…...

Linux内核 内存管理 物理内存初始化流程

1.‌ARM64页表初始化流程图 start_kernel()│▼ setup_arch() // 架构相关初始化│▼ early_fixmap_init() // 初始化Fixmap(临时映射设备树等)│▼ arm64_memblock_init() // 从设备树解析内存布局│▼ arm…...

Day23:和为s的数字

购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况,返回任一结果即可。 示例 1: 输入:price [3, 9, 12, 15], target 18 输出:[3,15] 或者 [15,3]示例 2&#x…...

Transformer 通关秘籍2:利用 BERT 将文本 token 化

前面两节分别通过两个代码示例展示了模型将文本转换为 token 之后是什么样的,希望你可以对此有一个感性的认识。 本节来简要介绍一下将一个连续的文本转换为 token 序列的大致过程,这个过程被称为分词,也叫 tokenization。 在你没了解这方面…...

电脑干货:万能驱动--EasyDrv8

目录 万能驱动EasyDrv8 功能介绍 主程序界面 驱动解压与安装 PE环境支持 系统部署环境 桌面环境一键解决方案 万能驱动8电脑版是由IT天空出品的一款智能识别电脑硬件并自动安装驱动的工具,一般又称为it天空万能驱动,万能驱动vip版,简称…...

18502 字符串哈希匹配字符串

18502 字符串哈希匹配字符串 ⭐️难度:中等 🌟考点:字符串hash 📖 📚 import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class Main {static int…...

openmmlab介绍 一下

OpenMMLab 是由商汤科技(SenseTime)发起并维护的开源深度学习项目,专注于计算机视觉领域。它提供了一系列模块化、可扩展的工具库,旨在帮助研究者和开发者高效地实现、复现和部署前沿的视觉算法。OpenMMLab 的设计强调‌模块化‌、…...

基于javaweb的SpringBoot线上网络文件管理系统设计与实现(源码+文档+部署讲解)

技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…...

【设计模式】工厂模式详解-----简单工厂模式、工厂方法模式、抽象工厂模式

工厂模式详解 一、概述 工厂模式(Factory Pattern) 是一种 创建型设计模式,用于 封装对象的创建逻辑,避免在代码中直接实例化对象,从而提高代码的 可维护性、扩展性和解耦性。 二、工厂模式分类 工厂模式包括 简单工…...

【雅思播客09】Turn Left here.

Hello everyone! And welcome to my channel! Im Reevs. Good morning! 大家好,欢迎来到懒人英语晨读栏目,我是Reevs,早上好呀。 I have a great lesson for you today. 今天我有一堂非常棒的课。 We have an elementary lesson, which is …...

初阶7 vector

本章重点 vector的介绍vector的使用vector的模拟实现 1.vector的介绍 vector就类似数据结构中的顺序表 vector是表示可变大小数组的序列容器。 就像数组一样,vector也采用的连续存储空间来存储元素。 意味着可以采用下标对vector的元素 进行访问,和数…...

归并排序总结

归并排序是分治法的典型应用,把两个或k个有序的子序列合并为一个。2路归并,2合一。k路归并,k合一。内部排序通常采用2路归并排序,先将数组分成两半,分别排序,然后合并。合并的过程需要将两个有序的子数组合…...

ollama迁移已下载的单个模型到服务器

ollama迁移已下载的单个模型到服务器 场景 ollama是面向用户级的,部署和运行都很简单,是否高效就另说了。但最起码,他能充分利用用户的硬件设备,在GPU不足也能调用cpu和内存去加持。 ollama运行的模型基本是量化版本的&#xf…...

基于SSM+Vue物流信息管理系统(附源码)

预览页面 获取方式 https://gitee.com/XiaoLin_Java/communion/blob/master/README.en.md...

docker创建registry镜像仓库2.8版本

目录 shell脚本内容 运行效果 问题与解决 涉及镜像包registry:2.8(x86版本) shell脚本内容 [roottest1 docker]# cat registry.sh #!/bin/bash read -p "请输入用户:" user read -p "请输入密码:" passpathpwd passdir"$…...

Ubuntu下用QEMU模拟运行OpenBMC

1、前言 在调试过程中,安装了很多依赖库,具体没有记录。关于kvm,也没理清具体有什么作用。本文仅记录,用QEMU成功的将OpenBMC跑起来的过程,做备忘,也供大家参考。 2、环境信息 VMware Workstation 15 Pro…...

Unity Shader编程】之复杂光照

在Unity Shader的LightMode标签中,除了前向渲染和延迟渲染外,还支持多种渲染模式设置。以下是主要分类及用途: 一、核心渲染路径模式 前向渲染相关 ForwardBase 用于基础光照计算,处理环境光、主平行光、逐顶点/SH光源及光照贴图。…...

从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.1.3前馈网络(FFN)与激活函数(GELU)优化

👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 2.1.3 前馈网络(FFN)与激活函数(GELU)优化1. 前馈网络(FFN)的架构设计与数学原理1.1 FFN在Transformer中的核心作用2. GELU激活函数的数学特性与优化2.1 GELU的数学形式与近似计算3. 逐行代码实现…...