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

Docker--Docker镜像制作的注意事项

Docker 镜像制作 dockerfiles的指令讲解 链接

CMD和ENTRYPOINT

CMDENTRYPOINTDockerfile 中用于指定容器启动时运行命令的两个指令。它们在功能上有一些相似之处,但也存在重要区别。

在编辑Dockerfile时,ENTRYPOINT或者CMD命令会自动覆盖之前的ENTRYPOINT或者CMD命令,但是ENTRYPOINTCMD不会相互覆盖。

如果容器启动时通过 docker run 提供了命令行参数,CMD 的内容会被覆盖,而 ENTRYPOINT 的内容可以作为基础命令,并接收 CMD 或运行参数作为附加参数。

下面通过实例来进行讲解:

编辑Dockerfile1文件

FROM busybox
CMD echo "test cmd1"
CMD echo "TEST CMD1"

创建镜像并运行容器

docker build -t cmd:0.1 -f ./Dockerfile1 .
docker run --name cmd1 --rm cmd:0.1 
TEST CMD1

编辑Dockerfile2文件

FROM busybox
ENTRYPOINT echo "test cmd1"
ENTRYPOINT echo "TEST CMD1"

创建镜像并运行容器

docker build -t cmd:0.2 -f ./Dockerfile2 .
docker run --name cmd1 --rm cmd:0.2 
TEST CMD1

编辑Dockerfile3文件

FROM busybox
ENTRYPOINT echo "test cmd1"
CMD echo "TEST CMD1"

创建镜像并运行容器

docker build -t cmd:0.3 -f ./Dockerfile3 .
docker run --name cmd1 --rm cmd:0.3 
test cmd1

执行指令不会被覆盖,但只是执行一条语句

编辑Dockerfile0文件

FROM ubuntu:latest
ENTRYPOINT ["echo"]
CMD ["Hello from CMD"]

启动容器时,默认执行 echo "Hello from CMD"
如果运行 docker run myimage "Hello from run",输出 Hello from run,因为 CMD 的内容被覆盖,但 ENTRYPOINT 仍然是 echo

Shell形式和exec形式

exec形式:

ENTRYPOINT ["executable", "param1", "param2"]

Shell形式:

ENTRYPOINT command param1 param2

当使用shell表示法时,命令行程序作为sh程序的子程序运行;docker用bin/sh -c来调用
当用docker ps 查看时就能看出我们运行的是/bin/sh -c 的命令;这样运行的PID不是1;这也意味着Unix不会接收任何信号;

exec语法中,没有启动/bin/sh的命令,而是直接运行提供的命令,命令PID是1.

编辑dockerfile4文件
shell模式

FROM ubuntu:22.04
RUN apt-get update -y && apt install -y iputils-ping
CMD ping localhost

创建镜像并运行容器:

docker build -t cmd:0.4 -f ./Dockerfile4 .
docker run -d --name cmd1 --rm cmd:0.4
docker ps

在这里插入图片描述
查看容器可以看到命令为 /bin/sh -c为主程序

进入容器内进行查看,可以看到PID1是/bin/sh

docker exec -it cmd1 bash
ps -ef

在这里插入图片描述

编辑dockerfile5文件
exec模式

FROM ubuntu:22.04
RUN apt-get update -y && apt install -y iputils-ping
CMD ["ping","localhost"]

创建镜像并运行容器:

docker build -t cmd:0.5 -f ./Dockerfile5 .
docker run -d --name cmd1 --rm cmd:0.5

通过docker ps 查看:
在这里插入图片描述
进入到容器中查看

docker exec -it cmd1 bash
ps -ef

在这里插入图片描述
ENTRYPOINT也是一样的操作

组合模式

ENTRYPOINT可以作为默认的命令,CMD指定默认运行参数 ;
也就是说,docker会把CMD的命令拼接到ENTRYPOINT命令后面

编辑Dockerfie6文件内容:

FROM ubuntu:22.04
RUN apt-get update -y && apt install -y iputils-ping
ENTRYPOINT ["/bin/ping","-c","3"]
CMD ["localhost"]
docker build -t cmd:0.6 -f ./Dockerfile6 .
docker run --name cmd1 --rm cmd:0.6
PING localhost(localhost (::1)) 56 data bytes
64 bytes from localhost (::1): icmp_seq=1 ttl=64 time=0.020 ms
64 bytes from localhost (::1): icmp_seq=2 ttl=64 time=0.032 ms
64 bytes from localhost (::1): icmp_seq=3 ttl=64 time=0.031 ms

可以看到CMD的内容被添加进去了;

CMD参数替换

docker run --name cmd1 --rm cmd:0.6 www.baidu.com

在这里插入图片描述

善用.dockerignore 文件

.dockerignore 文件是 Docker 构建镜像时的重要工具,用于指定在构建过程中应忽略的文件和目录。合理使用 .dockerignore 可以显著减少镜像体积、加快构建速度,并避免将敏感信息打包到镜像中。

默认情况下,Docker 会将 Dockerfile 所在目录的所有文件和子目录复制到构建上下文(build context)中。如果目录中包含大量无关文件(如日志文件、临时文件、IDE 配置文件等),会导致构建上下文过大,从而增加镜像体积。

构建上下文越大,Docker 在构建镜像时需要传输和处理的数据就越多,导致构建时间变长。通过忽略不必要的文件,可以显著缩短构建时间。

如果构建上下文中包含敏感文件(如 .env、密钥文件、配置文件等),可能会被意外打包到镜像中,导致安全风险。

.dockerignore 文件的语法与 .gitignore 类似,支持通配符和模式匹配。
每一行定义一个匹配规则,空行和以 # 开头的行会被忽略。

常见模式
*:匹配任意文件或目录(不包括目录本身)。
**:匹配任意层级的子目录。
?:匹配单个字符。
[abc]:匹配括号内的任意一个字符。
!:取反,表示不忽略匹配的文件。

如:

# 忽略所有日志文件
*.log# 忽略临时文件
*.tmp
temp/# 忽略特定目录
node_modules/
.git/# 忽略所有隐藏文件(以.开头的文件)
.*# 包含特定文件(即使它匹配了其他规则)
!important.txt

下面通过实例来验证:
建立dockerfile

FROM centos:7COPY ./* /

编写.dockerignore

*.txt

创建几个文件
在这里插入图片描述
创建镜像

docker build -t test_ignore:1.0 ./

运行容器,然后查看目录内容

docker run  -it test_ignore:1.0

在这里插入图片描述
发现对应目录后缀txt文件都没有了

镜像的多阶段构建

多阶段构建是 Docker 提供的一种优化镜像构建流程的技术,允许在单个 Dockerfile 中使用多个 FROM 指令,每个 FROM 指令开启一个新的构建阶段。最终镜像只保留最后一个阶段的构建结果,从而大幅减小镜像体积,提升安全性和性能。

传统构建方式会将所有构建依赖(如编译器、构建工具)和中间产物打包到最终镜像中,导致镜像体积庞大。

构建工具和依赖可能包含已知漏洞,移除这些工具可以降低攻击面。

将构建逻辑集中在一个 Dockerfile 中,避免维护多个独立的构建脚本。

更小的镜像意味着更快的上传、下载和启动时间。

关键点
每个 FROM 指令开启一个新阶段。
阶段可以通过 AS关键字命名,方便后续引用。
使用 COPY --from= < stage > 从其他阶段复制文件。

实例:
编写dockerfile文件:

#第一阶段构建
FROM centos:7 AS basebuilderENV VERSION="1.0"RUN sed -e 's|^mirrorlist=|#mirrorlist=|g' \-e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos-vault/centos|g' \-i.bak \/etc/yum.repos.d/CentOS-Base.repoWORKDIR /srcCOPY demo.c .RUN yum makecache && yum install gcc -yRUN gcc -o demo demo.c && \rm -f demo.c && \yum remove -y gccCMD ["/src/demo"]

我们将以这个镜像作为第一阶段的构建,编写第一阶段的Dockerfile,所占内存:

:
编写第二阶段的Dockerfile:

#第一阶段构建
FROM centos:7 AS basebuilderENV VERSION="1.0"RUN sed -e 's|^mirrorlist=|#mirrorlist=|g' \-e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos-vault/centos|g' \-i.bak \/etc/yum.repos.d/CentOS-Base.repoWORKDIR /srcCOPY demo.c .RUN yum makecache && yum install gcc -yRUN gcc -o demo demo.c && \rm -f demo.c && \yum remove -y gccCMD ["/src/demo"]# 第二阶段构建
FROM CentOS7
# 拷贝第一阶段生成的可执行程序
COPY --from=basebuilder /src/demo /src/demo
# 运行可执行程序
CMD ["/src/demo"]

domo文件:

#include <stdio.h>int main()
{printf("Test commit image\n");return 0;
}

创建镜像及运行容器

docker build -t multi:0.2 .
docker run --name multi --rm multi:0.2
Test commit image

查看镜像大小:
在这里插入图片描述

像我们这种只是跑一个可执行程序文件而已,如果我们将第二阶段基本镜像换成busybox的话,那么所占内存会更小:
在这里插入图片描述

docker build -t multi:0.3 .
docker run --name multi --rm multi:0.3
Test commit image

在这里插入图片描述

合理利用缓存

Docker 构建镜像时,默认会利用缓存机制加速构建过程:
如果某层(RUN、COPY、ADD等指令)的输入未变化,Docker 会直接复用缓存结果,跳过重复执行。
优势:显著减少构建时间,尤其是在依赖较多或构建步骤复杂时。

Docker 镜像由多个层(Layer)组成,每层对应一个构建指令。
缓存以层为单位存储,只有当某层的输入(如文件内容、环境变量)变化时,该层及其后续层才会失效。

缓存失效规则

COPY/ADD 指令

  • 如果源文件内容变化,缓存失效。
  • 如果仅文件名或目录结构变化,但内容未变,缓存可能仍有效(取决于文件哈希值)。

RUN 指令

  • 如果依赖的上一层缓存失效,则当前层的缓存也会失效。

环境变量

  • ARG 和 ENV 的变化会导致后续层缓存失效。

所以要利用好缓存的规则

  • 将不常变化的指令放在前面,常变化的指令放在后面
  • 避免在关键层使用 COPY
  • 使用 ARG 参数控制构建环境

实例:
利用c++制作的镜像Dockerfile文件进行使用:

dockerfile:

FROM centos:7 AS basebuilderENV VERSION="1.0"RUN sed -e 's|^mirrorlist=|#mirrorlist=|g' \-e 's|^#baseurl=http://mirror.centos.org/centos|baseurl=https://mirrors.ustc.edu.cn/centos-vault/centos|g' \-i.bak \/etc/yum.repos.d/CentOS-Base.repoRUN yum makecache && yum install gcc -yWORKDIR /srcCOPY demo.c .RUN gcc -o demo demo.c && \rm -f demo.c && \yum remove -y gccCMD ["/src/demo"]

demo.c

#include <stdio.h>int main()
{printf("Test CACHE image\n");return 0;
}

第一次创建镜像

docker build -t cache:1.0 .

花费了40s的时间
在这里插入图片描述

第二次创建镜像之前,我们修改下demo.c:
在这里插入图片描述
再次创建镜像

docker build -t cache:2.0 .

在这里插入图片描述

会发现这次创建时间还是很多,这是因为demo.c的改变,影响了Dockerfile文件内容COPY demo.c . 后面全部内容,后面的内容都要进行重新创建;所以,安排好我们的执行语句顺序非常重要,将不常修改的语句放到前头,经常修改的语句放到后头;这里是我们安装gcc影响到了,但是对于我们来说又没有经常修改,所以我们将这条语句放到前面的位置

再次创建镜像

docker build -t cache:3.0 .                                                                                         
[+] Building 42.4s (11/11) FINISHED

由于我们改变了执行语句的顺序,所以需要重建
再次修改demo.c文件再创建镜像
在这里插入图片描述

docker build -t cache:4.0 .                                                                                         
[+] Building 1.9s (11/11) FINISHED

相关文章:

Docker--Docker镜像制作的注意事项

Docker 镜像制作 dockerfiles的指令讲解 链接 CMD和ENTRYPOINT CMD 和 ENTRYPOINT 是 Dockerfile 中用于指定容器启动时运行命令的两个指令。它们在功能上有一些相似之处&#xff0c;但也存在重要区别。 在编辑Dockerfile时&#xff0c;ENTRYPOINT或者CMD命令会自动覆盖之前…...

AI:支持向量机(SVM)

支持向量机(SVM)理论基础详解:从零开始的完全指南 一、SVM的核心思想:直观理解 1.1 什么是分类问题? 想象你在玩一个游戏:桌上有红色和蓝色的球,你需要画一条线把它们分开。这条线就是分类边界。SVM的目标是找到一条最优分界线,使得这条线到最近的红色球和蓝色球的距…...

Vue.js 中 v-if 的使用及其原理

在 Vue.js 的开发过程中&#xff0c;条件渲染是一项极为常见的需求。v-if指令作为 Vue.js 实现条件渲染的关键手段&#xff0c;能够根据表达式的真假来决定是否渲染某一块 DOM 元素。它在优化页面展示逻辑、提升用户体验等方面发挥着重要作用。接下来&#xff0c;我们就深入探讨…...

Vue.js 中 v-show 的使用及其原理

在 Vue.js 的开发过程中&#xff0c;我们常常需要根据不同的条件来控制页面元素的显示与隐藏。v-show指令作为 Vue.js 提供的重要工具之一&#xff0c;为我们实现这一功能提供了便捷的途径。它与v-if指令有些相似&#xff0c;但在使用方法和原理上存在着明显的区别。接下来&…...

docker安装redisSearch

1.背景 Redis Search 是 Redis 官方提供的全文搜索引擎,它为Redis 提供全文搜索、索引和复杂查询功能。它基于内存存储&#xff0c;结合了 Redis 的高性能和倒排索引技术&#xff0c;支持实时搜索、聚合分析、模糊匹配等场景。RedisSearch 适用于需要快速检索结构化或非结构化…...

ADI的BF561双核DSP怎么做开发,我来说一说(六)IDE硬盘设计

作者的话 ADI的双核DSP&#xff0c;最早的一颗是Blackfin系列的BF561&#xff0c;这颗DSP我用了很久&#xff0c;比较熟悉&#xff0c;且写过一些给新手的教程。 是的你没有看错&#xff0c;就是IDE&#xff0c;那个最老的硬盘&#xff0c;我们当年做过此类设计。 硬件准备 …...

5.数据结构-图

5.数据结构-图 5.1 图的定义和基本术语5.1.1 图的定义5.1.2 图的基本术语 5.2图的存储结构5.2.1邻接矩阵采用邻接矩阵表示法创建无向网邻接表 5.1 图的定义和基本术语 5.1.1 图的定义 图 G由两个集合V和E组成&#xff0c;记为 G ( V , E ) G(V,E) G(V,E)&#xff0c;其中V是…...

uni-app使用web-view传参的坑

问题描述 uni-app开发的一个页面&#xff0c;需要点击时跳转到PC端后台的一个详情页&#xff0c;所以需要传参如下&#xff1a; ticketIdticketCodetoken&#xff08;用于自动登录&#xff0c;校验身份的&#xff09; 但是吧&#xff0c;如果你明文传token&#xff0c;容易导…...

Android studio打包uniapp插件

一.参考资料与环境准备 原生工程配置需要使用到Android studio和HbuilderX 当前测试的as版本-20240301,下载地址&#xff1a;HbuilderX版本&#xff1a;4.36 二.插件创建流程 1.导入下载的UniPlugin-Hello-AS工程&#xff08;下载地址见参考资料&#xff09; 2.生成jks证书…...

SVT-AV1学习-函数selfguided_restoration_fast_internal

一 selfguided_restoration_fast_internal 函数作用 selfguided_restoration_fast_internal是SVT-AV1 编码器中用于自引导恢复Guided Resration SGR 的一个内部函数&#xff0c;通过自引导滤波技术对输入的去燥他图像数据进行处理&#xff0c;生成一个去燥版本的图像&#xff0…...

双引擎驱动:解密音视频体验的QoS技术底座与QoE感官革命

QoS 定义&#xff1a;QoS&#xff08;Quality of Service&#xff0c;服务质量&#xff09;衡量音视频传输技术层面的性能表现&#xff0c;聚焦网络传输和系统处理能力&#xff0c;通过客观指标量化服务质量。核心指标 码率/带宽&#xff1a;数据传输速率上限&#xff0c;直接…...

element-plus选择菜单栏不变色

代码&#xff1a; <template> ... <el-menu-item index"/task/execute"><el-icon><IconMenu /></el-icon><span>验收任务</span> </el-menu-item> <el-menu-item index"/task/change"><el-icon…...

uniapp加载json动画

一、添加canvas画布 <canvas id"lottie_demo" type"2d" style"display: inline-block;width: 148rpx; height: 148rpx;" /> 二、引入依赖和JSON文件 安装依赖 npm install lottie-miniprogram --save import lottie from lottie-mini…...

快递物流展同期举办2025中国智慧物流核心零部件创新论坛

2025中国智慧物流核心零部件创新论坛 会议主题&#xff1a;“AI ”重构智慧物流核心技术生态 会议介绍 随着人工智能、物联网、5G等技术的快速发展&#xff0c;智慧物流已成为全球物流行业转型升级的核心方向。在AI技术的驱动下&#xff0c;物流行业正从传统的“人、车、货”…...

ASP.NET图书馆借阅系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 近些年来&#xff0c;随着科技的飞速发展&#xff0c;互联网的普及逐渐延伸到各行各业中&#xff0c;给人们生活带来了十分的便利&#xff0c;图书馆借阅系统利用计算机网络实现信息化管理&#xff0c;使图书信息、图书借阅、归还的管理发展和服务水平有显著提升。 本文拟…...

在 Linux 终端中轻松设置 Chromium 的 User-Agent:模拟手机模式与自定义浏览体验

在 Linux 系统中&#xff0c;通过终端灵活控制 Chromium 的行为可以大幅提升工作效率。本文将详细介绍如何通过命令行参数和环境变量自定义 Chromium 的 User-Agent&#xff0c;并结合手机模式模拟&#xff0c;实现更灵活的浏览体验。 为什么需要自定义 User-Agent&#xff1f;…...

实验一 单管共射极放大电路

这篇文章是即兴写的&#xff0c;也不知道对不对&#xff0c;只有代码哦~~(文章结尾有彩蛋哦~~~&#xff09; 表1-1实验数据MATLAB代码&#xff1a; clear all; clc % 参数设置 VCC 12; % 电源电压 (V) RB1 45e3; % 偏置电阻 RB1 (Ohms) RB2 15e3; % 偏置电阻 RB2 (Ohms) R…...

10-python面向对象(上)

10-python面向对象【上】 1.面向对象简介2. 类(class)3. 类的定义4. 参数self4.1 属性和方法4.2 self 1.面向对象简介 Python是一门面向对象的编程语言 所谓面向对象的语言&#xff0c;简单理解就是语言中的所有操作都是通过对象来进行的 面向过程&#xff1a; 面向过程指将我们…...

Java 大视界 -- 基于 Java 的大数据分布式缓存技术在电商高并发场景下的性能优化(181)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…...

Apache Airflow开源程序是一个以编程方式编写、计划和监控工作流程的平台

一、软件介绍 文末提供程序和源码下载 Apache Airflow开源程序是一个以编程方式编写、计划和监控工作流程的平台&#xff0c;当工作流被定义为代码时&#xff0c;它们将变得更加可维护、可版本化、可测试和协作性。使用 Airflow 将工作流创作为任务的有向无环图 &#xff08;D…...

大数据学习(101)-spark的高可用模式

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…...

数字内容体验驱动用户参与增效

数字体验驱动参与增长 在数字化竞争日益激烈的市场环境中&#xff0c;数字内容体验已成为撬动用户深度参与的核心杠杆。通过个性化推荐算法与跨渠道分发策略的协同作用&#xff0c;企业能够精准匹配用户兴趣点&#xff0c;将碎片化信息转化为连贯的价值链条。数据显示&#xf…...

一文详解OpenGL环境搭建:Ubuntu20.4使用CLion配置OpenGL开发环境

在计算机图形学的广阔领域中,OpenGL作为行业标准的图形库,为开发者提供了强大的工具集来创建从简单的2D图形到复杂的3D世界。然而,对于初学者而言,配置一个合适的开发环境是迈向成功的第一步。本文将详细介绍如何在Ubuntu 20.04.3 LTS操作系统上搭建基于CLion的OpenGL开发环…...

欧拉函数模板

1.欧拉函数模板 - 蓝桥云课 问题描述 这是一道模板题。 首先给出欧拉函数的定义&#xff1a;即 Φ(n) 表示的是小于等于 n 的数中和 n 互质的数的个数。 比如说 Φ(6)2&#xff0c;当 n 是质数的时候&#xff0c;显然有 Φ(n)n−1。 题目大意&#xff1a; 给定 n 个正整数…...

用PointNet++训练自己的数据集(语义分割模型semseg)

&#xff08;1&#xff09;训练部件分割&#xff08;partseg&#xff09;模型和检测自己点云并将结果保存txt&#xff0c;请看博主上两篇文章 &#xff08;2&#xff09;本文背景是将pipe点云上的缺陷和本体检测出来&#xff0c;即1种语义场景&#xff08;pipe&#xff09;&…...

Java反射机制深度解析:方法、实战与底层机制

大家好&#xff0c;我是钢板兽&#xff01; 反射作为Java的特性&#xff0c;它不仅是Spring三大特性Ioc、DI、AOP的基础&#xff0c;而且MyBatis、Jackson序列化、rpc远程调用接口都用到了反射机制。 本文将带你系统性地掌握 Java 反射的使用&#xff0c;通过 JSON 反序列化的…...

查看wifi密码

netsh wlan show profile nameCMCC-Rkt_Wi-Fi5 keyclear CMCC-Rkt_Wi-Fi5是无线网名称...

RPC 发展史

RPC 发展史 RPC&#xff08;Remote Procedure Call&#xff09;即远程过程调用&#xff0c;随着微服务的兴起&#xff0c;每个服务都拥有自己的数据库&#xff0c;负责各自的模块&#xff0c;例如 keystone&#xff08;认证服务&#xff09;负责用户信息、权限认证的内容&…...

蓝桥杯基础算法-递归

代码简洁&#xff0c;但涉及到的运算&#xff0c;会随着递归层数的增加成指数级增长 路分析&#xff1a;第20行20列位于45度这条线上 这条线上的数字是1 5 13 25 41...两数之差:4 8 12 16 --->每一个都是在前面的基础上4&#xff0c;可以用递归或者循环 public class dem…...

山东大学离散数学第七章习题解析

参考教材&#xff1a;离散数学教程&#xff0c;徐秋亮 / 栾俊峰 / 卢雷 / 王慧 / 赵合计 编著&#xff0c;山东大学计算机科学与技术学院 注&#xff1a;该解析为个人所写&#xff0c;涵盖了 2022-2023-2 学期赵合计老师所布置的所有课本习题&#xff1b;由于学识、认识及经验…...

关于使用python 安装 flask-openapi3扩展,使用docker 环境的完整复盘

在某个时刻 需要运行python 3 flask-openapi3扩展 当前因为服务器为国产化服务器&#xff0c;操作系统版本为麒麟&#xff0c;python 版本为3.7 因为要安装flask-openapi3 包 又因为flask 版本小于2.0 from flask_openapi3 import OpenAPI,Info,Tag目前安装的是 …...

MybatisPlus的一些基本操作

mybatisplus分页 Testvoid testpage(){IPage<User> page new Page<>(1,3); ​userDao.selectPage(page,null);System.out.println("当前页码值&#xff1a;"page.getCurrent());System.out.println("每页显示数&#xff1a;"page.getSize());S…...

debian12安装mysql5.7.42(deb)

安装 官方文档 https://dev.mysql.com/doc/mysql-installation-excerpt/8.0/en/linux-installation-debian.html 上面是8.0的教程&#xff0c;服了我说怎么那么奇怪 5.7官方教程 https://dev.mysql.com/doc/mysql-installation-excerpt/5.7/en/linux-installation-debian.html …...

基于Python脚本实现Flink on YARN任务批量触发Savepoint的实践指南

基于Python脚本实现Flink on YARN任务批量触发Savepoint的实践指南 一、背景与价值 在流计算生产环境中&#xff0c;Flink on YARN的部署方式凭借其资源管理优势被广泛采用。Savepoint作为Flink任务状态的一致性快照&#xff0c;承载着故障恢复、版本升级、作业暂停等重要场景…...

Winform入门进阶企业级开发示例:http接口数据清洗转换、断线续传、mqtt数据传输实例详解(附代码资源下载)

场景 C#/Winform入门、进阶、强化、扩展、知识体系完善等知识点学习、性能优化、源码分析专栏分享: C#/Winform入门、进阶、强化、扩展、知识体系完善等知识点学习、性能优化、源码分析专栏分享_winform 强化学习-CSDN博客 如何将以上相关理论知识学以致用。下面针对Winform…...

PHP开发效率提升利器:通义灵码在VSCode中的应用与技巧

引言 在 PHP 开发领域&#xff0c;提高编码效率和质量是每位开发者追求的目标。通义灵码&#xff0c;作为一款由阿里云技术团队开发的智能编码助手&#xff0c;能够通过其强大的 AI 能力&#xff0c;为 PHP 开发者提供包括代码自动补全、智能注释、代码优化等多方面的支持。本…...

WHAT - React 错误边界处理 - react-error-boundary

目录 安装使用方式常用 Props使用场景 react-error-boundary 是一个由 Brian Vaughn 开发的 React 组件库&#xff0c;用于更方便地处理组件树中的错误&#xff08;错误边界&#xff09;。 阅读参考&#xff1a; React Error Boundariesreact-error-boundary 安装 npm inst…...

数据模型评估的四维黄金法则:从技术验证到业务价值证明

引言&#xff1a;为什么你的数据模型总被质疑&#xff1f; 在滴滴出行的一次核心业务会议上&#xff0c;数据团队与业务部门爆发了激烈争论&#xff1a;新上线的订单预测模型是否真的优于旧系统&#xff1f;数据工程师认为查询速度提升40%已是巨大成功&#xff0c;业务方却质疑…...

vscode ctrl+鼠标左键不能跳转

笔者使用的vscode版本是1.85.2&#xff08;一周前从1.99降下来的&#xff0c;因为版本过高连不上服务器&#xff09;。 使用python时突然发现代码看起来有些别扭&#xff0c;细看之下发现是import xxx语句中的包的颜色从之前的青色变成了现在的白色。再用ctrl左键点击包名试图…...

换动态IP对电脑有什么影响:全面解析与实用指南

在当今数字化时代&#xff0c;IP地址作为网络世界的"身份证"&#xff0c;对我们的网络体验有着重要影响。许多用户出于某些原因&#xff0c;会考虑更换动态IP地址。那么&#xff0c;这种操作究竟会对我们的电脑产生哪些影响&#xff1f;是利大于弊还是弊大于利&#…...

Go语言从零构建SQL数据库(6) - sql解析器(番外)- *号的处理

番外&#xff1a;处理SQL通配符查询 在SQL中&#xff0c;SELECT * FROM table是最基础的查询之一&#xff0c;星号&#xff08;*&#xff09;是一个通配符&#xff0c;表示"选择所有列"。虽然通配符查询看起来简单&#xff0c;但在解析器中需要特殊处理。下面详细介…...

大模型推理引擎选型与应用场景分析:SGLang、Ollama、VLLM 和 LLaMA.cpp

在当下的大模型技术生态中&#xff0c;SGLang、Ollama、VLLM 和 LLaMA.cpp 各具特色&#xff0c;适用于不同的应用场景和用户需求。以下是它们的核心特点及适用场景的深度剖析&#xff1a; 1. SGLang&#xff1a;高性能企业级推理引擎 核心优势&#xff1a; 零开销批处理&…...

参考平面跨分割情况下的信号回流

前言&#xff1a;弄清楚信号的回流路径&#xff0c;是学习EMC和高速的第一步&#xff01; 如果我们不管信号的回流路径&#xff0c;会造成什么后果&#xff1f;1、信号完整性问题&#xff0c;信号的回流路径不连续会导致信号反射、衰减和失真。2、信号衰减和噪声干扰&#xff…...

Vue2下载二进制文件

后端&#xff1a; controller: GetMapping(value "/get-import-template")public void problemTemplate(HttpServletRequest request, HttpServletResponse response) throws Exception {iUserService.problemTemplate(request, response);} service: void probl…...

AnimateCC基础教学:随机抽取花名册,不能重复

一.核心代码: this.btnStartObj.addEventListener("click", switchBtn); this.btnOkObj.addEventListener("click", oKBtn); createjs.Ticker.addEventListener("tick", updateRandom); var _this this; var nameArr ["张三", &quo…...

windows+cmake+vscode+NDK远程调试安卓端C++项目

windowscmakevscodeNDK远程调试安卓端C项目 windowscmakevscodeNDK远程调试安卓端C项目 windowscmakevscodeNDK远程调试安卓端C项目 使用C开发安卓端算法库时&#xff0c;需要使用NDK进行交叉编译。使用NDK编译代码时&#xff0c;需要编写.mk脚本进行代码的编译和链接&#xf…...

大语言模型(LLM)全解析:从原理到实战应用

在人工智能飞速发展的今天&#xff0c;大语言模型(LLM)已成为改变我们工作生活的重要技术。无论是ChatGPT的对话能力&#xff0c;还是DeepSeek的文本处理&#xff0c;背后都离不开LLM的强大支持。本文将用通俗易懂的语言&#xff0c;带您全面了解LLM的工作原理、训练方法、优化…...

Qt 入门 4 之标准对话框

Qt 入门 4 之标准对话框 Qt提供了一些常用的对话框类型,它们全部继承自QDialog类,并增加了自己的特色功能,比如获取颜色、显示特定信息等。下面简单讲解这些对话框,可以在帮助索引中查看Standard Dialogs关键字,也可以直接索引相关类的类名。 本文将以一个新的项目为主介绍不…...

PyTorch DataLoader 参数详解

在使用 PyTorch 的 DataLoader 时&#xff0c;有许多参数可以调整&#xff0c;这些参数能够帮助我们平衡数据加载效率、内存使用和训练过程的稳定性。下面介绍几个常用参数&#xff0c;并讲解它们的作用&#xff1a; dataset 含义&#xff1a; 数据集对象&#xff0c;必须实现 …...

PowerBI 计算时间用EDATE

我在原表基础上&#xff0c;根据日期字段&#xff0c;计算去年时间 CONCATENATEX(DISTINCT(SELECTCOLUMNS(VALUES(日期表),"去年", FORMAT(DATEADD([日期], -1, YEAR), "yyyyMM"))), [YearMonth],",") 我发现很奇怪的现象&#xff0c;假如某个日…...