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.简介
2.相关注意事项
(1)Dockerfile 编写的基本结构
(2)一台主机可以有多个Dockerfile
(3)Dockerfile中指定的所有COPY、ADD等内容都需要与Dockerfile位于同一级目录下
3.Dockerfile指令介绍
(1)FROM
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 | 指定要创建的目标镜像名称 |
| -c | CPU权重 |
| -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.格式 (1)主要格式 (2)可选参数 2.案例 基于容器创建镜像设置标签并进行验证是否可用 (1&…...
2022年09月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
第1题:最长上升子序列 一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK),这里1 < i1 < i2 &…...
二级MySQL(九)——表格数据处理练习
在Mysql中,可以用INSERT或【REPLACE】语句,向数据库中已一个已有的表中插入一行或多行记录。 在Mysql中,可以用【DELETE】或【TRUNCATE】语句删除表中的所有记录。 在Mysql中,可以用【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屏幕线束定义: 一、STM32 CubeMX 设置 时钟树 这里设置的时钟,关于刷新速度 举例子:LCD_CLK24MHz 时…...
Redis问题集合(三)在Redis容器里设置键值对
前言 前提是已经拉取了Redis镜像并创建了对应的容器做个记录,方便后续查看 步骤 查看Redis容器的ID:docker ps -a 进入容器:docker exec -it 容器ID /bin/bash进入redis命令行:redis-cli输入密码: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() 函数返回输入数组中满足给定条件的元素的索引 ---------------------------------------------------- 代码: n1np.random.randint(10,20,10) n2np.where(n1>15) 结果: [17 15 19 15 12 10 16 11 15 13] #原始数组 (array([…...
用Python写一个武侠游戏
前言 在本教程中,我们将使用Python写一个武侠类的游戏,大的框架全部搭好了,很多元素都可以自己添加,让游戏更丰富 📝个人主页→数据挖掘博主ZTLJQ的主页 个人推荐python学习系列: ☄️爬虫JS逆向系列专栏 -…...
Java --- 异常处理
目录 一、什么是异常 二、异常抛出机制 三、如何对待异常 四、 Java异常体系 4.1、Throwable 4.2、Error 4.2、Exception 4.2.1、编译时异常 4.2.2、运行时期异常 五、异常处理 5.1、捕获异常(try-catch) 5.1.2、catch中异常处理方式 …...
CDN/DCDN(全站加速)排查过程中如何获取Eagle ID/UUID
目录 前言1.通过浏览器直接访问文件时获取Request ID 前言 阿里云CDN/DCDN(全站加速)为接收到的每个请求分配唯一的服务器请求ID,作为关联各类日志信息的标识符。当您在使用CDN/DCDN(全站加速)过程中遇到错误且希望阿里云技术支持提供协助时,需要提交失…...
网络安全应急响应预案培训与演练目的
1、增强网络安全意识 网络安全事故隐患往往“生成”于无形。例如,漏洞或黑客攻 击发生之时,受害方企事业单位可能处于非常危险的境地而无所察 觉,一些内部部门人员的网络安全意识也容易懈怠。但不论是内部 员工的疏忽还是管理上的大意&am…...
2023年高教社杯 国赛数学建模思路 - 复盘:校园消费行为分析
文章目录 0 赛题思路1 赛题背景2 分析目标3 数据说明4 数据预处理5 数据分析5.1 食堂就餐行为分析5.2 学生消费行为分析 建模资料 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 赛题背景 校园一卡通是集…...
7.Oracle视图创建与使用
1、视图的创建与使用 在所有进行的SQL语句之中,查询是最复杂的操作,而且查询还和具体的开发要求有关,那么在开发过程之中,程序员完成的并不是是和数据库的所有内容,而更多的是应该考虑到程序的设计结构。可以没有一个项…...
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、解析图:2.1 图:2.2 过程分析 三、搭建DNS域名解析服务器1、概述2、安装软件3、/bind服务中三个关键文件4、配置文…...
flink cdc初始全量速度很慢原因和优化点
link cdc初始全量速度很慢的原因之一是,它需要先读取所有的数据,然后再写入到目标端,这样可以保证数据的一致性和顺序。但是这样也会导致数据的延迟和资源的浪费。flink cdc初始全量速度很慢的原因之二是,它使用了Debezium作为捕获…...
论文笔记: MOGRIFIER LSTM
2020 ICLR 修改传统LSTM 当前输入和隐藏状态充分交互,从而获得更佳的上下文相关表达 1 Mogrifier LSTM LSTM的输入X和隐藏状态H是完全独立的 机器学习笔记:GRU_gruc_UQI-LIUWJ的博客-CSDN博客这篇论文想探索,如果在输入LSTM之前…...
Angular中使用drag and drop实现文件拖拽上传,及flask后端接收
效果:拖拽文件到组件上面时 边框变大变红 松手后发送到服务器(或者点击蓝字手动选择文件)并且把文件名显示在框内,美化还没做 html <div class"drapBox"><div id"drop" (dragenter)"dragenter($event)" (dragov…...
Spring Authorization Server入门 (十六) Spring Cloud Gateway对接认证服务
前言 之前虽然单独讲过Security Client和Resource Server的对接,但是都是基于Spring webmvc的,Gateway这种非阻塞式的网关是基于webflux的,对于集成Security相关内容略有不同,且涉及到代理其它微服务,所以会稍微比较麻…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
