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

docker入门(八)—— dockerfile详细介绍,编写dockerfile

dockerfile(重点)

大家想想,Nginx,tomcat,mysql 这些镜像都是哪里来的?官方能写,我们不能写吗?

我们要研究自己如何做一个镜像,而且我们写的微服务项目打包上云部署,docker 就是最方便的。

微服务打包成镜像,任何装了 docker 的地方,都可以下载使用,极其方便。

流程:开发应用 => 编写 dockerfile => 打包为镜像 => 上传到仓库(私有仓库公司内部,公有仓库 dockerhub)=> 下载镜像 => 启动运行。

还可以方便移植!

什么是 dockerfile

dockerfile 是一种用于定义和构建 docker 镜像的文本文件。它包含一系列的指令和参数,用于描述镜像的构建过程,包括基础映像、软件包安装、文件拷贝、环境变量设置等。

通过编写 dockerfile,可以将应用程序、环境和依赖项打包成一个独立的容器镜像,使其可以在不同的环境和平台上运行,实现应用程序的可移植性和可扩展性。

dockerfile 的基本结构包括以下几个部分:

  • 基础映像(Base Image):使用 FROM 指令指定基础映像,作为构建镜像的起点。基础映像通常包含了操作系统和一些预装的软件和工具。
  • 构建过程指令:使用一系列指令来描述构建过程,例如 RUN 用于执行命令和安装软件包,COPY 用于拷贝文件和目录,ADD 用于拷贝和提取文件,WORKDIR 用于设置工作目录,等等。
  • 容器启动指令:使用 CMD 或 ENTRYPOINT 指令来定义容器启动时要执行的命令,也就是默认的容器执行命令。

通过编写 dockerfile,可以自定义构建过程,选择所需的软件和配置,以及设置环境变量、暴露端口等。dockerfile 的语法简单且易于理解,使得镜像的构建过程变得可重复和可维护。

总的来说,dockerfile 是定义和构建 docker 镜像的文本文件,通过编写指令和参数来描述镜像的构建过程和配置,以实现应用程序的打包和部署。它是使用 docker 进行容器化开发和部署的重要工具。

构建步骤:

  1. 编写 dockerfile 文件
  2. docker build 构建镜像
  3. docker run 镜像

dockerfile 构建过程

基础知识:

  • 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
  • 指令按照从上到下,顺序执行
  • # 表示注释
  • 每条指令都会创建一个新的镜像层,并对镜像进行提交

流程:

  1. docker 从基础镜像运行一个容器
  2. 执行一条指令并对容器做出修改
  3. 执行类似 docker commit 的操作提交一个新的镜像层
  4. docker 再基于刚提交的镜像运行一个新容器
  5. 执行 dockerfile 中的下一条指令直到所有指令都执行完成!

说明:

从应用软件的角度来看,dockerfile,docker 镜像与 docker 容器分别代表软件的三个不同阶段。

  • dockerfile 是软件的原材料(代码)
  • docker 镜像则是软件的交付品(.apk)
  • docker 容器则是软件的运行状态(客户下载安装执行)

dockerfile 面向开发,docker 镜像成为交付标准,docker 容器则涉及部署与运维,三者缺一不可!

在这里插入图片描述

  • dockerfile:需要定义一个 dockerfile,dockerfile 定义了进程需要的一切东西。dockerfile 涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当引用进行需要和系统服务和内核进程打交道,这时需要考虑如何设计 namespace 的权限控制)等等。
  • docker镜像:在 dockerfile 定义了一个文件之后,docker build 时会产生一个 docker 镜像,当运行 docker 镜像时,会真正开始提供服务;
  • docker容器:容器是直接提供服务的。

dockerfile 指令

关键字:

FROM         # 基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER   # 镜像维护者的姓名混合邮箱地址
RUN          # 容器构建时需要运行的命令
EXPOSE       # 当前容器对外保留出的端口
WORKDIR      # 指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
ENV          # 用来在构建镜像过程中设置环境变量
ADD          # 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY         # 类似ADD,拷贝文件和目录到镜像中!
VOLUME       # 容器数据卷,用于数据保存和持久化工作
CMD          # 指定一个容器启动时要运行的命令,dockerFile中可以有多个CMD指令,但只有最后一个生效!
ENTRYPOINT   # 指定一个容器启动时要运行的命令!和CMD一样
ONBUILD      # 当构建一个被继承的DockerFile时运行命令,父镜像在被子镜像继承后,父镜像的ONBUILD被触发

在这里插入图片描述

编写 dockerfile

dockerhub 中99%的镜像都是通过在 base 镜像(Scratch)中安装和配置需要的软件构建出来的

Scratch 镜像很赞,它简洁、小巧而且快速,它没有 bug、安全漏洞、延缓的代码或技术债务。除了被 docker 添加了 metadata 之外,它基本上是空的。

我们在使用 dockerfile 构建 docker 镜像时,一种方式是使用官方预先配置好的容器镜像。优点是我们不用从头开始构建,节省了很多工作量,但付出的代价是需要下载很大的镜像包。

如果我们的需求是在构建一个符合我们实际业务需求的 docker 镜像的前提下,确保镜像尺寸尽可能的小,应该怎么做呢?

思路是使用空镜像 scratch,可以说是真正的从零开始构建属于自己的镜像,镜像的第一层

发布一个自己编写的 centos

由于阿里云官方的 centos 是不完整的,很多命令都没有(例如 vim、ipconfig 等),我们自定义一个 centos 镜像,,让它能够拥有这些命令

# dockerfile文件名字可以任意取,最好为Dockerfile
vim Dockerfile

编写 dockerfile 如下:

FROM centos7.9.2009
MAINTAINER akuya<123456@qq.com># 配置环境以及工作目录
ENV MYPATH /usr/local
WORKDIR $MYPATH# 安装vim、ipconfig等命令
RUN yum -y install vim
RUN yum -y install net-tools# 暴露端口
EXPOSE 80CMD echo $MYPATH
CMD echo "---akuya---"
CMD /bin/bash

由于最新版 centos8 有 bug,故使用 centos7.9版本

根据 dockerfile 构建镜像

docker build .

参数:

  • -f:等价于--file,指定 dockerfile 文件
  • -t:等价于--tag,指定输出的镜像文件名:版本号

命令最后一定要加一个.

# 构建镜像命令
docker build -f Dockerfile -t mycentos:1.0 .
[root@iZbp15293q8kgzhur7n6kvZ home]# docker build -f Dockerfile -t mycentos:1.0 .
[+] Building 54.3s (8/8) FINISHED                                                                                  docker:default=> [internal] load build definition from Dockerfile                                                                         0.0s=> => transferring dockerfile: 282B                                                                                         0.0s=> [internal] load metadata for docker.io/library/centos:7.9.2009                                                          15.7s=> [internal] load .dockerignore                                                                                            0.0s=> => transferring context: 2B                                                                                              0.0s=> [1/4] FROM docker.io/library/centos:7.9.2009@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987    10.0s=> => resolve docker.io/library/centos:7.9.2009@sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987     0.0s=> => sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987 1.20kB / 1.20kB                               0.0s=> => sha256:dead07b4d8ed7e29e98de0f4504d87e8880d4347859d839686a31da35a3b532f 529B / 529B                                   0.0s=> => sha256:eeb6ee3f44bd0b5103bb561b4c16bcb82328cfe5809ab675bb17ab3a16c517c9 2.75kB / 2.75kB                               0.0s=> => sha256:2d473b07cdd5f0912cd6f1a703352c82b512407db6b05b43f2553732b55df3bc 76.10MB / 76.10MB                             6.1s=> => extracting sha256:2d473b07cdd5f0912cd6f1a703352c82b512407db6b05b43f2553732b55df3bc                                    3.4s=> [2/4] WORKDIR /usr/local                                                                                                 2.2s=> [3/4] RUN yum -y install vim                                                                                            21.2s=> [4/4] RUN yum -y install net-tools                                                                                       3.4s => exporting to image                                                                                                       1.7s => => exporting layers                                                                                                      1.7s => => writing image sha256:1e7fb59b8a162a54a01bc41930d654d7d474cbd7ade3d110f12d95727e1d193f                                 0.0s => => naming to docker.io/library/mycentos:1.0                                                                              0.0s 
[root@iZbp15293q8kgzhur7n6kvZ home]# docker images                                                                                
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE                                                                   
mycentos     1.0       1e7fb59b8a16   About a minute ago   708MB
centos       latest    5d0da3dc9764   2 years ago          231MB

根据这个镜像运行容器后发现并没有打印出目录/usr/local---akuya---,这是因为 CMD 指令如果存在多个,只有最后一个会被执行

docker history 查看镜像的变更历史

如果你下载了一个镜像,报错了或者你想查看一些构建逻辑,使用 docker history

[root@iZbp15293q8kgzhur7n6kvZ home]# docker history mycentos:1.0
IMAGE          CREATED         CREATED BY                                      SIZE      COMMENT
1e7fb59b8a16   7 minutes ago   CMD ["/bin/sh" "-c" "/bin/bash"]                0B        buildkit.dockerfile.v0
<missing>      7 minutes ago   CMD ["/bin/sh" "-c" "echo \"---akuya---\""]     0B        buildkit.dockerfile.v0
<missing>      7 minutes ago   CMD ["/bin/sh" "-c" "echo $MYPATH"]             0B        buildkit.dockerfile.v0
<missing>      7 minutes ago   EXPOSE map[80/tcp:{}]                           0B        buildkit.dockerfile.v0
<missing>      7 minutes ago   RUN /bin/sh -c yum -y install net-tools # bu…   208MB     buildkit.dockerfile.v0
<missing>      7 minutes ago   RUN /bin/sh -c yum -y install vim # buildkit    296MB     buildkit.dockerfile.v0
<missing>      7 minutes ago   WORKDIR /usr/local                              0B        buildkit.dockerfile.v0
<missing>      7 minutes ago   ENV MYPATH=/usr/local                           0B        buildkit.dockerfile.v0
<missing>      7 minutes ago   MAINTAINER akuya<123456@qq.com>                 0B        buildkit.dockerfile.v0
<missing>      2 years ago     /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B        
<missing>      2 years ago     /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B        
<missing>      2 years ago     /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4…   204MB     

项目中编写 dockerfile 思路

  1. 基于一个空的镜像
  2. 下载需要的环境 ADD
  3. 执行环境变量的配置 ENV
  4. 执行一些Linux命令 RUN
  5. 日志 CMD
  6. 端口暴露 EXPOSE
  7. 挂载数据卷 VOLUMES

这个过程就是你手动部署项目的过程,你通过 docker 可以再未来实现自动化构建。

CMD 与 ENTRYPOINT 区别

两个命令都是指定一个容器启动时要运行的命令,但二者有很大的区别

  • CMD:容器内有多个 CMD 指令时,只有最后一个 CMD 指令会生效,而如果在执行docker run命令时携带了其它命令,将会覆盖掉所有 dockerfile 的 CMD 指令

  • ENTRYPOINT:ENTRYPOINT 的命令不容易被覆盖。在docker run命令中提供的任何参数都会作为 ENTRYPOINT 命令的参数传递。

当两者组合使用时:那么 CMD 将作为 ENTRYPOINT 的默认参数,如果在docker run命令中提供了参数,它将覆盖 CMD 并作为 ENTRYPOINT 的参数传递。

例如:

FROM centos
CMD ["echo", "hello world"]

运行容器时,可以覆盖默认的 CMD:

docker build -f Dockerfile -t cmdtest .
docker run cmdtest /bin/bash

结果不会打印出hello world

使用 ENTRYPOINT 指令:

FROM centos
ENTRYPOINT ["echo", "hello "]
CMD ["world"]

运行容器时,可以传递参数给 ENTRYPOINT:

docker build -f Dockerfile -t entrytest .
docker run entrytest 	  	# 输出hello world
docker run entrytest akuya	# 输出hello akuya

练习:构建一个 tomcat,编写首页

使用空镜像从零构建一个完整的 tomcat

一般一个项目都在一个文件夹中,我们只需要在项目目录下编辑一个 Dockerfile 文件即可

当执行docker bulid指定时如果没有-f参数指定 dockerfile 文件,会默认寻找项目目录下的 Dockerfile 来构建镜像,所以我们名字通常设定为Dockerfile

准备工作:准备 tomcat 和 jdk 的 jar 包,创建Dockerfile文件,以及一个任意内容的readme.md即可

在这里插入图片描述

编辑Dockerfile,内容如下:

FROM centos:7.9.2009
MAINTAINER akuya<123456@qq.com># 宿主机目录下文件拷贝到容器内,文件如果不是绝对路径会默认寻找 dockerfile 文件的同级目录下,所以最好所有文件都在同一个目录下
COPY readme.md /usr/local/readme.md# 添加我们自己的安装包
ADD jdk-8u11-linux-x64.tar.gz /usr/local
ADD apache-tomcat-9.0.22.tar.gz /usr/local#安装vim编辑器
RUN yum -y install vim# 配置工作目录
ENV MYPATH /usr/local
WORKDIR $MYPATH# 配置环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.22
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin# 暴露端口
EXPOSE 8080# 启动的时候自动运行tomcat,打印日志
CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out

构建并运行:

# 构建,不指定 dockerfile 文件会自动寻找该目录下的 Dockerfile
docker build -t mytomcat .
# 运行
docker run -d -p 8080:8080 --name mytomcat \
-v /root/mytomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test \
-v /root/mytomcat/logs:/usr/local/apache-tomcat-9.0.22/logs \
--privileged=true \
mytomcat

运行成功后打开浏览器,输入ip地址:8080,即可访问到 tomcat 主页

在这里插入图片描述

在我们自定义的 tomcat 服务器中上传一个项目,在本地挂载目录,丢一个项目上去。

首先进入到我们挂载的宿主机目录下/root/mytomcat

[root@iZbp15293q8kgzhur7n6kvZ mytomcat]# cd /root/mytomcat/
[root@iZbp15293q8kgzhur7n6kvZ mytomcat]# ll
total 8
drwxr-xr-x 2 root root 4096 Mar 21 14:45 logs
drwxr-xr-x 2 root root 4096 Mar 21 14:45 test

在 test 目录下丢项目即可

示例:编写一个index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>docker test</title>
</head>
<body><h1>----------hello akuya----------------</h1><br><h2>my docker tomcattest</h2>
</body>
<script>console.log("my docker tomcat log")
</script>
</html>

浏览器访问ip地址:8080/test/

在这里插入图片描述

发布镜像

公有仓库:DockerHub

目前 DockerHub 网址无法访问,了解即可

注册dockerhub https://hub.docker.com/signup,需要有一个账号

发布镜像遵循以下几个步骤:

  1. 登录用户:
docker login

参数:

  • -u:等价于--username,登录所需的用户名
  • -p:等价于--password,密码
  1. 给要上传的镜像打上标签
docker tag 镜像id 镜像名:版本号
  1. 上传镜像
docker push 镜像名:版本号

私有仓库,一般都是公司内部自行搭建的,步骤跟上述相同

相关文章:

docker入门(八)—— dockerfile详细介绍,编写dockerfile

dockerfile&#xff08;重点&#xff09; 大家想想&#xff0c;Nginx&#xff0c;tomcat&#xff0c;mysql 这些镜像都是哪里来的&#xff1f;官方能写&#xff0c;我们不能写吗&#xff1f; 我们要研究自己如何做一个镜像&#xff0c;而且我们写的微服务项目打包上云部署&am…...

机器学习复习(9)——自定义dataset

目录 第一种dataset(文件夹名即为标签) 用于将格式&#xff08;1&#xff09;转换为格式&#xff08;2&#xff09; 第二种dataset(标签在labels文件夹下的对应的txt文件里面) 第一种dataset(文件夹名即为标签) 数据组织格式&#xff08;1&#xff09; --data ----train …...

【Redis】缓存穿透

问题发生背景&#xff1a;客户端请求的数据再缓存中和数据库中都不存在。 导致的问题&#xff1a;缓存永远不会生效&#xff0c;这些请求都会去请求数据库—导致数据库压力增大。 解决方案&#xff1a; 1.缓存空对象 在Redis中缓存空对象&#xff0c;告诉客户端数据库中没有该值…...

编程出现bug?怎么用Python打印异常

在 Python 编程中&#xff0c;异常是指程序执行过程中出现的错误或异常情况。当程序遇到异常时&#xff0c;为了更好地调试和定位问题&#xff0c;我们需要打印异常信息。本文将详细介绍如何在 Python 中打印异常&#xff0c;并提供一些示例和注意事项。 一、try-except 语句捕…...

P1958 上学路线

题目传送门&#xff1a;P1958 上学路线 一个DFS求迷宫的的题。 详细在代码里&#xff1a; #include <bits/stdc.h>using namespace std; int n,m,a[20][20],t,x,y,ans0; int dx[4]{0,1}; int dy[4]{1,0}; int flag[105][105]{0}; inline void dfs(register int x,regis…...

Android14之HIDL报错:Invalid sparse file format at header magic(一百九十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…...

旭日x3派目标跟随小车

目标跟随小车&#xff08;yolov5、安全帽识别&#xff09; 前言最终结果接线实现 前言 上板运行的后处理使用cython封装了&#xff0c;由于每个版本的yolo输出的形状不一样&#xff0c;这里只能用yolov5-6.2这个版本。 ①训练自己的模型并部署于旭日x3派参考&#xff1a; http…...

金潮实业邀您参观2024长三角快递物流展览会

展会介绍 本届展会致力于全面展示快递物流上下游领域的创新解决方案&#xff0c;涵盖快递物流供应链、智能装备、AGV机器人与无人搬运、自动识别、智慧仓储、智慧物流、无人配送、新能物流车及商用车、绿色包装、冷链物流等各个环节&#xff0c;为促进行业合作共融&#xff0c…...

【超细完整版】C# WebService 通过URL生成WSDL文件和DLL文件 【生成篇】

先学生成&#xff0c;再看调用哦 【超细完整版】C# 获取WebService所有方法并调用 【调用篇】 目的 支持通过web url (自适应“?wsdl”的有无) 生成.wsdl文件 和 .dll文件 实现 将通过一个类的三部分来实现这些功能 获取url中的ClassName &#xff08;GetClassNameFromUrl&a…...

申请公派访问学者难不难?

申请公派访问学者&#xff0c;对许多人来说是一项具有挑战性的任务。这需要充分的准备和计划&#xff0c;以确保申请能够顺利进行并最终获得批准。下面将探讨一些关于申请公派访问学者的问题以及应对策略。 首先&#xff0c;申请公派访问学者需要有一个明确的研究计划或合作意向…...

关于汽车中网改装需要报备吗?(第二天)

车联网改造需要申报吗&#xff1f; 今天2022年10月20日&#xff0c;小编就给大家介绍一下车联网改装是否需要申报的相关知识。 让我们来看看。 汽车格栅改装无需申报。 这种年检可以直接通过。 您不必担心&#xff0c;因为汽车格栅对于实车的外观来说并不陌生&#xff0c;因此…...

面试官:对于 Java 中多态的理解是什么?

面试官&#xff1a;对于 Java 中多态的理解是什么&#xff1f; 题目 面试官&#xff1a;对于 Java 中多态的理解是什么&#xff1f; 推荐解析 1.父类的引用指向子类的对象 子类重写父类的方法&#xff1a;子类可以继承父类的方法&#xff0c;并对其进行重写。当通过父类的…...

JUC-1M/75±5°超小型密封温度继电器 体积小、重量轻、控温精度高 JOSEF约瑟

JUC系列温度继电器 JUC-1M型超小型密封温度继电器 JUC-2M型超小型密封温度继电器 继电器JUC-027M/2531H-III-G温度继电器 JUC-1M 10C常开温度继电器 JUC-1M 105C温度继电器 用途 小型温控开关系接触感应式密封温度继电器&#xff0c;具有体积小、重量轻、控温精度高等特点&…...

filebeat 配置

主要就是证书的配置 ca_trusted_fingerprint: 产生方式 openssl x509 -fingerprint -sha256 -in /etc/elasticsearch/certs/http_ca.crt 产生的结果 SHA256 Fingerprint 中的冒号 替换掉就是我们想要的结果 ssl: enabled: true ca_trusted_fingerprint: "…...

Qt教程 — 3.5 深入了解Qt 控件:Display Widgets部件(1)

目录 1 Display Widgets简介 2 如何使用Display Widgets部件 2.1 QLabel组件-显示图像或文本 2.2 QCalendarWidget组件-日历简单的使用 2.3 QLCDNumber组件-控件作时钟的显示 2.4 QProgressBar组件-模拟手机电池充电 2.5 QFrame组件-绘制水平/垂直线 Display Widgets将分…...

网络安全框架和云安全参考架构介绍

目录 一、网络安全框架 1.1 概述 1.2 IATF框架 1.2.1 框架来源 1.2.2 框架结构图 1.2.3 框架内容 1.2.3.1 人&#xff08;People&#xff09; 1.2.3.2 技术&#xff08;Technology&#xff09; 1.2.3.3 操作&#xff08;Operation&#xff09; 1.3 NIST网络安全框架 …...

360企业安全浏览器兼容模式显示异常某个内容不显示 偶发现象 本地无法复现情况js

360企业安全浏览器兼容模式显示异常 &#xff0c;现象测试环境频发 &#xff0c;本地连测试无法复现&#xff0c;线上反馈问题。 出现问题的电脑为windows且使用360企业安全浏览器打开兼容模式可复现 复现过程&#xff1a; 不直接点击超链接跳转页面 &#xff0c;登录后直接通…...

JVM常见启动参数

目录 内存参数设置 垃圾收集 内存溢出 其他杂项 总结 java虚拟机&#xff08;JVM&#xff09;的启动参数可以用来调整其行为、性能和资源分配。以下是一些常见的JVM启动参数&#xff1a; 内存参数设置 初始化堆内存以满足应用程序需求是最常见的与性能相关的实践之一。 …...

单元测试、集成测试、系统测试区别

一、测方法不同 1、单元测试属于白盒测试范畴。 2、集成测试属于灰盒测试范畴。 3、系统测试属于黑盒测试范畴。 二、考察范围不同 1、单元测试主要测试单元内部的数据结构、逻辑控制、异常处理等。exception handling 2、集成测试主要测试模块之间的接口和接ロ数据传递关…...

NIVision-相机图像采集

应用场景 上位机与工业相机通讯&#xff0c;控制相机抓取图像。 工业相机的通讯接口大多为USB口或网口。 USB口则直接将通讯线缆插入上位机USB端口&#xff0c;打开MAX中设备与接口一栏可以看到电脑给相机分配的资源名称&#xff1b;网口则需要将网线连接相机和上位机&#xf…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

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* …...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

Linux中《基础IO》详细介绍

目录 理解"文件"狭义理解广义理解文件操作的归类认知系统角度文件类别 回顾C文件接口打开文件写文件读文件稍作修改&#xff0c;实现简单cat命令 输出信息到显示器&#xff0c;你有哪些方法stdin & stdout & stderr打开文件的方式 系统⽂件I/O⼀种传递标志位…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题&#xff1a;安全。文章将详细阐述认证&#xff08;Authentication) 与授权&#xff08;Authorization的核心概念&#xff0c;对比传统 Session-Cookie 与现代 JWT&#xff08;JS…...

土建施工员考试:建筑施工技术重点知识有哪些?

《管理实务》是土建施工员考试中侧重实操应用与管理能力的科目&#xff0c;核心考查施工组织、质量安全、进度成本等现场管理要点。以下是结合考试大纲与高频考点整理的重点内容&#xff0c;附学习方向和应试技巧&#xff1a; 一、施工组织与进度管理 核心目标&#xff1a; 规…...

Python爬虫实战:研究Restkit库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的有价值数据。如何高效地采集这些数据并将其应用于实际业务中,成为了许多企业和开发者关注的焦点。网络爬虫技术作为一种自动化的数据采集工具,可以帮助我们从网页中提取所需的信息。而 RESTful API …...