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

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&#xff1a; <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、知识储备 进程的创建要调用系统接口&#xff0c;头文件 #include<unistd.h> 函数fork() 由于之前的铺垫我们现在可以更新一个概念 进程 内核数据结构&#xff08;task_struct, mm_struct, 页表....&#xff09; 代码 数据 所以如何理解进程的独…...

【源码】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题整数转换英文表示

题目&#xff1a; 题解&#xff1a; class Solution {String[] singles {"", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine"};String[] t…...

数据结构之深入理解简单选择排序:原理、实现与示例(C,C++)

文章目录 一、简单选择排序原理二、C/C代码实现总结&#xff1a; 在计算机科学中&#xff0c;排序算法是一种非常基础且重要的算法。简单选择排序&#xff08;Selection Sort&#xff09;作为其中的一种&#xff0c;因其实现简单、易于理解而受到许多初学者的喜爱。本文将详细介…...

使用vscode搜索打开的文件夹下的文件

右键空白处打开命令面板 摁一次删除键&#xff0c;删除掉图中的大于号 这样就能够找到例化的模块&#xff0c;文件具体在哪个位置&#xff0c;然后打开了...

力扣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入门

代码如下&#xff1a; import pytest class Test_Obj:"""测试类"""#用例级别前后置def setup(self):print(用例级别------的前置处理)def teardown(self):print("用例级别--------的后置处理")# 用例def test_case1(self):print(&quo…...

WPF+Mvvm项目入门完整教程-仓储管理系统(二)

目录 一、搭建一个主界面框架二、实现步骤1.主界面区域划分2.主界面区域实现 一、搭建一个主界面框架 主要实现主界面的框架样式和基础功能。这里特别说明一下&#xff0c;由于MvvmLight 已经过时不在维护&#xff0c;本项目决定将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 是一种人类可读的数据序列化标准,通…...

mysql中where与on区别

WHERE子句 作用范围&#xff1a;WHERE子句主要用于过滤FROM子句返回的结果集。它可以在SELECT、UPDATE、DELETE语句中使用&#xff0c;以限制哪些行被包含在最终的查询结果中&#xff0c;或者哪些行被更新或删除。应用场景&#xff1a;当需要基于某些条件过滤结果集时&#xf…...

filebeat把日志文件上传到Es中配置(ES7版本)

默认的filebeat配置会把所有的索引都放到一个文件中&#xff0c;通过摸索发现可以自定义索引的名字、模板、生命周期 &#xff08;重点注意&#xff09;该配置文件只适应于ES版本是7&#xff0c;不适应于8的版本&#xff0c;两个版本的配置文件差异很大 /app/logs/info.log日…...

Vue Router基础

Router 的作用是在单页应用&#xff08;SPA&#xff09;中将浏览器的URL和用户看到的内容绑定起来。当用户在浏览不同页面时&#xff0c;URL会随之更新&#xff0c;但页面不需要从服务器重新加载。 1 Router 基础 RouterView RouterView 用于渲染当前URL路径对应的路由组件。…...

Apache压测工具ab(Apache Bench)工具的下载安装和使用示例

场景 Jmeter进行http接口压力测试&#xff1a; Jmeter进行http接口压力测试_接口压测两万量-CSDN博客 上面讲压测工具Jmeter的使用&#xff0c;下面介绍另外一个ab(Apache Bench)压测工具的使用。 apache bench apache bench是apache自带的压力测试工具。 ab不仅可以对ap…...

IPIDEA与Python爬虫:联手解锁全球电商数据宝库

IPIDEA与Python爬虫&#xff1a;联手解锁全球电商数据宝库 如何运用代理IP在电商领域进行高效数据采集。特别是在遭遇访问限制的情况下&#xff0c;如何优雅地绕过那些恼人的访问管理机制。当然&#xff0c;在我们的探险之旅中&#xff0c;开源神器PlugLink也将适时出场&#…...

Fine-BI学习笔记

官方学习文档&#xff1a;快速入门指南- FineBI帮助文档 FineBI帮助文档 (fanruan.com) 1.零基础入门 1.1 功能简介 完成四个流程&#xff1a;新建分析主题、添加数据、分析数据、分享协作。 示例数据获取&#xff1a;5分钟上手FineBI - FineBI帮助文档 (fanruan.com) 1.2 …...

AI 辅助编程 Coding AI 辅助研发组织的技术蓝图

简简单单 Online zuozuo:欢迎商业合作 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo :联系我们:VX :tja6288 / EMAIL: 347969164@qq.com 文章目录 AI 辅助编程 Coding A…...

VScode 批量操作

VScode 批量操作 批量修改 按住 alt/option 键&#xff0c; 选择需要批量操作的位置 如果是多行&#xff0c;则按住 altshift 键 可以直接操作 但是有时候比如变量命名&#xff0c;可能需要递增操作的命名 需要下载插件 Increment Selection 按照1的方法多选光标之后&am…...

【Linux】管道通信和 system V 通信

文章目录 一、进程通信原理&#xff08;让不同进程看到同一份资源&#xff09;二、管道通信2.1 管道原理及其特点2.1 匿名管道和命名管道 三、共享内存通信3.1 共享内存原理3.2 创建和关联共享内存3.3 去关联、ipc 指令和删除共享内存 四、消息队列和信号量&#xff08;了解&am…...

Python | Leetcode Python题解之第279题完全平方数

题目&#xff1a; 题解&#xff1a; class Solution { public:// 判断是否为完全平方数bool isPerfectSquare(int x) {int y sqrt(x);return y * y x;}// 判断是否能表示为 4^k*(8m7)bool checkAnswer4(int x) {while (x % 4 0) {x / 4;}return x % 8 7;}int numSquares(i…...

mysql定时备份

为什么写这篇文章 最近项目里面需要定时备份mysql的数据&#xff0c;网上找了下&#xff0c;找到了一些比较好的解决方案。但是发现有几个地方与自己不匹配&#xff0c;我期望有如下 备份过程不能锁表&#xff0c;网上很多都是会锁表备份定时任务无法执行&#xff0c;但是手动…...

数据结构:逻辑结构与物理结构

逻辑结构与物理结构 逻辑结构1. 集合结构2. 线性结构3. 树形结构4. 图形结构 物理结构1. 顺序存储结构2. 链式存储结构 示例逻辑结构的示例&#xff1a;线性表物理结构的示例 结论 逻辑结构 逻辑结构描述了数据元素之间的逻辑关系&#xff0c;它是数据结构的抽象描述&#xff…...

pycharm报错:No module named pip/No module named pytest

1、问题概述? 今天在执行一个python脚本的时候,控制台提示:No module named pytest,就是没有pytest模块,于是我使用pip命令进行安装,命令如下; pip install pytest 结果又提示No module named pip,说我没有pip模块,没办法,再安装pip 2、安装pip-方式1 在pycharm的T…...

Linux:Linux权限

目录 1. Linux权限的概念 2. Linux权限管理 2.1 文件访问者的分类 2.2 文件类型和访问权限 2.2.1 文件类型 2.2.2 基本权限 2.3 文件权限值的表示方法 2.4 文件访问权限的相关设置方法 2.4.1 chmod 2.4.2 chown 2.4.3 chgrp 2.4.4 umask 3. file指令 4. Linux目…...

新版Glide检测生命周期原理

本文章使用的是glide 4.15.1 public class RequestManagerRetriever implements Handler.Callback {rivate final LifecycleRequestManagerRetriever lifecycleRequestManagerRetriever;public RequestManagerRetriever(Nullable RequestManagerFactory factory, GlideExperim…...

Ansible的脚本-----playbook剧本【上】

目录 1.playbook剧本组成 2.playbook剧本实战演练 2.1 实战演练一&#xff1a;给被管理主机安装httpd服务 2.2 实战演练二&#xff1a;定义、引用变量 2.3 实战演练三&#xff1a;指定远程主机sudo切换用户 2.4 实战演练四&#xff1a;when条件判断 2.5 实战演练五&…...

sql注入学习与防护

一、SQL注入分类 SQL注入根据攻击方式的不同&#xff0c;可以分为以下几种类型&#xff1a; 数字型注入字符型注入报错注入布尔盲注时间盲注联合查询注入基于堆叠的查询注入 二、SQL注入流程 发现注入点猜测字段数确定显示字段获取数据库信息获取数据库中的表获取表中的字段获…...

饥荒dst联机服务器搭建基于Ubuntu

目录 一、服务器配置选择 二、项目 1、下载到服务器 2、解压 3、环境 4、启动面板 一、服务器配置选择 首先服务器配置需要2核心4G&#xff0c;4G内存森林加洞穴大概就占75% 之后进行服务器端口的开放&#xff1a; tcp:8082 tcp:8080 UDP:10888 UDP:10998 UDP:10999 共…...

AtCoder Beginner Contest 363

A - Piling Up 题意 不同的分数段有不同的^数量&#xff0c;Takahashi想要使得他的^数量增加&#xff0c;问他所需要的最少分数增幅。 思路 我们只需要找到下一阶段的下限。 a / 100 是本阶段 1 变成下一阶段&#xff0c;再 * 100变成下限&#xff0c;再与原来的相减即可…...

Protel DXP 面试题详解及参考答案(4万字长文)

解释Protel DXP的基本工作流程。 Protel DXP(现已更名为Altium Designer)是一款用于电子设计自动化(EDA)的软件,主要应用于印刷电路板(PCB)设计。其基本工作流程通常包括以下几个阶段: 项目创建与配置: 开始一个新的设计项目时,首先需要创建一个项目文件,在这个文件…...

雪花算法 集群uid重复问题 uid-generator-spring-boot-starter

1、在生成环境 在某个业务使用该插件生成uid,由于业务整合了 mybatis-plus模块 2、该业务是分部署集群部署以及使用的多线程获取uid&#xff0c;使用中发现唯一建冲突&#xff0c;生成的uid有重复。 然后查看日志发现 workerId 始终为0 怀疑是生成workerId出了问题。 查看跟…...

【AutoDL】AutoDL+Xftp+Xshell+VSCode配合使用教程

身边没有显卡资源或不足以训练模型时&#xff0c;可以租赁服务器的显卡。 1、AutoDL Step :注册账号->选择显卡->选择环境->开机启动 1.1 首先打开AutoDL官网&#xff0c;注册账号 1.2 租赁自己想要的显卡资源 1.3 选择基础环境。 此处&#xff0c;我们让其自动配置…...

使用minio cllient(mc)完成不同服务器的minio的数据迁移和mc基本操作

minio client 前言使用1.拉取minio client 镜像2.部署mc容器3.添加云存储服务器4.迁移数据1.全量迁移2.只迁移某个桶3.覆盖重名文件 5.其他操作1.列出所有alias、列出列出桶中的文件和目录1.1.列出所有alias1.2.列出桶中的文件和目录 2.创建桶、删除桶2.1.创建桶2.2.删除桶 3.删…...

Vue3分段控制器(Segmented)

效果如下图&#xff1a;在线预览 APIs Segmented 参数说明类型默认值必传block是否将宽度调整为父元素宽度&#xff0c;同时所有选项占据相同的宽度booleanfalsefalsedisabled是否禁用booleanfalsefalseoptions选项数据string[] | number[] | SegmentedOption[][]falsesize控…...

SpringSecurity如何正确的设置白名单

在SpringSecurity中,往往需要对部分接口白名单访问,而大部分在使用Security中就有一个误区,那就是免鉴权访问和白名单的区别。 大部分的Security文章包括官方文档给出免鉴权访问都是使用.permitAll()去对相应路径进行免鉴权访问,但实际上这仅仅只表示该资源不需要相应的权限访问…...

【Langchain大语言模型开发教程】评估

&#x1f517; LangChain for LLM Application Development - DeepLearning.AI 学习目标 1、Example generation 2、Manual evaluation and debug 3、LLM-assisted evaluation 4、LangChain evaluation platform 1、引包、加载环境变量&#xff1b; import osfrom dotenv imp…...

Python爬虫小项目实战

1.自动获取小说多个章节内容 2.获取英雄联盟里面的全部英雄 3. 简单地自动抽奖系统 4. 简单地点赞系统 5. 制作查询手机号工具 6. 制做登录系统 7. 操作excel办公自动化 8. 自动批量保存图片 9. 获取NBA数据 10. 获取彩票信息 11. 获取房地产信息 12. 获取小说…...

PHP Filesystem 简介

PHP Filesystem 简介 PHP 是一种广泛使用的开源服务器端脚本语言,特别适用于网页开发。在 PHP 中,Filesystem 是一个功能丰富的库,提供了一系列用于文件系统操作的函数。这些函数允许开发者读取、写入、修改和删除文件和目录,以及执行其他与文件系统相关的任务。 PHP Fil…...

源代码加密软件哪家好?五款企业级加密软件推荐

随着软件开发行业的快速发展&#xff0c;源代码作为核心资产&#xff0c;面临着越来越大的安全威胁。保护源代码不被泄露或盗用&#xff0c;是每个开发团队和企业都需要高度重视的问题。源代码加密软件通过对代码进行加密处理&#xff0c;确保其在传输和存储过程中保持机密性。…...

Redis常见的数据类型及操作方式

一、通用命令 1&#xff09;获取redis中所有key keys * 2&#xff09;删除一个或多个key del key1 key2 ... 3&#xff09;判断key是否存在 exists key 4&#xff09;给key添加过期时间 expire key time 5&#xff09;查看key剩余过期时间 ttl key 6) 查看redis内存…...