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

docker基于已有容器和通过Dockerfile进行制作镜像配置介绍

目录

一.制作镜像的两种方式

1.在已有容器中更新并提交这个镜像

2.使用Dockerfile来制作

二.基于容器制作镜像

1.格式

(1)主要格式

(2)可选参数

2.案例

基于容器创建镜像设置标签并进行验证是否可用

(1)运行容器并写入验证内容(改变容器存储层内容)

(2)另起终端制作新镜像(在原有镜像基础上在进行存储层的增量,下次使用此镜像时会参照最新变化)

(3)可以对同一镜像打多次标签,删除时也是直到删除了最后一个标签才算镜像被删除

(4)以新镜像运行新容器验证存储层变动

(5)docker diff 可以查看容器内哪些文件产生变动

基于容器创建新镜像并修改执行命令CMD

3.基于容器制作镜像的缺点

二.基于Dockerfile制作镜像

1.简介

2.相关注意事项

(1)Dockerfile 编写的基本结构

(2)一台主机可以有多个Dockerfile

(3)Dockerfile中指定的所有COPY、ADD等内容都需要与Dockerfile位于同一级目录下

3.Dockerfile指令介绍

(1)FROM

(2)MAINTAINER

(3)COPY

(4)ADD

(5)WORKDIR

(6)RUN

(7)EXPOSE

(8)ENV

(9)VOLUME

(10)CMD

(11)ENTRYPOINT

(12)HEALTHCHECK

(13)ONBUILD

4.制作

(1)主要是使用build命令

(2)案例演示


一.制作镜像的两种方式

1.在已有容器中更新并提交这个镜像

2.使用Dockerfile来制作

二.基于容器制作镜像

1.格式

(1)主要格式

docker commit 参数 容器名称

[root@localhost ~]# docker commit -p bu1
sha256:efbd10d0e00a552f86747a6001323992c030df81338f670f6916c47948e39f74

(2)可选参数

-a指定作者
-c修改dockerfile指令用于创建的镜像
-m记录本次修改的内容(描述信息)
-p在提交期间暂停容器,默认为true

2.案例

基于容器创建镜像设置标签并进行验证是否可用

(1)运行容器并写入验证内容(改变容器存储层内容)

[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
busybox      latest    a416a98b71e2   5 weeks ago   4.26MB
[root@localhost ~]# docker run --name bu1 -it busybox
/ # mkdir /html
/ # echo hello > /html/index.html
/ # 

(2)另起终端制作新镜像(在原有镜像基础上在进行存储层的增量,下次使用此镜像时会参照最新变化)

[root@localhost ~]# docker commit -p bu1
sha256:efbd10d0e00a552f86747a6001323992c030df81338f670f6916c47948e39f74
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
<none>       <none>    efbd10d0e00a   10 seconds ago   4.26MB
busybox      latest    a416a98b71e2   5 weeks ago      4.26MB
[root@localhost ~]# docker tag efb along/html:v1   #根据ID来打标签
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
along/html   v1        efbd10d0e00a   6 minutes ago   4.26MB
busybox      latest    a416a98b71e2   5 weeks ago     4.26MB

(3)可以对同一镜像打多次标签,删除时也是直到删除了最后一个标签才算镜像被删除

[root@localhost ~]# docker tag efb along/html:v1
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
along/html   v1        efbd10d0e00a   6 minutes ago   4.26MB
busybox      latest    a416a98b71e2   5 weeks ago     4.26MB
[root@localhost ~]# docker tag along/html:v1 along/html:v2
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
along/html   v1        efbd10d0e00a   7 minutes ago   4.26MB
along/html   v2        efbd10d0e00a   7 minutes ago   4.26MB
busybox      latest    a416a98b71e2   5 weeks ago     4.26MB
[root@localhost ~]# docker image rm along/html:v2
Untagged: along/html:v2
[root@localhost ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
along/html   v1        efbd10d0e00a   7 minutes ago   4.26MB
busybox      latest    a416a98b71e2   5 weeks ago     4.26MB

(4)以新镜像运行新容器验证存储层变动

[root@localhost ~]# docker run --name bu2 -it along/html:v1 
/ # cat /html/index.html 
hello
/ # 

(5)docker diff 可以查看容器内哪些文件产生变动

[root@localhost ~]# docker diff bu1
A /html
A /html/index.html
C /root
A /root/.ash_history
[root@localhost ~]# docker diff bu2
C /root
C /root/.ash_history

基于容器创建新镜像并修改执行命令CMD

基于已有容器常见新镜像并指定执行httpd

[root@localhost ~]# docker commit -c 'CMD ["/bin/httpd","-f","-h","/html"]' -p bu1 along/html:v1 
sha256:2c2af15b2f29b03eb3d5d4a03d1680debc7eee3ba6c62d42073edf008e9bd3c0
#["指定httpd服务","-f在前台运行","-h表示后面指定httpd运行的主目录","页面存放目录"]
[root@localhost ~]# docker run --name bu3 -d along/html:v1 
36448f483526ed72e74ea4bb3c0ad70a54c13940326bd0c19713acbbffc72738
[root@localhost ~]# docker inspect bu3 | grep -i ipaddress"SecondaryIPAddresses": null,"IPAddress": "172.17.0.3","IPAddress": "172.17.0.3",
[root@localhost ~]# curl 172.17.0.3
hello

3.基于容器制作镜像的缺点

(1)在基于容器制作镜像后,使用容器时自己要修改的文件和一些不希望修改的文件也一起产生变动,数据量一旦大起来就显得极为繁杂

(2)只有自己知道自己在制作时干过什么甚至过段时间自自己都不知道干过什么,难以为进一步的增量操作提供正确参考

(3)基于分层存储下的增量运转模式,随着修改次数的增多,镜像的臃肿程度呈递增状态

二.基于Dockerfile制作镜像

1.简介

把每一层修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像,那么之前提及的无法重复的问题、镜像构建透明性的问题、体积的问题就都会解决。这就是Dockerfile。
Dockerfile 是一个文本文件,其内包含了一条条的指令,每一条指令会构建一层,每一条
指令的内容是描述该层应当如何构建。

2.相关注意事项

(1)Dockerfile 编写的基本结构

Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,文件名为“Dockerfile”

(2)一台主机可以有多个Dockerfile

要使用多个Dockerfile 创建镜像,可以在不同目录编写Dockerfile,然后在Dockerfile 所在的目录下构新的镜像

(3)Dockerfile中指定的所有COPY、ADD等内容都需要与Dockerfile位于同一级目录下

3.Dockerfile指令介绍

(1)FROM

Dockerfile文件内容以FROM开头,是在构建镜像中指定基础镜像,之后的动作基于FROM指定的基础镜像环境下进行,如果这个镜像在本地主机docker上不存在,将会从docker公共库拉取。在有多个镜像需求时FROM可以出现多次。(特殊空白镜像——scratch,可以直接将编写好的可执行文件放进去进行镜像制作)
FROM centos:6

(2)MAINTAINER

提供镜像制作者的详细信息,一般紧跟FROM之后

FROM centos:6
MAINTAINER "name <name@163.com>"

(3)COPY

复制文件或目录到容器里指定的路径

文件或目录为多个时支持通配符匹配

文件或目录必须是Dockerfile所在路径的上下文目录不能在其父目录

当指定的是目录时,其本身不会被复制但其下的文件或子目录会被递归复制

COPY的文件的权限和修改时间等会被保留

FROM centos:6
MAINTAINER "name <name@163.com>"
COPY index.html /data/web/html/ #这个情况下就要确保存放Dockerfile的同级目录下要有index.html文件,/data/web/html/是目标目录

(4)ADD

类似于COPY指令,支持tar文件和url路径,如果指定的是同是在一个系统上的压缩的tar文件,,其将会被执行类似于“tar -x”的解包操作,而通过url获取的则不会被操作

FROM centos:6
MAINTAINER "name <name@163.com>"
COPY index.html /data/web/html/
ADD xxx.tar.gz /usr/local/src/  #xxx.tar.gz同样放在Dockerfile统计目录,如果是url原地址则直接指定即可

(5)WORKDIR

用于为RUN、CMD、ENTRYPOINT、COPY、ADD指定工作目录,WORKDIR可以出现多次,不存在时会自动创建该目录,也支持ENV定义的变量

FROM centos:6
MAINTAINER "name <name@163.com>"
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/ 

(6)RUN

指定制作镜像过程中运行的程序,可以是任何命令,直接指定命令通常是一个以“/bin/sh -c”运行shell命令

FROM centos:6
MAINTAINER "name <name@163.com>"
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/ 
RUN cd ./src && tar -zvxf xxx.tar.gz  #表示切换到这个目录解这个包

(7)EXPOSE

声明运行容器时提供服务的端口,端口开放不会由此决定,但会在使用“-P”随机端口运行容器时提供参考,可以以"port/协议"方式来指定传输层协议(tcp/udp),支持同时指定多个端口

FROM centos:6
MAINTAINER "name <name@163.com>"
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/ 
EXPOSE 80/tcp
RUN cd ./src && tar -zvxf xxx.tar.gz

(8)ENV

为制作镜像定义环境变量,其可以被调用

FROM centos:6
MAINTAINER "name <name@163.com>"
ENV DOC_ROOT=/data/web/html/  #在后面需要使用时就可以通过“$DOC_ROOT”的方式来引用
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/ 
EXPOSE 80/tcp
RUN cd ./src && tar -zvxf xxx.tar.gz

(9)VOLUME

在制作镜像过程中在image内创建一个挂载点目录来挂载本容器卷或其他容器卷

FROM centos:6
MAINTAINER "name <name@163.com>"
ENV DOC_ROOT=/data/web/html/  #在后面需要使用时就可以通过“$DOC_ROOT”的方式来引用
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/ 
EXPOSE 80/tcp
VOLUME /data/myweb
RUN cd ./src && tar -zvxf xxx.tar.gz

(10)CMD

类似RUN指令,可以存在多个,可以在Dockerfile构建出新镜像并启动容器时运行任何命令或程序,值为了为启动的容器指定默认运行程序,运行结束该容器也停止,如果与RUN的命令有冲突,可能会被RUN的命令选项覆盖

FROM centos:6
MAINTAINER "name <name@163.com>"
ENV DOC_ROOT=/data/web/html/  
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/ 
EXPOSE 80/tcp
VOLUME /data/myweb
RUN cd ./src && tar -zvxf xxx.tar.gz
CMD /bin/httpd -f -h ${DOC_ROOT}  #也可以CMD ["/bin/httpd","-f","-h","${DOC_ROOT}"]

(11)ENTRYPOINT

类似CMD,指定容器运行时的默认程序,不会被RUN命令选项覆盖(除了RUN --entryypoint),作为一个单独的可执行程序。在指定了ENTRYPOINT又指定了CMD后,CMD的内容被当做参数传给ENTRYPOINT指定不再直接运行命令或程序

FROM centos:6
MAINTAINER "name <name@163.com>"
ENV DOC_ROOT=/data/web/html/  
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/ 
EXPOSE 80/tcp
VOLUME /data/myweb
RUN cd ./src && tar -zvxf xxx.tar.gz
ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}   #也可以像上面CMD那样用“[]”写

(12)HEALTHCHECK

可以实现告知docker怎样检测它是否还在正常运转,只能出现一次,若出现多次只有最后一个生效

可选参数

--interval=DURATION (default:30s)
隔多久探测一次,默认30s
--timeout=DURATION (default:30s)
服务器响应超时时长,默认30s
--retries=N (default:3)
标记失败几次将容器视为不正常状态,默认3次

返回值含义

0——容器健康

1——容器不健康 

FROM centos:6
MAINTAINER "name <name@163.com>"
ENV DOC_ROOT=/data/web/html/  
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/ 
EXPOSE 80/tcp
VOLUME /data/myweb
RUN cd ./src && tar -zvxf xxx.tar.gz
ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}  
HEALTHCHECK CMD curl xxx.xxx.xxx.xxx:xx    #验证某个容器的某个端口

(13)ONBUILD

在Dockerfile中定义一个触发器,后面跟的是RUN、COPY等指定,被指定的指令只有在被当前镜像被作为基础镜像去制作下一级镜像时才会被执行。不能ONBUID嵌套ONBUILD

FROM centos:6
MAINTAINER "name <name@163.com>"
ENV DOC_ROOT=/data/web/html/  
COPY index.html /data/web/html/
WORKDIR /usr/local/
ADD xxx.tar.gz /usr/local/src/ 
EXPOSE 80/tcp
VOLUME /data/myweb
RUN cd ./src && tar -zvxf xxx.tar.gz
ENTRYPOINT /bin/httpd -f -h ${WEB_DOC_ROOT}  
HEALTHCHECK CMD curl xxx.xxx.xxx.xxx:xx   
ONBUILD RUN echo "<h1>here server2</h1>" >> /data/web/html/index.html

4.制作

(1)主要是使用build命令

docker build 参数 路径

常用可选参数

-t指定要创建的目标镜像名称
-cCPU权重
-m内存限制

(2)案例演示

[root@localhost centos]# pwd
/centos
[root@localhost centos]# ll
total 1060
-rw-r--r-- 1 root root     270 Aug 24 21:52 Dockerfile
-rw-r--r-- 1 root root       6 Aug 24 21:16 index.html
-rw-r--r-- 1 root root 1073322 Aug  9 19:20 nginx-1.22.0.tar.gz[root@localhost centos]# vim Dockerfile 
FROM busybox:latest
MAINTAINER "sulibao <sulibao2003@163.com>"
ENV DOC_ROOT=/data/web/html/
COPY index.html ${DOC_ROOT}
ADD nginx-1.22.0.tar.gz /usr/local
VOLUME /data/mysql
EXPOSE 8080:80/tcp
RUN ls /usr/local[root@localhost centos]# docker build -t myhttpd ./   #制作镜像
[+] Building 0.3s (9/9) FINISHED                                                                                                              docker:default=> [internal] load build definition from Dockerfile                                                                                                    0.0s=> => transferring dockerfile: 250B                                                                                                                    0.0s=> [internal] load .dockerignore                                                                                                                       0.0s=> => transferring context: 2B                                                                                                                         0.0s=> [internal] load metadata for docker.io/library/busybox:latest                                                                                       0.0s=> [1/4] FROM docker.io/library/busybox:latest                                                                                                         0.0s=> [internal] load build context                                                                                                                       0.0s=> => transferring context: 71B                                                                                                                        0.0s=> CACHED [2/4] COPY index.html /data/web/html/                                                                                                        0.0s=> CACHED [3/4] ADD nginx-1.22.0.tar.gz /usr/local                                                                                                     0.0s=> [4/4] RUN ls /usr/local                                                                                                                             0.2s=> exporting to image                                                                                                                                  0.1s=> => exporting layers                                                                                                                                 0.1s=> => writing image sha256:af6af0f426c763b7b8a521a5fcc24d8d2a2897bb0e5929fe7d72878c9fc7ef52                                                            0.0s=> => naming to docker.io/library/myhttpd                                                      [root@localhost centos]# docker run -itd --name web1 -P myhttpd:latest 
96e02b52f243e15bdd706ca8e489593d69e66999386cd9fc23ba0e742a499f27
[root@localhost centos]# docker exec -it web1 /bin/sh  #运行容器并查看功能是否已经实现
/ # ls /usr/local/
nginx-1.22.0
/ # cd /usr/local/nginx-1.22.0/
/usr/local/nginx-1.22.0 # ls
CHANGES     CHANGES.ru  LICENSE     README      auto        conf        configure   contrib     html        man         src

相关文章:

docker基于已有容器和通过Dockerfile进行制作镜像配置介绍

目录 一.制作镜像的两种方式 1.在已有容器中更新并提交这个镜像 2.使用Dockerfile来制作 二.基于容器制作镜像 1.格式 &#xff08;1&#xff09;主要格式 &#xff08;2&#xff09;可选参数 2.案例 基于容器创建镜像设置标签并进行验证是否可用 &#xff08;1&…...

2022年09月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;最长上升子序列 一个数的序列bi&#xff0c;当b1 < b2 < … < bS的时候&#xff0c;我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN)&#xff0c;我们可以得到一些上升的子序列(ai1, ai2, …, aiK)&#xff0c;这里1 < i1 < i2 &…...

二级MySQL(九)——表格数据处理练习

在Mysql中&#xff0c;可以用INSERT或【REPLACE】语句&#xff0c;向数据库中已一个已有的表中插入一行或多行记录。 在Mysql中&#xff0c;可以用【DELETE】或【TRUNCATE】语句删除表中的所有记录。 在Mysql中&#xff0c;可以用【UPDATE】语句来修改数据表中的记录。 为了完…...

QT ListQvector at赋值出错以及解决办法 QT基础入门【QT存储结构】

1、问题 error: passing const QString as this argument discards qualifiers error: assignment of read-only location vec.QVector<int>::at(0) 在Qt中QList,Qvector一般获取元素都是通过at(index)来获取,但是at()的返回是一个const & 常引用,也就是元素不支…...

STM32 CubeMX (H750)RGB屏幕 LTDC

STM32 CubeMX STM32 RGB888 LTDC STM32 CubeMX一、STM32 CubeMX 设置时钟树LTDC使能设置屏幕参数修改RGB888的GPIO 二、代码部分效果 RGB屏幕线束定义&#xff1a; 一、STM32 CubeMX 设置 时钟树 这里设置的时钟&#xff0c;关于刷新速度 举例子&#xff1a;LCD_CLK24MHz 时…...

Redis问题集合(三)在Redis容器里设置键值对

前言 前提是已经拉取了Redis镜像并创建了对应的容器做个记录&#xff0c;方便后续查看 步骤 查看Redis容器的ID&#xff1a;docker ps -a 进入容器&#xff1a;docker exec -it 容器ID /bin/bash进入redis命令行&#xff1a;redis-cli输入密码&#xff1a;auth 配置密码 查看…...

spark中排查Premature EOF: no length prefix available

报错信息 /07/22 10:20:28 WARN DFSClient: Error Recovery for block BP-888461729-172.16.34.148-1397820377004:blk_15089246483_16183344527 in pipeline 172.16.34.64:50010, 172.16.34.223:50010: bad datanode 172.16.34.64:50010 [DataStreamer for file /bdp/data/u9…...

numpy高级函数之where和extract函数

1 numpy.where() 函数返回输入数组中满足给定条件的元素的索引 ---------------------------------------------------- 代码&#xff1a; n1np.random.randint(10,20,10) n2np.where(n1>15) 结果&#xff1a; [17 15 19 15 12 10 16 11 15 13] #原始数组 (array([…...

用Python写一个武侠游戏

前言 在本教程中&#xff0c;我们将使用Python写一个武侠类的游戏&#xff0c;大的框架全部搭好了&#xff0c;很多元素都可以自己添加&#xff0c;让游戏更丰富 &#x1f4dd;个人主页→数据挖掘博主ZTLJQ的主页 个人推荐python学习系列&#xff1a; ☄️爬虫JS逆向系列专栏 -…...

Java --- 异常处理

目录 一、什么是异常 二、异常抛出机制 三、如何对待异常 四、 Java异常体系 4.1、Throwable 4.2、Error 4.2、Exception 4.2.1、编译时异常 4.2.2、运行时期异常 五、异常处理 5.1、捕获异常&#xff08;try-catch&#xff09; 5.1.2、catch中异常处理方式 …...

CDN/DCDN(全站加速)排查过程中如何获取Eagle ID/UUID

目录 前言1.通过浏览器直接访问文件时获取Request ID 前言 阿里云CDN/DCDN(全站加速)为接收到的每个请求分配唯一的服务器请求ID&#xff0c;作为关联各类日志信息的标识符。当您在使用CDN/DCDN(全站加速)过程中遇到错误且希望阿里云技术支持提供协助时&#xff0c;需要提交失…...

网络安全应急响应预案培训与演练目的

1、增强网络安全意识 网络安全事故隐患往往“生成”于无形。例如&#xff0c;漏洞或黑客攻 击发生之时&#xff0c;受害方企事业单位可能处于非常危险的境地而无所察 觉&#xff0c;一些内部部门人员的网络安全意识也容易懈怠。但不论是内部 员工的疏忽还是管理上的大意&am…...

2023年高教社杯 国赛数学建模思路 - 复盘:校园消费行为分析

文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…...

7.Oracle视图创建与使用

1、视图的创建与使用 在所有进行的SQL语句之中&#xff0c;查询是最复杂的操作&#xff0c;而且查询还和具体的开发要求有关&#xff0c;那么在开发过程之中&#xff0c;程序员完成的并不是是和数据库的所有内容&#xff0c;而更多的是应该考虑到程序的设计结构。可以没有一个项…...

rust学习-不安全操作

在 Rust 中,不安全代码块用于避开编译器的保护策略 四种不安全操作 解引用裸指针通过 FFI (Foreign Function Interface,外部语言函数接口)调用函数调用不安全的函数内联汇编(inline assembly)解引用裸指针 原始指针(raw pointer,裸指针)* 和引用 &T 有类似的功…...

RHCE——八、DNS域名解析服务器

RHCE 一、概述1、产生原因2、作用3、连接方式4、因特网的域名结构4.1 拓扑4.2 分类4.3 域名服务器类型划分 二、DNS域名解析过程1、分类2、解析图&#xff1a;2.1 图&#xff1a;2.2 过程分析 三、搭建DNS域名解析服务器1、概述2、安装软件3、/bind服务中三个关键文件4、配置文…...

flink cdc初始全量速度很慢原因和优化点

link cdc初始全量速度很慢的原因之一是&#xff0c;它需要先读取所有的数据&#xff0c;然后再写入到目标端&#xff0c;这样可以保证数据的一致性和顺序。但是这样也会导致数据的延迟和资源的浪费。flink cdc初始全量速度很慢的原因之二是&#xff0c;它使用了Debezium作为捕获…...

论文笔记: MOGRIFIER LSTM

2020 ICLR 修改传统LSTM 当前输入和隐藏状态充分交互&#xff0c;从而获得更佳的上下文相关表达 1 Mogrifier LSTM LSTM的输入X和隐藏状态H是完全独立的 机器学习笔记&#xff1a;GRU_gruc_UQI-LIUWJ的博客-CSDN博客这篇论文想探索&#xff0c;如果在输入LSTM之前&#xf…...

Angular中使用drag and drop实现文件拖拽上传,及flask后端接收

效果&#xff1a;拖拽文件到组件上面时 边框变大变红 松手后发送到服务器(或者点击蓝字手动选择文件)并且把文件名显示在框内&#xff0c;美化还没做 html <div class"drapBox"><div id"drop" (dragenter)"dragenter($event)" (dragov…...

Spring Authorization Server入门 (十六) Spring Cloud Gateway对接认证服务

前言 之前虽然单独讲过Security Client和Resource Server的对接&#xff0c;但是都是基于Spring webmvc的&#xff0c;Gateway这种非阻塞式的网关是基于webflux的&#xff0c;对于集成Security相关内容略有不同&#xff0c;且涉及到代理其它微服务&#xff0c;所以会稍微比较麻…...

3分钟掌握AnythingLLM浏览器扩展:将任意网页变成AI知识库的终极指南

3分钟掌握AnythingLLM浏览器扩展&#xff1a;将任意网页变成AI知识库的终极指南 【免费下载链接】anything-llm 这是一个全栈应用程序&#xff0c;可以将任何文档、资源&#xff08;如网址链接、音频、视频&#xff09;或内容片段转换为上下文&#xff0c;以便任何大语言模型&a…...

uDebugLib:嵌入式零开销串口调试库设计与实践

1. uDebugLib 库概述uDebugLib 是一个轻量级、跨平台的嵌入式串口调试辅助库&#xff0c;专为 Arduino 及兼容平台&#xff08;如 ESP32、STM32&#xff08;通过Arduino Core&#xff09;、nRF52 等&#xff09;设计。其核心目标并非替代完整的日志系统&#xff08;如esp_log或…...

从零搭建WebRTC信令服务:SpringBoot WebSocket与Vue3的实战协同

1. WebRTC信令服务基础认知 第一次接触WebRTC时&#xff0c;我被它直接建立P2P连接的能力惊艳到了——就像两个陌生人突然跳过所有中间环节直接开始面对面交流。但很快我发现&#xff0c;这种"魔法"背后需要一套精密的协调机制&#xff0c;这就是信令服务的用武之地。…...

Qwen3-32B内容创作应用:自动生成文案、报告、邮件

Qwen3-32B内容创作应用&#xff1a;自动生成文案、报告、邮件 1. 为什么选择Qwen3-32B进行内容创作 在当今内容为王的时代&#xff0c;企业每天都需要产出大量高质量的文字内容。从营销文案到产品说明&#xff0c;从客户邮件到内部报告&#xff0c;文字创作已经成为企业运营中…...

电机控制进阶:从增量式与位置式PID到现代复合控制策略

1. PID控制的前世今生&#xff1a;从工业革命到智能时代 第一次接触PID控制器时&#xff0c;我被这个诞生于上世纪30年代的"古董级"算法震惊了。当时正在调试一台伺服电机&#xff0c;系统总是出现超调和振荡。导师递给我一张写着三个参数的纸条&#xff1a;"试…...

YOLOFuse镜像亮点解析:环境零配置与多种融合策略详解

YOLOFuse镜像亮点解析&#xff1a;环境零配置与多种融合策略详解 1. 引言&#xff1a;多模态检测的工程挑战 在智能安防和自动驾驶领域&#xff0c;工程师们经常面临一个现实问题&#xff1a;白天表现优秀的目标检测系统&#xff0c;到了夜间或恶劣天气环境下性能急剧下降。传…...

检索模型cross-encoder笔记

文章目录计算句子对相似度搜索结果的“重排序”cross-encoder一种检索模型&#xff0c;和双路召回机制不一样&#xff0c;各有优缺点。cross-encoder最大的特点就是会将query(问题)和document(候选文本)一起分析。一般的流程是&#xff0c;双路召回先粗排&#xff0c;cross-enc…...

springboot-vue+nodejs 的学生请假销假管理系统

目录技术选型与架构设计系统模块划分审批流程实现销假与统计功能系统集成与部署安全与性能优化项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作技术选型与架构设计 后端采用SpringBoot框架&#xff0c;提供RESTful API接口&…...

NAT技术实战解析:从基础配置到高级应用

1. NAT技术入门&#xff1a;从零开始理解地址转换 第一次接触NAT这个概念时&#xff0c;我正被公司派去解决一个棘手的网络问题——办公室里的打印机突然无法被外部分支机构访问。折腾了半天才发现&#xff0c;原来是路由器的NAT配置被误改了。这次经历让我深刻体会到&#xff…...

AI超分辨率技术突破:OptiScaler实现跨显卡自由体验

AI超分辨率技术突破&#xff1a;OptiScaler实现跨显卡自由体验 【免费下载链接】OptiScaler DLSS replacement for AMD/Intel/Nvidia cards with multiple upscalers (XeSS/FSR2/DLSS) 项目地址: https://gitcode.com/GitHub_Trending/op/OptiScaler 你的显卡是否因厂商…...