docker -v 到底和那个一样?type=volume还是type=bind的解释
逐行通俗详细的解释下这个代码“#!/usr/bin/env bash
#
# This script will automatically pull docker image from DockerHub, and start a daemon container to run the Qwen-Chat web-demo.IMAGE_NAME=qwenllm/qwen:2-cu121
QWEN_CHECKPOINT_PATH=/path/to/Qwen-Instruct
PORT=8901
CONTAINER_NAME=qwen2function usage() {echo '
Usage: bash docker/docker_web_demo.sh [-i IMAGE_NAME] -c [/path/to/Qwen-Instruct] [-n CONTAINER_NAME] [--port PORT]
'
}while [[ "$1" != "" ]]; docase $1 in-i | --image-name )shiftIMAGE_NAME=$1;;-c | --checkpoint )shiftQWEN_CHECKPOINT_PATH=$1;;-n | --container-name )shiftCONTAINER_NAME=$1;;--port )shiftPORT=$1;;-h | --help )usageexit 0;;* )echo "Unknown argument ${1}"exit 1;;esacshift
doneif [ ! -e ${QWEN_CHECKPOINT_PATH}/config.json ]; thenecho "Checkpoint config.json file not found in ${QWEN_CHECKPOINT_PATH}, exit."exit 1
fisudo docker pull ${IMAGE_NAME} || {echo "Pulling image ${IMAGE_NAME} failed, exit."exit 1
}sudo docker run --gpus all -d --restart always --name ${CONTAINER_NAME} \-v /var/run/docker.sock:/var/run/docker.sock -p ${PORT}:80 \--mount type=bind,source=${QWEN_CHECKPOINT_PATH},target=/data/shared/Qwen/Qwen-Instruct \-it ${IMAGE_NAME} \python web_demo.py --server-port 80 --server-name 0.0.0.0 -c /data/shared/Qwen/Qwen-Instruct/ && {echo "Successfully started web demo. Open 'http://localhost:${PORT}' to try!
Run \`docker logs ${CONTAINER_NAME}\` to check demo status.
Run \`docker rm -f ${CONTAINER_NAME}\` to stop and remove the demo."
}”
当然,以下是对该脚本代码的逐行解释:#!/usr/bin/env bash
这行是脚本的首行,称为“shebang”。它告诉系统这个脚本应该使用哪个解释器来执行,这里是使用bash。
#
# This script will automatically pull docker image from DockerHub, and start a daemon container to run the Qwen-Chat web-demo.
这些行是注释,用#开头。它们描述了脚本的功能,即从DockerHub拉取Docker镜像,并启动一个守护进程容器来运行Qwen-Chat的web演示。
IMAGE_NAME=qwenllm/qwen:2-cu121
QWEN_CHECKPOINT_PATH=/path/to/Qwen-Instruct
PORT=8901
CONTAINER_NAME=qwen2
这里定义了四个变量:IMAGE_NAME是Docker镜像的名称,QWEN_CHECKPOINT_PATH是Qwen-Instruct检查点的路径,PORT是映射到容器内部的端口,CONTAINER_NAME是容器的名称。
function usage() {echo '
Usage: bash docker/docker_web_demo.sh [-i IMAGE_NAME] -c [/path/to/Qwen-Instruct] [-n CONTAINER_NAME] [--port PORT]
'
}
这是一个名为usage的函数,它打印出脚本的用法说明。
while [[ "$1" != "" ]]; do
这是一个while循环,它将持续运行,直到没有更多的命令行参数(即$1为空)。case $1 in
开始一个case语句,用于匹配不同的命令行参数。-i | --image-name )shiftIMAGE_NAME=$1;;
如果命令行参数是-i或--image-name,则将下一个参数(通过shift移动到$1)赋值给IMAGE_NAME变量。-c | --checkpoint )shiftQWEN_CHECKPOINT_PATH=$1;;
类似地,如果参数是-c或--checkpoint,则更新QWEN_CHECKPOINT_PATH。-n | --container-name )shiftCONTAINER_NAME=$1;;
如果参数是-n或--container-name,则更新CONTAINER_NAME。--port )shiftPORT=$1;;
如果参数是--port,则更新PORT。-h | --help )usageexit 0;;
如果参数是-h或--help,则调用usage函数打印帮助信息,并退出脚本。* )echo "Unknown argument ${1}"exit 1;;
如果参数不匹配上述任何情况,则打印未知参数信息并退出。esacshift
done
结束case语句,并移动到下一个命令行参数。
if [ ! -e ${QWEN_CHECKPOINT_PATH}/config.json ]; thenecho "Checkpoint config.json file not found in ${QWEN_CHECKPOINT_PATH}, exit."exit 1
fi
检查config.json文件是否存在,如果不存在,则打印消息并退出。
sudo docker pull ${IMAGE_NAME} || {echo "Pulling image ${IMAGE_NAME} failed, exit."exit 1
}
使用sudo docker pull命令从DockerHub拉取指定的Docker镜像,如果失败则打印消息并退出。
sudo docker run --gpus all -d --restart always --name ${CONTAINER_NAME} \-v /var/run/docker.sock:/var/run/docker.sock -p ${PORT}:80 \--mount type=bind,source=${QWEN_CHECKPOINT_PATH},target=/data/shared/Qwen/Qwen-Instruct \-it ${IMAGE_NAME} \python web_demo.py --server-port 80 --server-name 0.0.0.0 -c /data/shared/Qwen/Qwen-Instruct/ && {echo "Successfully started web demo. Open 'http://localhost:${PORT}' to try!
Run \`docker logs ${CONTAINER_NAME}\` to check demo status.
Run \`docker rm -f ${CONTAINER_NAME}\` to stop and remove the demo."
}
使用sudo docker run命令启动一个新的Docker容器,映射端口、挂载卷,并运行web演示脚本。如果成功,则打印消息
用户_SMITHj
sudo docker run --gpus all -d --restart always --name ${CONTAINER_NAME} \-v /var/run/docker.sock:/var/run/docker.sock -p ${PORT}:80 \--mount type=bind,source=${QWEN_CHECKPOINT_PATH},target=/data/shared/Qwen/Qwen-Instruct \-it ${IMAGE_NAME} \python web_demo.py --server-port 80 --server-name 0.0.0.0 -c /data/shared/Qwen/Qwen-Instruct/ && {echo "Successfully started web demo. Open 'http://localhost:${PORT}' to try!
Run \`docker logs ${CONTAINER_NAME}\` to check demo status.
Run \`docker rm -f ${CONTAINER_NAME}\` to stop and remove the demo."
};以上语句每个参数都详细解释下
当然,以下是sudo docker run命令及其参数的详细解释:sudo docker run
docker run:这是Docker命令行工具的一个命令,用于启动一个新的容器实例。
--gpus all
--gpus all:此参数指示Docker运行时将所有可用的GPU设备暴露给容器。这意味着容器可以使用宿主机上的所有GPU资源。
-d
-d:此参数表示以守护进程(detached)模式运行容器,即容器将在后台运行,不占用当前终端。
--restart always
--restart always:设置容器的重启策略为“always”,这意味着如果容器退出,它将自动重新启动。
--name ${CONTAINER_NAME}
--name ${CONTAINER_NAME}:为容器设置一个名称,这里使用之前定义的变量CONTAINER_NAME。
-v /var/run/docker.sock:/var/run/docker.sock
-v /var/run/docker.sock:/var/run/docker.sock:将宿主机的Docker套接字文件挂载到容器内部,使得容器可以执行Docker命令。
-p ${PORT}:80
-p ${PORT}:80:将宿主机的端口映射到容器内部的端口。这里将宿主机的变量PORT指定的端口映射到容器的80端口。
--mount type=bind,source=${QWEN_CHECKPOINT_PATH},target=/data/shared/Qwen/Qwen-Instruct
--mount type=bind,source=${QWEN_CHECKPOINT_PATH},target=/data/shared/Qwen/Qwen-Instruct:使用bind挂载将宿主机的路径QWEN_CHECKPOINT_PATH挂载到容器内部的路径/data/shared/Qwen/Qwen-Instruct。
-it ${IMAGE_NAME}
-it:这是两个参数的简写,-i表示保持标准输入打开,-t表示分配一个伪终端。这两个参数通常一起使用,以提供一个交互式的shell环境。
${IMAGE_NAME}:指定要启动的容器使用的Docker镜像的名称,这里使用之前定义的变量IMAGE_NAME。
python web_demo.py --server-port 80 --server-name 0.0.0.0 -c /data/shared/Qwen/Qwen-Instruct/
python web_demo.py --server-port 80 --server-name 0.0.0.0 -c /data/shared/Qwen/Qwen-Instruct/:这是在容器内部运行的命令,使用Python解释器执行名为web_demo.py的脚本,并传递相应的参数来配置web演示服务。
&& {echo "Successfully started web demo. Open 'http://localhost:${PORT}' to try!
Run \`docker logs ${CONTAINER_NAME}\` to check demo status.
Run \`docker rm -f ${CONTAINER_NAME}\` to stop and remove the demo."
}
&&:这是一个逻辑与运算符,用于在docker run命令成功执行后执行后续的命令。
{ ... }:这是shell脚本中的代码块,包含要执行的命令。
echo "Successfully started web demo. Open 'http://localhost:${PORT}' to try! ...":如果容器启动成功,则打印出成功的消息,并提供了如何访问web演示、检查状态和停止/删除容器的指令。
用户_SMITHj
--mount type=bind,source=${QWEN_CHECKPOINT_PATH},target=/data/shared/Qwen/Qwen-Instruct
--mount type=bind,source=${QWEN_CHECKPOINT_PATH},target=/data/shared/Qwen/Qwen-Instruct:使用bind挂载将宿主机的路径QWEN_CHECKPOINT_PATH挂载到容器内部的路径/data/shared/Qwen/Qwen-Instruct。;上面这个不是很清晰和明白,请再详细解释描述下,展开通俗的说一说
当然,我会尽量以更通俗的方式解释--mount type=bind这个Docker命令参数。首先,想象一下你的电脑(宿主机)和Docker容器就像是两个独立的房间。每个房间都有自己的文件柜(文件系统),而且一般情况下,这两个房间的文件柜是分开的,互相看不到对方里面的文件。现在,假设你在电脑上的一个特定文件夹(比如C:\myfolder或/home/user/myfolder)里有一些重要的文件,你需要在Docker容器里使用这些文件。这就好比你的房间里有一份重要的文件,而你需要让另一个房间的人也能看到和使用这份文件。--mount type=bind就是用来实现这个目标的。它就像是一条特殊的传送带,可以将宿主机上的一个文件夹(源)直接“传送”到Docker容器里的一个特定位置(目标)。具体来说:type=bind:告诉Docker你想要使用的是“绑定挂载”类型。这是一种特殊的挂载方式,允许容器直接访问宿主机的文件系统。
source=${QWEN_CHECKPOINT_PATH}:这是你宿主机上的路径,也就是你想要“传送”的文件夹。在脚本中,这个路径是用变量QWEN_CHECKPOINT_PATH表示的,比如它可能指向/path/to/Qwen-Instruct。
target=/data/shared/Qwen/Qwen-Instruct:这是容器内的路径,也就是你想要把宿主机的文件夹“传送”到的地方。在容器内部,当你访问/data/shared/Qwen/Qwen-Instruct这个路径时,实际上你看到的是宿主机上QWEN_CHECKPOINT_PATH这个路径下的文件。
所以,当你运行这个Docker命令时,宿主机上的QWEN_CHECKPOINT_PATH文件夹就像被“复制”到了容器内的/data/shared/Qwen/Qwen-Instruct位置。但实际上,并没有真正的复制发生,这只是两个位置之间的映射。你在宿主机上对这个文件夹所做的任何更改都会立即反映到容器内,反之亦然。这种挂载方式在需要从宿主机向容器传递数据,或者需要容器访问宿主机上的文件时非常有用。但需要注意的是,使用绑定挂载时要小心,因为它可能会带来安全风险,因为它允许容器直接访问宿主机的文件系统。用户_SMITHj
这个指令和-v是不是一样的意思?
是的,--mount type=bind和-v或--volume在Docker中基本上是完成相同任务的两种不同语法形式。它们都用于将宿主机的文件或目录挂载到容器中。以下是两者之间的对比:-v 或 --volume:这是Docker的传统方式来指定挂载卷。例如:
-v /path/on/host:/path/in/container
--mount:这是Docker 17.06及以上版本引入的新语法,提供了一种更明确和灵活的方式来指定挂载选项。例如:
--mount type=bind,source=/path/on/host,target=/path/in/container
尽管它们在功能上相似,但--mount语法提供了更多的灵活性,因为它允许你指定更多的挂载类型和选项。例如,你可以使用--mount来指定卷驱动程序选项,这在-v语法中是不容易做到的。下面是两个语法形式的一个简单对比:使用 -v 或 --volume:docker run -d -v /path/on/host:/path/in/container myimage
使用 --mount:docker run -d --mount type=bind,source=/path/on/host,target=/path/in/container myimage
在这两个例子中,/path/on/host是宿主机的路径,/path/in/container是容器内的路径。myimage是你要运行的Docker镜像。总的来说,如果你使用的是较新版本的Docker,并且需要更复杂的挂载选项,--mount可能是一个更好的选择。对于简单的挂载,-v仍然是一个有效的选择,并且由于它更简洁,可能在某些情况下更受欢迎。用户_SMITHj
--mount type=bind,这个type到底有多少种类型?
在Docker中,--mount参数的type关键字后面可以跟随多种不同的类型,以指定挂载卷的类型。以下是一些常见的挂载类型:bind:绑定挂载,允许你将宿主机上的文件或目录直接挂载到容器中。
volume:Docker管理卷,这是Docker推荐用于持久化数据的挂载类型。与绑定挂载不同,卷是由Docker管理的,并且不受宿主机文件系统布局的影响。
tmpfs:挂载一个tmpfs(RAM磁盘),适用于不需要持久化的数据,因为tmpfs是临时的,并且数据在容器停止时会被清除。
npipe:在Windows上,用于挂载命名管道。
以下是一些示例:绑定挂载:
--mount type=bind,source=/path/on/host,target=/path/in/container
Docker管理卷:
--mount type=volume,source=myvolume,target=/path/in/container
tmpfs挂载:
--mount type=tmpfs,destination=/run/user
命名管道挂载(Windows):
--mount type=npipe,source=\\.\pipe\docker_engine,destination=\\.\pipe\docker_engine
volume类型通常是最常用的,因为它提供了一些优势,如易于备份、迁移和管理,以及独立于宿主机文件系统的优点。绑定挂载通常用于开发或测试,因为它们提供了对宿主机文件系统的直接访问,但这可能会导致一些潜在的安全问题,尤其是在生产环境中。这些挂载类型提供了不同的功能和用例,你可以根据你的具体需求选择合适的类型。用户_SMITHj
还是不太明白,请通俗的解释,让小白也能看懂
系统稍微有点忙,请您再尝试一次~
用户_SMITHj
还是不太明白,请通俗的解释,让小白也能看懂
当然,我会尽量用简单的比喻来解释这些挂载类型:绑定挂载(bind mount):
想象一下,你有一本书(宿主机上的文件或目录),你想让朋友(容器)也能看到这本书的内容。你可以直接把这本书带到朋友家(容器内部),这样朋友就能直接翻阅了。如果你在家(宿主机)修改了书的内容,朋友那里的书也会同步更新。这就是绑定挂载,它直接把宿主机的文件或目录“带”到容器里。
Docker管理卷(volume):
现在想象你有一个特殊的书架(Docker管理卷),你可以把书放在这个书架上,然后告诉朋友书架的位置。朋友可以随时来看书,但是书架是独立于你家的,也就是说,即使你搬家(宿主机重装或文件系统变化),书架(卷)和书(数据)仍然在那里。Docker管理卷更安全,也更便于管理。
tmpfs挂载:
tmpfs挂载就像是一个临时的白板。你可以把信息写在白板上,但是一旦你离开房间(容器停止),白板就会被擦干净。也就是说,tmpfs挂载的数据不会持久化,它在容器重启后就会消失。
命名管道挂载(npipe):
命名管道挂载比较特殊,它就像是两个房间之间的秘密通道。你可以通过这个通道传递消息(数据),但是这个通道只在你和朋友(容器和宿主机)之间有效。这在Windows系统中比较常见,用于进程间的通信。
总结一下:绑定挂载:直接把宿主机的文件或目录“拿”到容器里。
Docker管理卷:使用Docker提供的独立书架来存放文件,更安全,便于管理。
tmpfs挂载:临时白板,用完即擦,不保留数据。
命名管道挂载:两个房间之间的秘密通道,用于特殊的数据传递。
用户_SMITHj
Docker管理卷(volume):和-v是不是就是一回事?
是的,Docker管理卷(volume)与使用 -v 或 --volume 参数基本上是一回事。这两个都是用来在Docker容器中创建和管理数据卷的方式。以下是两者之间的关系:-v 或 --volume:这是Docker的传统方式来指定数据卷。当你使用 -v 参数时,Docker会在背后为你创建一个管理卷,除非你明确指定一个绑定挂载。
--mount:这是Docker 17.06及以上版本引入的新语法,它提供了更明确的挂载选项。使用 --mount 参数时,你可以指定卷的类型,比如 type=volume 表示创建一个Docker管理卷。
以下是两个语法形式的一个简单对比:使用 -v 或 --volume 创建Docker管理卷:docker run -d -v myvolume:/path/in/container myimage
使用 --mount 创建Docker管理卷:docker run -d --mount type=volume,source=myvolume,target=/path/in/container myimage
在这两个例子中,myvolume 是卷的名称,/path/in/container 是容器内部的路径,myimage 是你要运行的Docker镜像。在第一个例子中,Docker会自动创建一个名为 myvolume 的卷,并将其挂载到容器内部的 /path/in/container 路径。所以,当你使用 -v 或 --volume 时,默认就是创建一个Docker管理卷,除非你指定了宿主机的路径,这时它将创建一个绑定挂载。而使用 --mount 时,你需要明确指定 type=volume 来创建一个Docker管理卷。用户_SMITHj
-v 到底和那个一样?type=volume还是type=bind
-v 或 --volume 参数在Docker中的行为取决于你如何使用它。默认情况下,如果不指定宿主机的路径,-v 会创建一个Docker管理卷(type=volume)。如果你指定了宿主机的路径,那么 -v 将创建一个绑定挂载(type=bind)。以下是如何区分的:当你使用 -v 并且只提供卷名(不指定宿主机的路径),它相当于 type=volume:
docker run -d -v myvolume:/path/in/container myimage
在这个例子中,myvolume 是Docker管理卷的名称,它会被创建并挂载到容器内的 /path/in/container。
当你使用 -v 并且指定了宿主机的路径,它相当于 type=bind:
docker run -d -v /path/on/host:/path/in/container myimage
在这个例子中,/path/on/host 是宿主机的路径,/path/in/container 是容器内的路径,这会创建一个绑定挂载。
所以,总结来说:-v 只提供卷名时,相当于 type=volume。
-v 提供宿主机路径时,相当于 type=bind。
使用 --mount 语法时,你需要明确指定 type 来指明是哪种挂载类型。
相关文章:
docker -v 到底和那个一样?type=volume还是type=bind的解释
逐行通俗详细的解释下这个代码“#!/usr/bin/env bash # # This script will automatically pull docker image from DockerHub, and start a daemon container to run the Qwen-Chat web-demo.IMAGE_NAMEqwenllm/qwen:2-cu121 QWEN_CHECKPOINT_PATH/path/to/Qwen-Instruct PORT…...
linux自动化构建工具--make/makefile
目录 1.make/makefile介绍 1.1基本认识 1.2依赖关系、依赖方法 1.3具体操作步骤 1.4进一步理解 1.5默认设置 1.6make二次使用的解释 1.7两个文件的时间问题 1.8总是被执行 1.9特殊符号介绍 1.make/makefile介绍 1.1基本认识 make是一个指令,makefile是一…...
学习记录——day15 数据结构 链表
链表的引入 顺序表的优缺点 1、优点:能够直接通过下标进行定位元素,访问效率高,对元素进行查找和修改比较快 2、不足:插入和删除元素需要移动大量的元素,效率较低 3、缺点:存储数据元素有上限,当达到MAX后,就不能再…...
vue3实现在新标签中打开指定的网址
有一个文件列表,如下图: 我希望点击查看按钮的时候,能够在新的标签页面打开这个文件的地址进行预览,该如何实现呢? 比如: 实际上要实现这个并不难,参考demo如下: 首先&#x…...
Qt基础 | QSqlTableModel 的使用
文章目录 一、QSqlTableModel 的使用1.主窗口MainWindow类定义2.构造函数3.打开数据表3.1 添加 SQLite 数据库驱动、设置数据库名称、打开数据库3.2 数据模型设置、选择模型、自定义代理组件、界面组件与模型数据字段间的数据映射 4.添加、插入与删除记录5.保存与取消修改6.设置…...
RPA软件-影刀使用
流程自动化 影刀将操作进行抽象,分为一下几个对象: 网页自动化 (1) 网页自动化应用场景:网页操作、数据抓取 (2) 网页操作:基础操作-指令操作,智能操作-关联元素&#…...
HarmonyOS NEXT零基础入门到实战-第四部分
自定义组件: 概念: 由框架直接提供的称为 系统组件, 由开发者定义的称为 自定义组件。 源代码: Component struct MyCom { build() { Column() { Text(我是一个自定义组件) } } } Component struct MyHeader { build() { Row(…...
vue2获取视频时长
使用HTML5的video标签和JavaScript: <template><video ref"video" autoplay controls loop muted loadedmetadata"getVideoDuration"><source src"https://desktop-yikao.oss-cn-beijing.aliyuncs.com/avatar/kaissp.mp4&q…...
Linux中进程的控制
一、进程的创建 1、知识储备 进程的创建要调用系统接口,头文件 #include<unistd.h> 函数fork() 由于之前的铺垫我们现在可以更新一个概念 进程 内核数据结构(task_struct, mm_struct, 页表....) 代码 数据 所以如何理解进程的独…...
【源码】Sharding-JDBC源码分析之JDBC
Sharding-JDBC系列 1、Sharding-JDBC分库分表的基本使用 2、Sharding-JDBC分库分表之SpringBoot分片策略 3、Sharding-JDBC分库分表之SpringBoot主从配置 4、SpringBoot集成Sharding-JDBC-5.3.0分库分表 5、SpringBoot集成Sharding-JDBC-5.3.0实现按月动态建表分表 6、【…...
Java | Leetcode Java题解之第273题整数转换英文表示
题目: 题解: class Solution {String[] singles {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};String[] t…...
数据结构之深入理解简单选择排序:原理、实现与示例(C,C++)
文章目录 一、简单选择排序原理二、C/C代码实现总结: 在计算机科学中,排序算法是一种非常基础且重要的算法。简单选择排序(Selection Sort)作为其中的一种,因其实现简单、易于理解而受到许多初学者的喜爱。本文将详细介…...
使用vscode搜索打开的文件夹下的文件
右键空白处打开命令面板 摁一次删除键,删除掉图中的大于号 这样就能够找到例化的模块,文件具体在哪个位置,然后打开了...
力扣778.水位上升的泳池中游泳
力扣778.水位上升的泳池中游泳 二分 bfs class Solution {int dx[4] {1,0,-1,0},dy[4] {0,1,0,-1};public:int swimInWater(vector<vector<int>>& grid) {int n grid.size();auto check [&](int mid) -> bool{queue<pair<int,int>>…...
Nacos-2.4.0最新版本docker镜像,本人亲自制作,部署十分方便,兼容postgresql最新版本17和16,奉献给大家了
基于Postgresql数据库存储的nacos最新版本2.4.0,采用docker镜像安装方式 因业务需要,为了让nacos支持postgresql,特意花了两天时间修改了源码,然后制作了docker镜像,如果你也在找支持postgresql的nacos最新版本,恭喜你,你来的正好~ nacos-2.4.0 postgresql的数据库脚本…...
Halcon机器视觉15种缺陷检测案例_9找出所有网格顶点的位置
Halcon机器视觉15种缺陷检测案例_9找出所有网格顶点的位置 效果 原图 代码 *9找出所有网格顶点的位置 dev_update_off ()read_image (Image, 9找出所有风格顶点的位置) get_image_size (Image, Width, Height) *关闭已打开的窗口 dev_close_window ()dev_open_window (0, 0, …...
w30-python02-pytest入门
代码如下: import pytest class Test_Obj:"""测试类"""#用例级别前后置def setup(self):print(用例级别------的前置处理)def teardown(self):print("用例级别--------的后置处理")# 用例def test_case1(self):print(&quo…...
WPF+Mvvm项目入门完整教程-仓储管理系统(二)
目录 一、搭建一个主界面框架二、实现步骤1.主界面区域划分2.主界面区域实现 一、搭建一个主界面框架 主要实现主界面的框架样式和基础功能。这里特别说明一下,由于MvvmLight 已经过时不在维护,本项目决定将MvvmLight框架变更为 CommunityToolkit.Mvvm …...
SkyWalking入门搭建【apache-skywalking-apm-10.0.0】
Java学习文档 视频讲解 文章目录 一、准备二、服务启动2-1、Nacos启动2-2、SkyWalking服务端启动2-3、SkyWalking控制台启动2-4、自定义服务接入 SkyWalking 三、常用监控3-1、服务请求通过率3-2、服务请求拓扑图3-3、链路 四、日志配置五、性能剖析六、数据持久化6-1、MySQL持…...
exo项目目录架构
目录 .yml 文件是 YAML(YAML Aint Markup Language) exo项目目录架构 文件作用 topology、viz:项目拓扑结构可视化相关的代码或工具。 项目目录架构 文件作用 .yml 文件是 YAML(YAML Aint Markup Language) 文件的扩展名,YAML 是一种人类可读的数据序列化标准,通…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
镜像里切换为普通用户
如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
