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

Docker教程(喂饭级!)

如果你有跨平台开发的需求,或者对每次在新机器上部署项目感到头疼,那么 Docker 是你的理想选择!Docker 通过容器化技术将应用程序与其运行环境隔离,实现快速部署和跨平台支持,极大地简化了开发和部署流程。本文详细介绍了 Docker 的核心组件、工作原理和基本操作流程,并结合算法模型部署的实际应用,以 CUDA 环境部署为例,深入讲解了如何利用 Docker 进行模型部署和调试,帮助你轻松应对复杂的开发与部署挑战。

1. Docker 简介

Docker 是一个用于开发、运输和运行应用程序的开源平台。它将应用程序与环境进行隔离,实现项目的快速部署上线,减少项目在环境部署上所花费的成本。

2. Docker 架构与工作流程

2.1 Docker 架构

Docker 的架构基于客户端-服务器模式,主要由 Docker 客户端和 Docker 守护进程两大核心组件构成。Docker 客户端是用户与系统交互的命令行界面(CLI),用户通过 CLI 发送命令(如构建镜像、启动容器等),这些命令会被传递到 Docker 守护进程(通常为 dockerd​)。守护进程作为 Docker 的核心组件,负责管理容器的生命周期、构建镜像、分发镜像等任务,并以后台进程的形式持续运行,监听并处理来自客户端的请求。这种架构使得 Docker 能够高效地构建、管理和运行容器化应用,为用户提供了灵活且强大的开发与部署体验。

Docker架构

2.2 Docker 架构的工作流程

  1. 构建镜像:使用 Dockerfile​ 创建镜像。
  2. 推送镜像到注册表:将镜像上传到 Docker Hub 或私有注册表中。
  3. 拉取镜像:通过 docker pull​ 从注册表中拉取镜像。
  4. 运行容器:使用镜像创建并启动容器。
  5. 管理容器:使用 Docker 客户端命令管理正在运行的容器(例如查看日志、停止容器、查看资源使用情况等)。
  6. 网络与存储:容器之间通过 Docker 网络连接,数据通过 Docker 卷或绑定挂载进行持久化。

3. Docker 的主要特点

  1. 容器化技术

    • 隔离性:Docker 使用容器技术,将应用程序及其依赖打包到一个独立的环境中运行,与其他容器和宿主机隔离。
    • 轻量级:与虚拟机相比,Docker 容器不需要完整的操作系统,共享宿主机的内核,因此启动速度快,资源占用少。
  2. 镜像管理

    • 镜像构建:通过 Dockerfile 定义应用程序的运行环境和依赖,然后构建为镜像。
    • 镜像分发:镜像可以存储在本地或远程仓库(如 Docker Hub),方便分发和共享。
  3. 容器管理

    • 容器生命周期管理:可以创建、启动、停止、删除容器。
    • 容器编排:支持使用 Docker Compose 等工具管理多个容器的部署和运行。
  4. 跨平台支持

    • Docker 支持多种操作系统,包括 Linux、Windows 和 macOS,能够确保应用程序在不同环境中的一致性。

4. Docker 的工作原理

  1. Docker 守护进程(Docker Daemon) :守护进程是 Docker 的核心组件,负责管理镜像、容器、网络和存储卷等资源。
  2. Docker 客户端(Docker CLI) :用户通过命令行工具与守护进程交互,执行各种操作,如拉取镜像、运行容器等。
  3. Docker 镜像:镜像是只读模板,包含运行容器所需的文件系统和依赖。镜像由多层组成,每一层代表一次构建操作。
  4. Docker 容器:容器是镜像的运行实例,具有独立的文件系统、网络接口和资源限制。容器通过联合文件系统(Union File System)在镜像的基础上添加可读写层。
  5. Docker 仓库:用于存储和分发镜像。Docker Hub 是官方的公共仓库,用户也可以搭建私有仓库。

5. Docker 容器与镜像之间的关系

5.1 定义

  • 镜像(Image) :Docker 镜像是一个只读模板,它包含了运行一个容器所需的文件系统、操作系统、应用程序及其依赖项。镜像是静态的,不可修改,是容器运行的基础。
  • 容器(Container) :容器是从镜像创建的运行实例。它是镜像的动态运行状态,可以启动、停止、删除等。容器在镜像的基础上添加了可读写层,用于存储运行时产生的临时数据。

5.2 关系

  1. 镜像是容器的模板:容器是基于镜像创建的。镜像定义了容器的初始状态,包括文件系统、操作系统环境、预安装的软件和配置等。
  2. 容器是镜像的运行实例:容器是镜像的动态运行版本。当启动一个容器时,Docker 会在镜像的基础上添加一个可读写层,用于存储容器运行时产生的临时数据。
  3. 镜像的不可变性与容器的可变性:镜像是不可变的,一旦创建,其内容不会改变。而容器是可变的,用户可以在容器中安装软件、修改配置等。
  4. 容器的创建依赖于镜像:没有镜像,容器无法被创建。用户可以通过拉取公共镜像仓库中的镜像,或者使用 Dockerfile 构建自定义镜像来创建容器。
  5. 容器的销毁不影响镜像:删除容器后,镜像仍然存在。用户可以基于同一个镜像创建多个容器,每个容器都是独立的运行实例。

5.3 总结

镜像是容器的静态模板,定义了容器的初始状态;容器是镜像的动态运行实例,具有独立的生命周期。镜像为容器提供了运行环境和基础结构,而容器则在镜像的基础上实现了应用程序的运行和管理。

6. Docker 基本操作流程

6.1 创建容器

通过上面,我们知道,容器时基于镜像创建的,因此,根据本地有没有镜像,创建容器的方式可以有这样三种,若本地有可用镜像,则可通过镜像直接创建容器;若本地没有可用镜像,则需先拉取镜像,在通过相应操作创建容器;若需要基于某个镜像自定义镜像并创建容器,则需先拉取基础镜像,然后定义Dockerfile文件,基于基础镜像创建自定义镜像,并通过相应操作创建容器。具体操作过程如下:

6.1.1 直接创建容器

通过 docker run​ 直接创建一个容器。

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  • OPTIONS:可选参数,用于配置容器的各种属性,比如指定容器名称、端口映射、卷挂载等。
  • IMAGE:指定用于创建容器的镜像名称或镜像 ID。
  • COMMANDARG:可选,用于在容器启动时运行的命令及其参数。

示例

  1. 从官方镜像创建一个简单的容器

    docker run -d nginx
    
  2. 指定容器名称

    docker run --name my-container -d nginx
    
  3. 端口映射

    docker run -p 8080:80 -d nginx
    
  4. 挂载卷

    docker run -v /host/path:/container/path -d nginx
    
  5. 设置环境变量

    docker run -e VAR_NAME=value -d my-image
    
6.1.2 通过镜像创建容器
6.1.2.1 拉取镜像
docker pull [镜像名称]:[标签]

示例

docker pull nginx:latest
6.1.2.2 使用镜像创建容器
docker run [选项] [镜像名称]:[标签]

以下是一些常用的命令选项:

  • -d​:后台运行容器。如果不加 -d​,容器会在前台运行,直到退出。

  • --name​:为容器指定一个名称,方便后续管理。

  • -p​:端口映射,将容器内部的端口映射到宿主机的端口。

    • 格式:宿主机端口:容器内部端口​。
  • -v​:挂载卷,将宿主机的目录或文件挂载到容器内部。

    • 格式:宿主机路径:容器内部路径​。
  • --rm​:容器退出时自动删除容器,避免占用空间。

  • -e​:设置环境变量。

  • --network​:指定容器使用的网络。

示例

docker run -d --name my-nginx -p 8080:80 nginx:latest
  • -d​:后台运行。
  • --name my-nginx​:容器名称为 my-nginx​。
  • -p 8080:80​:将容器内部的 80 端口映射到宿主机的 8080 端口。
  • nginx:latest​:使用 nginx​ 镜像的 latest​ 版本。
6.1.3 通过 Dockerfile 构建自定义镜像并创建容器
  1. 拉取基础镜像

    docker pull python:3.9-slim
    
  2. 编写 Dockerfile

    FROM python:3.9-slim
    WORKDIR /app
    COPY . /app
    RUN pip install -r requirements.txt
    CMD ["python", "app.py"]
    
  3. 构建自定义镜像

    docker build -t my-custom-python-app:v1 .
    
  4. 基于自定义镜像创建容器

    docker run -d --name my-python-container my-custom-python-app:v1
    

6.2 容器基本操作

6.2.1 启动容器
docker start [容器名称或ID]

示例

docker start my-container
6.2.2 进入容器
docker exec -it [容器名称或ID] /bin/bash

常见命令选型说明:

  • -it​:这两个参数组合起来表示以交互模式进入容器。

    • -i​:表示交互式,保持 STDIN 打开。
    • -t​:分配一个伪终端。
  • [容器名称或ID] ​ :指定要进入的容器的名称或 ID。

  • /bin/bash​:指定在容器内部启动的命令,通常是 /bin/bash​ 或 /bin/sh​,用于进入 shell。

示例

docker exec -it my-container /bin/bash
6.2.3 退出容器
docker stop [容器名称或ID]

示例

docker stop my-container

7. 模型部署与 Docker

7.1 基于 Dockerfile 构建环境

基于Dockerfile创建虚拟开发环境的基本流程如下:

# 拉取依赖镜像
docker pull nvidia/cuda:12.3.2-cudnn9-devel-ubuntu22.04
# 基于 Dockerfile 文件构建新镜像
docker build -t cuda-cudnn:12.3.2 .
# 基于镜像生成对应容器
docker run --name cuda-12.3.2 -it --gpus all cuda-cudnn:12.3.2
# 检查容器是否生成
docker ps -a
# 启动容器
docker start cuda-12.3.2
# 进入容器
docker exec -it cuda-12.3.2 /bin/bash
# 停止容器
docker stop cuda-12.3.2

7.2 基于 Dockerfile 构建环境,并通过挂载方式实现本地开发容器环境项目

我们创建容器的目的是,在容器中进行项目的开发和测试,因此,在上述容器创建过程的基础上,还需通过挂载的方式,将本地项目映射到容器中去,这样,就可以实现在宿主机(主机中开发),在容器中编译和测试了。具体流程如下:

先在本地创建项目,项目中除了项目代码外,还需包括Dockerfile文件

cuda_test/
├── Dockerfile
├── print_index.cu
└── CMakeLists.txt

在这里插入图片描述

进入到项目目录下,通过docker创建项目环境。

  1. 拉取镜像

    docker pull nvidia/cuda:12.3.2-cudnn9-devel-ubuntu22.04
    
  2. 构建新镜像

    docker build -t cuda-cudnn:12.3.2 .
    
  3. 生成容器并挂载本地路径

    docker run --name cuda_test -it --gpus all -v /mnt/e/Code/Cuda_test:/workspace cuda-cudnn:12.3.2 /bin/bash
    

在这里插入图片描述

通过上述操作完成了项目环境的创建,然后进入宿主机进行项目开发,完成编码后,启动镜像进行编译。

#启动容器(若容器停止执行)
docker start cuda_test
#进入容器
docker exec -it cuda_test /bin/bash
#进行编译
ls
mkdir build && cd build
cmake ..
make 
./you_project

在这里插入图片描述

7.3 挂载到容器的项目在容器中进行 Debug

我们在开发的过程中还需要deubg代码,下面是通过vscode配置deocker容器debug的过程。

  1. 创建可进行 Debug 的容器

    docker run --name cuda_test -it --gpus all --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v /mnt/e/Code/Cuda_test:/workspace cuda-cudnn:12.3.2 /bin/bash
    
  2. 在本地项目中创建 VSCode 的 launch.json文件

    {"version": "0.2.0","configurations": [{"name": "Docker_debug","type": "cppdbg","request": "launch","program": "/workspace/you_path",	//可执行文件路径"args": [],"stopAtEntry": false,"cwd": "/workspace/you_path",	//命令行路径"environment": [],"externalConsole": false,"sourceFileMap": {"/workspace/you_path": "${workspaceFolder}/you_path" //源码在容器中和工作空间的路径对应关系},"pipeTransport": {"pipeProgram": "docker","pipeArgs": ["exec","-i","container_name",	//容器名称"/usr/bin/gdb","--interpreter=mi"],"debuggerPath": "/usr/bin/gdb","pipeCwd": "${workspaceFolder}"},"MIMode": "gdb","setupCommands": [{"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": true}]}]
    }
    

配置好launch.json文件后,即可在vscode中进行debug。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8. 参考资料

  • Docker部署深度学习模型 - ZeroZeroSeven - 博客园
  • 轻松构建:Qt应用与Docker容器完美结合的界面攻略 - 云原生实践
  • 从零开始使用vs code连接Linux系统下的docker容器_vscode连接容器的方法-CSDN博客
  • 手把手教你在windows上用docker和vscode配置环境 - MiniOB
  • (多种方法)VSCode调试docker容器里的程序_vscode docker-CSDN博客

相关文章:

Docker教程(喂饭级!)

如果你有跨平台开发的需求,或者对每次在新机器上部署项目感到头疼,那么 Docker 是你的理想选择!Docker 通过容器化技术将应用程序与其运行环境隔离,实现快速部署和跨平台支持,极大地简化了开发和部署流程。本文详细介绍…...

HTML:自闭合标签简单介绍

1. 什么是自结束标签&#xff1f; 定义&#xff1a;自结束标签&#xff08;Self-closing Tag&#xff09;是指 不需要单独结束标签 的 HTML 标签&#xff0c;它们通过自身的语法结构闭合。语法形式&#xff1a; 在 HTML5 中&#xff1a;直接写作 <tag>&#xff0c;例如 …...

【和鲸社区获奖作品】内容平台数据分析报告

1.项目背景与目标 在社交和内容分享领域&#xff0c;某APP凭借笔记、视频等丰富的内容形式&#xff0c;逐渐吸引了大量用户。作为一个旨在提升用户互动和平台流量的分享平台&#xff0c;推荐算法成为其核心功能&#xff0c;通过精准推送内容&#xff0c;努力实现更高的点击率和…...

GitCode 助力 python-office:开启 Python 自动化办公新生态

项目仓库&#xff1a;https://gitcode.com/CoderWanFeng1/python-office 源于需求洞察&#xff0c;打造 Python 办公神器 项目作者程序员晚枫在运营拥有 14w 粉丝的 B 站账号 “Python 自动化办公社区” 时&#xff0c;敏锐察觉到非程序员群体对 Python 学习的强烈需求。在数字…...

超参数、网格搜索

一、超参数 超参数是在模型训练之前设置的&#xff0c;它们决定了训练过程的设置和模型的结构&#xff0c;因此被称为“超参数”。以KNN为例&#xff1a; 二、网格搜索 交叉验证&#xff08;Cross-Validation&#xff09;是在机器学习建立模型和验证模型参数时常用的方法&…...

or-tools编译命令自用备注

cmake .. -G "Visual Studio 17 2022" -A Win32 //vs2022 cmake .. -G "Visual Studio 15 2017" -A Win32 //vs2017 -DBUILD_DEPSON //联网下载 -DCMAKE_INSTALL_PREFIXinstall //带安装命令 -DCMAKE_CXX_FLAGS"/u…...

vulnhub靶场【kioptrix-4】靶机

前言 靶机&#xff1a;kioptrix-4&#xff0c;IP地址为192.168.1.75&#xff0c;后期IP地址为192.168.10.8 攻击&#xff1a;kali&#xff0c;IP地址为192.168.1.16&#xff0c;后期IP地址为192.168.10.6 都采用VMware虚拟机&#xff0c;网卡为桥接模式 这里的靶机&#xf…...

readline模块详解!!【Node.js】

‌“书到用时方恨少&#xff0c;事非经过不知难。”‌ —— 陆游 目录 ‌readline 是什么&#xff1f;‌基本用法&#xff1a;‌创建 Interface 类&#xff1a;核心流程‌&#xff1a; ‌Interface 类的关键事件&#xff1a;line&#xff1a;close&#xff1a;pause&#xff1a…...

软件测试的七大误区

随着软件测试对提高软件质量重要性的不断提高&#xff0c;软件测试也不断受到重视。但是&#xff0c;国内软件测试过程的不规范&#xff0c;重视开发和轻视测试的现象依旧存在。因此&#xff0c;对于软件测试的重要性、测试方法和测试过程等方面都存在很多不恰当的认识&#xf…...

【欢迎来到Git世界】Github入门

241227 241227 241227 Hello World 参考&#xff1a;Hello World - GitHub 文档. 1.创建存储库 r e p o s i t o r y repository repository&#xff08;含README.md&#xff09; 仓库名需与用户名一致。 选择公共。 选择使用Readme初始化此仓库。 2.何时用分支&#xf…...

解决 Ubuntu 24.04 虚拟机内无法ping 通 Hostname 的问题

问题背景 在 VMware 或 VirtualBox 中安装 Ubuntu 24.04 虚拟机时&#xff0c;遇到无法通过主机名&#xff08;Hostname&#xff09;进行网络通信的问题。例如&#xff0c;将虚拟机的主机名设置为 001&#xff0c;执行 ping 001 时返回 ping 0.0.0.1 并超时。此问题通常由 主机…...

给小白的oracle优化工具,了解一下

有时懒得分析或语句太长&#xff0c;可以尝试用oracle的dbms_sqldiag包进行sql优化&#xff0c; --How To Use DBMS_SQLDIAG To Diagnose Query Performance Issues (Doc ID 1386802.1) --诊断SQL 性能 SET ECHO ON SET LINESIZE 132 SET PAGESIZE 999 SET LONG 999999 SET SER…...

CT技术变迁史——CT是如何诞生的?

第一代CT(平移-旋转) X线球管为固定阳极,发射X线为直线笔形束,一个探测器,采用直线和旋转扫描相结合,即直线扫描后,旋转1次,再行直线扫描,旋转180完成一层面扫描,扫描时间3~6分钟。矩阵象素256256或320320。仅用于颅脑检查。 第二代CT (平移-旋转) 与第一代无质…...

【PHP脚本语言详解】为什么直接访问PHP文件会显示空白?从错误示例到正确执行!

前言 作为一名开发者&#xff0c;你是否曾经遇到过这样的问题&#xff1a;写了一个PHP脚本&#xff0c;放到服务器根目录后&#xff0c;直接通过file:///路径访问却显示空白页面&#xff1f;而换成http://localhost却能正常显示&#xff1f;这篇文章将带你深入理解PHP脚本语言…...

软件工程---需求工程

软件需求工程师发现、获取、组织、分析、编写和管理需求的系统方法&#xff0c;以使客户和项目组之间达成共识。 需求工程共包含五个步骤&#xff1a; 需求获取&#xff1a;对业务问题分析&#xff0c;与项目干系人沟通&#xff0c;以理解系统的目标、期望和约束&#xff0c;…...

spring注解开发(Spring整合MyBatis——Mapper代理开发模式、(Spring、MyBatis、Jdbc)配置类)(6)

目录 一、纯MyBatis独立开发程序。 &#xff08;1&#xff09;数据库与数据表。 &#xff08;2&#xff09;实体类。 &#xff08;3&#xff09;dao层接口。&#xff08;Mapper代理模式、无SQL映射文件——注解配置映射关系&#xff09; &#xff08;4&#xff09;MyBatis核心配…...

散户情绪周期模型(情绪影响操作)

目录 一、个股上涨阶段情绪演化二、个股下跌阶段情绪演化三、底部震荡阶段情绪演化四、情绪观察与操作工具箱1. 情绪自测量表&#xff08;每日收盘后记录&#xff09;2. 情绪-指标对照表 五、高阶情绪管理技巧1.认知重构训练2.生理指标监控&#xff08;需配合智能手表&#xff…...

计算机毕业设计SpringBoot+Vue.js网上商城系统(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

自动化测试无法启动(java.net.SocketException)

在运行测试代码,对浏览器进行自动化操作时,遇到了以下问题,添加依赖,编写了测试代码,但是程序无法运行 这个有两种原因(我使用的是谷歌浏览器): 网络问题: 因为需要从GitHub上下载对应包,所以有时候可能会出现网络问题,这个时候可以打开VPN之后,重新对程序进行启动 浏览器版本…...

智能机器人加速进化:AI大模型与传感器的双重buff加成

Deepseek不仅可以在手机里为你解答现在的困惑、占卜未来的可能&#xff0c;也将成为你的贴心生活帮手&#xff01; 2月21日&#xff0c;追觅科技旗下Dreamehome APP正式接入DeepSeek-R1大模型&#xff0c;2月24日发布的追觅S50系列扫地机器人也成为市面上首批搭载DeepSeek-R1的…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

linux arm系统烧录

1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 &#xff08;忘了有没有这步了 估计有&#xff09; 刷机程序 和 镜像 就不提供了。要刷的时…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

日常一水C

多态 言简意赅&#xff1a;就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过&#xff0c;当子类和父类的函数名相同时&#xff0c;会隐藏父类的同名函数转而调用子类的同名函数&#xff0c;如果要调用父类的同名函数&#xff0c;那么就需要对父类进行引用&#…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

云原生周刊:k0s 成为 CNCF 沙箱项目

开源项目推荐 HAMi HAMi&#xff08;原名 k8s‑vGPU‑scheduler&#xff09;是一款 CNCF Sandbox 级别的开源 K8s 中间件&#xff0c;通过虚拟化 GPU/NPU 等异构设备并支持内存、计算核心时间片隔离及共享调度&#xff0c;为容器提供统一接口&#xff0c;实现细粒度资源配额…...