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

Docker 使用基础(2)—镜像

                                        🎬慕斯主页:修仙—别有洞天

                                       ♈️今日夜电波:秒針を噛む—ずっと真夜中でいいのに。

                                                           0:34━━━━━━️💟──────── 4:20
                                                                🔄   ◀️   ⏸   ▶️    ☰  

                                 💗关注👍点赞🙌收藏您的每一次鼓励都是对我莫大的支持😍


 目录

首先理解几个概念

Docker 镜像(image)是什么?

为什么需要镜像 ?

镜像命令详解

docker rm

docker save

docker load

docker history

docker image prun

docker import


首先理解几个概念

Docker 镜像(image)是什么?

        Docker image 本质上是一个 read-only 只读文件, 这个文件包含了文件系统、源码、库文件、依赖、工具等一些运行 application 所必须的文件。

我们可以把 Docker image 理解成一个模板, 可以通过这个模板实例化出来很多容器。

image 里面是一层层文件系统 Union FS。联合文件系统,可以将几层目录挂载到一起,形成一个虚拟文件系统。

每一层文件系统我们叫做一层 layer,联合文件系统可以对每一层文件系统设置三种权限,只读(readonly)、读写(readwrite)和写出(whiteout-able),但是 docker镜像中每一层文件系统都是只读的。

构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做一层的修改,增加了一层文件系统。一层层往上叠加,上层的修改会覆盖底层该位置的可见性,这也很容易理解,就像上层把底层遮住了一样。当你使用的时候,你只会看到一个完全的整体,你不知道里面有几层,也不清楚每一层所做的修改是什么。

镜像与容器的理解:可以理解为类和对象的关系。镜像相当于我们 java 或者 C++中的类,相当于一个模板,可以很方便的构建出来不同的对象。

下面看看官方给出的Docker 架构,可以结合此图来理解镜像的概念:

为什么需要镜像 ?

Docker镜像的重要性在于它们为软件开发和部署提供了几个关键优势,以下是几个主要原因:

  1. 环境一致性:Docker镜像确保了无论在哪个环境中运行,从开发到测试再到生产,软件的运行环境都是一致的。这消除了由于环境差异导致的问题,即所谓的“在我的机器上工作”现象。
  2. 可移植性:镜像包含了软件运行所需的一切,包括代码、库、环境变量和其他依赖项。这使得镜像可以轻松地在不同的主机和平台上运行,无需担心底层系统差异。
  3. 隔离性:每个Docker容器都有自己的文件系统和网络栈,这意味着容器间不会相互干扰,提供了很好的隔离性,降低了应用程序之间的冲突风险。
  4. 可复现性:一旦创建了Docker镜像,你可以在任何地方启动相同配置的容器。这不仅提高了开发效率,也确保了部署的一致性和可预测性。
  5. 快速启动和停止:基于镜像启动容器通常比启动传统虚拟机更快,因为容器共享宿主机的内核,减少了启动时间和资源消耗。
  6. 资源优化:Docker镜像采用了分层存储机制,这意味着多个容器可以共享相同的镜像层,节省了磁盘空间和网络带宽。
  7. 自动化部署:Docker镜像可以很容易地集成到持续集成/持续部署(CI/CD)管道中,自动化应用的构建、测试和部署流程。
  8. 安全性:镜像可以被扫描以检测潜在的安全漏洞,确保只有无害的镜像才被部署到生产环境中。此外,镜像可以被签名,以验证其来源和完整性。
  9. 版本管理和更新:Docker镜像可以被打上标签,方便跟踪和管理不同版本的应用程序和环境,使更新和回滚变得更加简单。
  10. 服务的可伸缩性:镜像可以用于快速创建多个容器实例,以满足增加的负载需求,这是云原生应用和服务伸缩性的基础。

        总而言之,docker 最大的贡献就是定义了容器镜像的分层的存储格式, docker 镜像技术的基础是联合文件系统(UnionFS),其文件系统是分层的。这样既可以充分利用共享层,又可以减少存储空间占用。docker 镜像提供了一种打包应用程序和预配置服务器环境的便捷方式,可以很方便的将其用于个人用途或与其他 Docker 用户公开共享。

 

镜像命令详解

        前面的文章已经解析过了最常见的images、tag、pull、push、image inspect了,这里不多解析。至于build在理解完后续知识再详细介绍。

docker rm

docker rmi 命令用于从本地删除一个或多个 Docker 镜像。当不再需要某个镜像,或者想要清理磁盘空间时,这个命令就非常有用。下面是对 docker rmi 命令的详细解析:

命令语法

docker rmi [OPTIONS] IMAGE [IMAGE...]
  • OPTIONS 可以是以下选项之一或多个:
    • -f, --force:强制删除正在被容器使用的镜像。通常情况下,如果镜像被正在运行的容器使用,则无法删除。
    • --no-prune:默认情况下,Docker会尝试删除所有未被其他镜像引用的中间镜像层。使用此选项可以阻止这种行为,只删除指定的镜像。
  • IMAGE 是要删除的镜像的名称或ID。可以指定一个或多个镜像,以空格分隔。

注意事项

  • 在删除镜像之前,确保没有容器正在使用这些镜像。如果不希望手动停止容器,可以使用 -f 选项。
  • 如果镜像被多个容器使用,可能需要先使用 docker stopdocker rm 命令停止并删除容器,然后才能删除镜像。

        针对前面两点的例子:通常我们run了一个镜像会生成对应的容器,而这些容器可能会存在很多个,而此时我们如果要删除镜像,则需要先把对应的容器给全部先删除掉才能删除镜像。那你这时又会问了,不是有个-f选项吗?为什么不直接强制删除呢?这种方式是不推荐的,一般的流程则是前面所提到的。

  • 当删除镜像时,Docker 会同时删除所有未被引用的镜像层,除非使用了 --no-prune 选项。

例子

docker save

    docker save 命令用于将一个或多个 Docker 镜像保存为一个 tar 格式的存档文件。这个功能对于需要在不同的 Docker 环境之间迁移镜像,或者备份镜像来说是非常有用的。下面是 docker save 命令的详细解释:

命令语法

docker save [OPTIONS] IMAGE [IMAGE...]
  • -o, --output:用于指定输出的 tar 文件的路径和文件名。如果没有提供这个选项,docker save 命令会将输出重定向到标准输出(stdout),通常这会直接输出到控制台,所以一般在实际使用中会配合 -o 选项使用。
  • IMAGE:你要保存的镜像的名称或 ID。可以指定一个或多个镜像,多个镜像之间用空格分隔。

注意事项

  • 当你使用 docker save 命令保存镜像时,Docker 会递归地保存镜像的所有层,这意味着如果多个镜像共享某些层,那么这些层只会被保存一次,即使它们属于不同的镜像。
  • 保存的 tar 文件包含了镜像的元数据以及所有相关的层数据,因此文件可能会相当大,具体大小取决于镜像的复杂度和包含的文件数量。
  • 保存的 tar 文件可以使用 docker load 命令恢复,将镜像重新加载到 Docker 中。

例子

docker load

    docker load 命令用于从一个 tar 格式的存档文件中恢复 Docker 镜像。这个命令与 docker save 命令是互补的,后者用于将镜像保存为 tar 文件,而前者则是用来将 tar 文件中的镜像数据加载回 Docker 环境中。下面详细介绍 docker load 命令的用法:

命令语法

docker load [OPTIONS]
  • --input, -i:指定要加载的 tar 文件的路径。如果没有提供此选项,docker load 命令会从标准输入(stdin)中读取数据。
  • --quiet, -q:精简输出信息。

注意事项

  • 加载的镜像必须是使用 docker save 命令导出的格式,否则可能无法成功加载。
  • docker load 命令会检查 tar 文件中的镜像数据,并重建镜像的元数据和层。这个过程可能需要一些时间,具体取决于镜像的大小和复杂度。
  • 如果 tar 文件包含多个镜像,docker load 命令会一次性加载所有这些镜像。
  • 加载镜像后,可以通过 docker images 命令查看已加载的镜像列表。

例子

 从 tar 文件加载镜像

docker load --input test.tar

这条命令将从 my_image.tar 文件中加载镜像到当前的 Docker 环境中。

  1. 从标准输入加载镜像:当从远程位置获取镜像数据或者使用管道传递数据时,可以省略 --input 选项,直接使用标准输入:
cat my_image.tar | docker load

或者从远程下载后立即加载:

curl -L https://example.com/my_image.tar | docker load

docker history

    docker history 命令用于显示 Docker 镜像的构建历史,包括每一层的详细信息。这对于理解和调试镜像的构建过程特别有帮助,可以查看每一层是由什么命令创建的,以及各层的大小和其他元数据。下面是关于 docker history 命令的详细说明:

命令语法


docker history [OPTIONS] IMAGE
  • --format:指定输出格式。可以使用 Go 的模板语言来定制输出的格式。
  • --no-trunc:如果设置,命令将不会截断长输出,而是显示完整的值。
  • --quiet, -q:只输出每一层的 ID。
  • IMAGE:要查询历史的镜像的名称或 ID。

输出格式

默认情况下,docker history 命令将输出以下信息:

  • ID:每一层的唯一标识符。
  • CREATED:层创建的时间(以天数表示,后面跟着时间戳)。
  • CREATED BY:创建层的 Dockerfile 指令。
  • SIZE:层的大小(以字节为单位)。
  • COMMENT:附加的注释,通常是父镜像的 ID。

注意事项

  • 镜像历史中的每一层通常对应 Dockerfile 中的一个指令,但某些指令如 RUN 可能会在单个层中执行多个命令。
  • 当使用 --format 选项时,可以使用的字段包括 .ID, .Created, .CreatedBy, .Size, 和 .Comment
  • 有时,镜像的某些层可能看起来没有大小,这是因为它们使用了上一层的缓存,或者是在同一层中做了删除和添加文件的操作,抵消了大小变化。

使用示例

 查看镜像历史

docker history ubuntu:latest

这将列出 ubuntu:latest 镜像的构建历史。

  只显示层 ID

docker history -q ubuntu:latest

这个命令将只输出每一层的 ID,常用于脚本中进一步处理。

 使用自定义格式

docker history --format '{{.ID}} - {{.CreatedBy}}' ubuntu:latest

通过自定义格式,可以按照个人需求调整输出的信息。

docker image prun

    docker image prune 命令用于清理 Docker 环境中不再需要的镜像,特别是那些没有被任何容器引用的“悬空”(dangling)镜像。这有助于释放磁盘空间,保持 Docker 系统的整洁。下面是关于 docker image prune 命令的详细解析:

命令语法

docker image prune [OPTIONS]
  • -a, --all:删除所有未被使用的镜像,而不仅仅是悬空的镜像。悬空镜像是指没有被任何容器关联且没有被赋予任何标签的镜像。
  • --filter, -f:使用过滤器来选择要删除的镜像。例如,--filter until=<timestamp> 可以用来删除在指定时间之前创建的镜像。
  • --force, -f:强制执行操作,不询问确认。
  • --help:显示帮助信息。

注意事项

  • 在执行 docker image prune 命令之前,最好确认哪些镜像是可以安全删除的,尤其是使用 -a 选项时。可以先使用 docker images 命令查看所有镜像的列表。
  • 删除镜像时,Docker 会尝试释放与这些镜像关联的未被引用的镜像层。这有助于进一步节省磁盘空间。
  • 如果有容器正在使用某镜像,即使使用 -a 选项,该镜像也不会被删除。

使用示例

 仅删除悬空镜像

docker image prune

这个命令将删除所有悬空的镜像。

 删除所有未被使用的镜像

docker image prune -a

使用 -a 选项将会删除所有未被任何容器引用的镜像,不仅仅是悬空的。

 强制删除所有未被使用的镜像

docker image prune -a --force

这个命令将不询问确认,直接删除所有未被使用的镜像。

 根据时间过滤并删除镜像

docker image prune -a --filter "until=2023-01-01"

这个命令将删除所有在2023年1月1日之前创建的未被使用的镜像。

docker import

    docker import 命令用于从一个归档文件或远程 URL 创建一个新的 Docker 镜像。这个命令特别有用,当你需要将一个文件系统快照或一个预先构建的文件结构转换成 Docker 镜像时。与 docker build 命令不同,docker import 不使用 Dockerfile,而是直接从提供的文件或目录结构中创建镜像。

命令语法

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]
  • file: 本地文件系统上的归档文件路径,可以是一个 .tar 或者压缩过的 .tar.gz, .tgz, .bzip, .tar.xz, 或 .txz 文件。
  • URL: 一个远程 URL,通常指向一个可通过 HTTP(S) 访问的归档文件。
  • -: 表示从标准输入(stdin)读取归档数据,这通常用于管道操作。
  • REPOSITORY[:TAG]: 指定新创建的镜像的仓库名称和可选的标签。如果省略了标签,将使用默认的 latest 标签。
  • -c--change: 用于在创建镜像时应用 Dockerfile 指令,例如改变工作目录、设置环境变量等。这可以通过逗号分隔的列表形式提供,每个项看起来类似于 Dockerfile 的指令,例如 WORKDIR=/path,ENV VAR=value
  • -m--message: 设置提交信息,这将在镜像历史中显示。

注意事项

  • docker import 命令不支持多阶段构建或构建缓存,因为它不使用 Dockerfile。
  • 如果你从一个 URL 导入数据,确保该 URL 可以访问并且提供了一个有效的归档文件。
  • 使用 -c--change 选项时,你应该熟悉 Dockerfile 的语法,因为这里使用的语法非常相似。

通过 docker import,你可以方便地将现有的文件系统快照或归档文件转化为 Docker 镜像,便于后续的部署和分发。

示例

假设你有一个名为 myapp.tar.gz 的归档文件,其中包含了你的应用程序及其依赖,你可以使用以下命令将其转换为 Docker 镜像:

docker import myapp.tar.gz myimage:latest

这将创建一个名为 myimage 并带有 latest 标签的新镜像。

如果你想从一个远程 URL 导入一个归档文件,可以这样做:

docker import https://example.com/downloads/myapp.tar.gz myimage:latest

如果你想要从标准输入读取数据,可以使用管道操作:

cat myapp.tar.gz | docker import - myimage:latest

 


                     感谢你耐心的看到这里ღ( ´・ᴗ・` )比心,如有哪里有错误请踢一脚作者o(╥﹏╥)o! 

                                       

                                                                        给个三连再走嘛~  

相关文章:

Docker 使用基础(2)—镜像

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;秒針を噛む—ずっと真夜中でいいのに。 0:34━━━━━━️&#x1f49f;──────── 4:20 &#x1f504; ◀️ ⏸ …...

Docker学习笔记(三)Dockerfile

一、什么是Dockerfile Dockerfile 是一个用于自动化构建 Docker 镜像的文本文件&#xff0c;其中包含了从一个基础镜像开始&#xff0c;到最终形成所需定制镜像的所有指令集。这个文件中的每一条指令都对应着构建镜像过程中的一个步骤或一层&#xff0c;指导 Docker 如何安装软…...

学懂C#编程:C# 索引器(Indexer)的概念及用法

C#中的索引器&#xff08;Indexer&#xff09;是一种特殊的成员&#xff0c;它允许类或结构的实例像数组那样通过索引来访问其内部的数据。索引器提供了一种灵活的方式来暴露集合或数组类型的内部数据&#xff0c;使得客户端代码可以使用类似于数组下标的语法来访问类的成员&am…...

汇川CodeSysPLC教程03-2-14 与HMI通信

硬件连接 PLC与HMI连接采用何种连接方式&#xff0c;通常是参考双方支持哪些接口。PLC&#xff08;可编程逻辑控制器&#xff09;与HMI&#xff08;人机界面&#xff09;之间的通讯方式主要有以下几种&#xff1a; 串行通讯&#xff08;Serial Communication&#xff09;&…...

centos部署jar包

第一步&#xff1a; 将IDEA中的项目打包为jar,将这个jar文件放到centos服务器上的目录里&#xff0c;我在opt新建api目录&#xff0c;将jar文件放入&#xff0c;如下图&#xff1a; 第二步&#xff1a; 将需要读取的配置文件也放入此目录(其他目录也可以&#xff0c;和脚本中…...

CSS相对定位和绝对定位的区别

CSS相对定位和绝对定位的区别 区别1&#xff1a;相对的对象不同 相对定位是相对于自己绝对定位是相对于离自己最近的有定位的祖先 区别2:是否会脱离文档流 相对定位不会脱离文档流&#xff0c;不会影响其他元素的位置绝对定位会脱离文档流&#xff0c;会影响其他元素的布局 代…...

SpringCloud之nacos共享配置文件实现多数据源灵活切换

目录 前言 1.引入Springboot相关的aop切面依赖 2.创建自定义注解DataSourceKey 3.创建对ThreadLocal类 4.创建aop切面 5.创建动态数据源类 6.创建多数据库连接配置类 7.关键代码讲解 8.nacos主要配置 前言 通过Spring AOP&#xff08;面向切面编程&#xff09;的功能来动…...

原生小程序生成二维码方法之一

效果图&#xff1a; 第一步&#xff1a;下载对应的包并构建&#xff08;工具---》构建npm&#xff09; npm install weapp-qrcode --save 第二步&#xff1a;在wxml页面声明canvas <canvas style"width: 200px; height: 200px;margin:0 auto;" canvas-id"myQ…...

Kubernetes k8s Pod容器 探针 健康探测

目录 Pod容器健康探测 为什么要对容器做探测&#xff1f; 启动探测startupprobe 存活性探测livenessProbe 就绪性探测readinessProbe ReadinessProbe LivenessProbe startupProbe配合使用示例一般程序中需要设置三种探针结合使用&#xff0c;并且也要结合实际情况&#xff…...

Conformal low power-2.电源感知等效性检查

电源感知等效性检查 ■ 第24页&#xff1a;电源感知等效性检查概述 ■ 第24页&#xff1a;启动低功耗&#xff08;等效性检查&#xff09;软件 ■ 第25页&#xff1a;电源感知等效性检查流程 ■ 第28页&#xff1a;电源感知等效性检查示例Do文件 电源感知等效性检查概述…...

【密码学】从有限状态自动机到密钥流生成器

本文是对流密码内容的拓展&#xff0c;在流密码中种子密钥通过一个伪随机数生成器产生一个与明文等长的伪随机密钥流。而本文的内容就是在回答这样两个问题&#xff1a; 伪随机密钥流是如何生成的&#xff1f;流密码、流密钥生成器和有限状态自动机之间是什么关系&#xff1f;…...

3.相机标定原理及代码实现(opencv)

1.相机标定原理 相机参数的确定过程就叫做相机标定。 1.1 四大坐标系及关系 &#xff08;1&#xff09;像素坐标系&#xff08;单位&#xff1a;像素&#xff08;pixel&#xff09;&#xff09; 像素坐标系是指相机拍到的图片的坐标系&#xff0c;以图片的左上角为坐标原点&a…...

Centos7 安装Docker步骤及报错信息(不敢说最全,但是很全)

一、操作系统要求&#xff1a; 要安装Docker Engine&#xff0c;您需要CentOS 7及以上的维护版本。存档版本不受支持或测试。必须启用centos临时存储库。默认情况下&#xff0c;此存储库已启用&#xff0c;但如果已禁用&#xff0c;则需要重新启用它。建议使用overlay2存储驱动…...

【C语言】符号优先级详解

C语言符号优先级详细解析 在C语言中&#xff0c;不同的运算符具有不同的优先级和结合性&#xff0c;这决定了在表达式中运算符的计算顺序。理解这些优先级和结合性是正确编写和理解C语言程序的基础。本文将详细解析C语言中的符号优先级&#xff0c;包括各类运算符的优先级、结…...

天翼云高级运维工程师202407回忆题库 最新出炉

备考天翼云高级运维工程师 必须备考天翼云 之前觉得外企牛批 然后民企&#xff0c;拔地而起&#xff0c;民企也不错&#xff0c;工资高&#xff0c;有钱途 现在看来看去&#xff0c;还是国企好&#xff0c;体制内的&#xff0c;有保障&#xff0c;树大根深 有必要备考下天…...

在Python中什么是上下文管理器以及如何使用with语句来管理资源

什么是上下文管理器&#xff1f; 在Python中&#xff0c;上下文管理器&#xff08;Context Manager&#xff09;是一种支持with语句的协议&#xff0c;允许对象管理资源&#xff0c;如文件、线程锁的获取和释放、数据库连接等。上下文管理器负责资源的分配和释放&#xff0c;确…...

(四)、python程序--贪吃蛇游戏

一、绪论 贪吃蛇游戏。 已实现功能&#xff1a; 1、上下左右移动&#xff1b; 2、吃食物&#xff0c;随机生成食物&#xff1b; 3、碰撞检测&#xff0c;判断是否游戏结束。 二、代码分享 1、main.py import pygame import sys import food as c_food import snake as c…...

什么是DNS欺骗

DNS欺骗&#xff08;DNS Spoofing&#xff09;&#xff0c;也称为DNS缓存中毒&#xff08;DNS Cache Poisoning&#xff09;&#xff0c;是一种网络攻击形式&#xff0c;攻击者通过操纵DNS记录&#xff0c;将用户重定向到一个伪造的、恶意的网站。这些恶意网站可能看起来与用户…...

C++实现对结构体信息排序

思路解读&#xff1a; 定义结构体 Student: 结构体 Student 用来表示学生信息&#xff0c;包含两个成员变量&#xff1a;name&#xff08;学生姓名&#xff09;和 score&#xff08;学生分数&#xff09;。Student 结构体定义了一个构造函数&#xff0c;用于初始化 name 和 sco…...

[CTF]-PWN:House of Cat堆题型综合解析

原理&#xff1a; 调用顺序&#xff1a; exit->_IO_wfile_jumps->_IO_wfile_seekoff->_IO_switch_to_wget_mode _IO_wfile_seekoff源码&#xff1a; off64_t _IO_wfile_seekoff (FILE *fp, off64_t offset, int dir, int mode) {off64_t result;off64_t delta, new…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

【JVM】- 内存结构

引言 JVM&#xff1a;Java Virtual Machine 定义&#xff1a;Java虚拟机&#xff0c;Java二进制字节码的运行环境好处&#xff1a; 一次编写&#xff0c;到处运行自动内存管理&#xff0c;垃圾回收的功能数组下标越界检查&#xff08;会抛异常&#xff0c;不会覆盖到其他代码…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

10-Oracle 23 ai Vector Search 概述和参数

一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI&#xff0c;使用客户端或是内部自己搭建集成大模型的终端&#xff0c;加速与大型语言模型&#xff08;LLM&#xff09;的结合&#xff0c;同时使用检索增强生成&#xff08;Retrieval Augmented Generation &#…...