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

【docker】使用 Dockerfile 构建镜像

一、什么是Dockerfile

Dockerfile 是用于构建 Docker 镜像的文本文件。它包含了一系列的指令,用于描述如何构建镜像的步骤和配置。

通过编写 Dockerfile,您可以定义镜像的基础环境、安装软件包、复制文件、设置环境变量等操作。Dockerfile 提供了一种可重复、可自动化的方式来构建镜像,使得您可以轻松地创建和部署应用程序的容器化版本。

Dockerfile 的编写非常灵活,您可以根据自己的需求和项目的特点来定义构建镜像的步骤和配置。通过使用 Dockerfile,您可以将整个构建过程以代码的形式进行版本控制,并且可以轻松地在不同的环境中重复构建相同的镜像。

Dockerfile的基本结构包括四个部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

Docker以从上到下的顺序运行Dockerfile的指令。为了指定基本映像,第一条指令必须是FROM。一个声明以“#”字符开头则被视为注释。

在Dockerfile中可以使用多种指令,例如RUN、CMD、FROM、EXPOSE、ENV等。这些指令可以用来定义镜像的操作系统、软件安装、环境变量等。

一旦编写好 Dockerfile,您可以使用 Docker 命令来构建镜像。通过运行 docker build 命令并指定 Dockerfile 的路径,Docker 引擎将根据 Dockerfile 中的指令逐步执行构建过程,生成一个新的镜像。

总结来说,Dockerfile 是一个用于定义构建 Docker 镜像的文本文件,它提供了一种可重复、可自动化的方式来构建和配置镜像,使得容器化应用程序的构建和部署更加简单和可靠。

二、Dockerfile 中常用的指令

指令说明
FROM指定基础镜像
MAINTAINER设置维护者信息
RUN在镜像中执行命令
CMD指定容器启动时要执行的命令
ENTRYPOINT与 CMD 类似,但不会被 docker run 命令行参数覆盖
COPY复制文件或目录到镜像中
ADD复制文件或目录到镜像中,支持远程 URL 和解压缩功能
ENV设置环境变量
ARG定义构建时的变量,可以通过 --build-arg 参数传递
WORKDIR设置工作目录
EXPOSE声明容器运行时需要监听的端口
USER指定运行容器时的用户名或 UID
HEALTHCHECK定义容器的健康检查命令
VOLUME声明容器中的挂载点
LABEL为镜像添加元数据

这些指令可以根据需要灵活组合,构建出符合需求的 Docker 镜像。请注意,Dockerfile 中的指令顺序很重要,因为每个指令都会创建一个新的镜像层,而后续的指令将基于前面的镜像层进行操作。

更详细的指令说明和用法,请参考 Docker 官方文档:https://docs.docker.com/engine/reference/builder/

三、Dockerfile 使用示例

1、以nginx为例,通过Dockerfile构建镜像

以下是一个简单的 Dockerfile 示例,以构建一个基于 Nginx 的镜像:

# 使用基础镜像
FROM nginx:latest# 复制自定义配置文件到镜像中
COPY nginx.conf /etc/nginx/nginx.conf# 复制静态文件到镜像中
COPY static /usr/share/nginx/html# 暴露容器的80端口
EXPOSE 80# 设置容器启动时执行的命令
CMD ["nginx", "-g", "daemon off;"]

在这个示例中,我们选择了一个基于最新版本的 Nginx 镜像作为基础镜像。然后,我们将自定义的 nginx.conf 配置文件复制到镜像中的 /etc/nginx/nginx.conf 路径下。接下来,我们将静态文件复制到镜像中的 /usr/share/nginx/html 路径下。然后,我们使用 EXPOSE 指令来声明容器运行时需要监听的端口,这里是80端口。最后,我们使用 CMD 指令来指定容器启动时要执行的命令,即运行 Nginx 并保持守护进程模式。

您可以将这个 Dockerfile 文件与您的 Nginx 配置文件和静态文件放在同一个目录下,并使用以下命令构建镜像:

docker build -t mynginx .

然后,您可以使用以下命令运行容器:

docker run -d -p 80:80 mynginx

这将启动一个容器,并将容器的80端口映射到主机的80端口,从而可以通过主机的80端口访问 Nginx 服务。

请注意,这只是一个简单的示例,实际的 Dockerfile 可能会更复杂,根据您的项目需求进行相应的配置和调整。

2、以Java Springboot项目为例

当您在Java中使用Spring Boot项目时,可以使用以下示例Dockerfile来构建和运行您的应用程序:

# 使用基础的Java镜像
FROM openjdk:8-jdk-alpine# 定义ARG指令传入jar包名称和文件路径
ARG JAR_FILE
ARG APP_HOME=/app# 创建应用目录
RUN mkdir -p ${APP_HOME}# 将jar包复制到应用目录
COPY ${JAR_FILE} ${APP_HOME}/app.jar# 设置工作目录
WORKDIR ${APP_HOME}# 暴露端口
EXPOSE 8080# 运行Spring Boot应用
CMD ["java", "-jar", "app.jar"]

使用该Dockerfile构建镜像时,可以通过–build-arg参数传入jar包名称和文件路径,例如:

docker build -t my-springboot-app --build-arg JAR_FILE=my-app.jar .

这将构建一个名为my-springboot-app的镜像,并将my-app.jar复制到镜像中的/app目录下。然后,可以通过运行该镜像来启动Spring Boot应用程序:

docker run -d -p 8080:8080 my-springboot-app

这将在本地的8080端口上运行您的Spring Boot应用程序。

3、多阶段构建示例(多次FROM)

在Dockerfile中,FROM指令用于指定基础镜像。虽然在一个Dockerfile中只能有一个FROM指令作为起点,但您可以使用多个FROM指令来构建多个阶段的镜像。每个FROM指令都会创建一个新的镜像层,并且可以在后续的指令中引用前面的镜像层。以下是一个示例:

# 第一个阶段:基于Node.js的构建阶段
FROM node:14 as builder
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN npm run build# 第二个阶段:基于Nginx的运行阶段
FROM nginx:latest
COPY --from=builder /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

在上面的示例中,我们使用了两个FROM指令。第一个FROM指令使用了Node.js作为基础镜像,并在其中构建了应用程序。第二个FROM指令使用了Nginx作为基础镜像,并从第一个阶段的镜像中复制构建好的应用程序。这样可以将构建和运行分离,减小最终镜像的大小,并提高镜像的安全性。

四、docker build命令详解

docker build 命令用于从 Dockerfile 创建镜像。语法如下:

docker build [OPTIONS] PATH | URL | -

其中, PATH 是 Dockerfile 所在的路径, URL 是 Dockerfile 的 URL, - 表示从标准输入读取 Dockerfile。

docker build 命令可以使用以下选项:

  • -t :指定镜像的名称和标签。
  • -f :指定 Dockerfile 的路径或 URL。
  • -q :只显示镜像 ID。
  • -no-cache :不使用缓存构建镜像。
  • -build-arg :指定构建镜像时使用的参数。
  • -force-rm :在构建镜像时删除中间容器。
  • -target :指定构建镜像的目标阶段。

以下是 docker build 命令的一些示例:

# 从当前目录构建镜像
docker build -t my-image .# 从指定路径构建镜像
docker build -t my-image /path/to/Dockerfile# 从指定 URL 构建镜像
docker build -t my-image https://github.com/docker/dockerfile-examples/blob/master/nginx.dockerfile# 只显示镜像 ID
docker build -t my-image -q .# 不使用缓存构建镜像
docker build -t my-image -no-cache .# 指定构建镜像时使用的参数
docker build -t my-image -build-arg VERSION=1.0 .# 在构建镜像时删除中间容器
docker build -t my-image -force-rm .# 指定构建镜像的目标阶段
docker build -t my-image -target build .

docker build 命令是构建 Docker 镜像的常用命令。它可以用于从 Dockerfile 创建镜像,也可以从指定的路径或 URL 创建镜像。

补充说明--target参数

-target 参数用于指定构建镜像的目标阶段。当 Dockerfile 中定义了多个阶段时,可以使用 -target 参数来选择性地构建特定阶段的镜像。

在 Dockerfile 中定义多个阶段时,可以使用 AS 关键字为每个阶段命名。例如:

FROM base AS build
RUN apt-get update && apt-get install -y build-essentialFROM base AS test
RUN apt-get update && apt-get install -y curlFROM base AS deploy
COPY --from=build /app /app
COPY --from=test /test /test

在上面的示例中,Dockerfile 定义了三个阶段: buildtestdeploy 。每个阶段都有一个特定的操作。 deploy 阶段依赖于 buildtest 阶段的结果。

使用 -target 参数,可以选择性地构建特定的阶段。例如,要只构建 build 阶段的镜像,可以执行以下命令:

docker build -t my-image --target build .

这将只构建 build 阶段的镜像,并忽略其他阶段。通过 -target 参数,可以控制构建过程中所涉及的阶段,从而提高构建效率。

需要注意的是, -target 参数只能选择构建过程中的某个阶段,而不能选择构建过程中的某个指令。因此,指定的目标阶段必须在 Dockerfile 中明确定义。

-target 参数是一个有用的选项,特别适用于大型项目或复杂的构建流程,可以帮助减少构建时间并提高构建效率。

参考

Docker 官方文档:https://docs.docker.com/engine/reference/builder/

相关文章:

【docker】使用 Dockerfile 构建镜像

一、什么是Dockerfile Dockerfile 是用于构建 Docker 镜像的文本文件。它包含了一系列的指令,用于描述如何构建镜像的步骤和配置。 通过编写 Dockerfile,您可以定义镜像的基础环境、安装软件包、复制文件、设置环境变量等操作。Dockerfile 提供了一种可…...

计算机网络—— 概述

概述 1.1 因特网概述 网络、互联网和因特网 网络由若干结点和连接这些结点的链路组成多个网络还可以通过路由器互联起来,这样就构成了一个覆盖范围更大的网络,即互联网(或互连网)。因特网(Internet)是世…...

“超人练习法”系列06:如何更好地掌握技能?

01 掌握的阶段 关于人类学习新事物的最生动、最精妙的比喻,我是从笑来老师那里学到的。 他指出,学习新知识、新概念犹如在构建自己大脑皮层,每个习得的概念就像是大脑皮层上的一个个微小神经元。 一个看似聪明、博学的人,总能在各…...

【华为OD机试真题2023CD卷 JAVAJS】字符串拼接

华为OD2023(C&D卷)机试题库全覆盖,刷题指南点这里 字符串拼接 知识点数组递归 时间限制:1s 空间限制:256MB 限定语言:不限 题目描述: 给定M(0<M<=30)个字符(a-z),从中取出任意字符(每个字符只能用一次)拼接成长度为N(0<N<=5)的字符串,要求相同的字…...

【算法】链表-20240109

这里写目录标题 一、141. 环形链表二、876. 链表的中间结点三、面试题 02.01. 移除重复节点 一、141. 环形链表 简单 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中…...

机器学习系列--R语言随机森林进行生存分析(2)

随机森林&#xff08;Breiman 2001a&#xff09;&#xff08;RF&#xff09;是一种非参数统计方法&#xff0c;需要没有关于响应的协变关系的分布假设。RF是一种强大的、非线性的技术&#xff0c;通过拟合一组树来稳定预测精度模型估计。随机生存森林&#xff08;RSF&#xff0…...

Flutter GetX 之 状态管理

上一篇文章为大家介绍了 GetX的 路由管理,让大家对GetX有了初步了解,今天为大家介绍一下GetX的 状态管理。 StatelessWidget 和 StatefulWidget 介绍 在介绍之前,先简单介绍一下 Flutter 页面的 StatelessWidget 和 StatefulWidget ,其实Flutter的本质是万物都是Widget,…...

e2studio开发磁力计LIS2MDL(1)----轮询获取磁力计数据

e2studio开发磁力计LIS2MDL.1--轮询获取磁力计数据 概述视频教学样品申请源码下载速率新建工程工程模板保存工程路径芯片配置工程模板选择时钟设置UART配置UART属性配置设置e2studio堆栈e2studio的重定向printf设置R_SCI_UART_Open()函数原型回调函数user_uart_callback ()prin…...

C++ 字符串大小写转换,替换,文件保存 方法封装

此示例程序方法已经封装好使用std::islower()函数可以检查一个字符是否是小写字母,使用std::isupper()函数可以检查一个字符是否是大写字母。 如果传入的字母是小写字母,则使用std::toupper()函数将其转换为大写字母,并输出转换后的结果。 如果输入的字母是大写字母,则使…...

计算机基础面试题 |19.精选计算机基础面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…...

mysql 添加用户并分配select权限

1.root用户先登录或者在可执行界面 1.1 选择mysql 点击mysql 或者在命令行 use mysql 1.2创建用户 CREATE USER username% IDENTIFIED BY password; 备注1&#xff1a;%替换为可访问数据库的ip&#xff0c;例如“127.0.0.1”“192.168.1.1”&#xff0c;使用“%”表示不限制…...

重新认识canvas,掌握必要的联结密码

查看专栏目录 canvas示例教程100专栏&#xff0c;提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重…...

Linux第21步_取消鼠标中键的复制粘贴功能

在ubuntu18.04操作系统中&#xff0c;选中文本后&#xff0c;若按下鼠标中键&#xff0c;就可以执行复制粘贴&#xff0c;相当于 CtrlshiftC 后又按了 CtrlshiftV。在Linux系统中&#xff0c;基本上都是这么配置的。在windows系统中&#xff0c;我们习惯用Ctrl-C复制&#xff0…...

数学建模-Matlab R2022a安装步骤

软件介绍 MATLAB是一款商业数学软件&#xff0c;用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境&#xff0c;主要包括MATLAB和Simulink两大部分&#xff0c;可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程…...

【AI】Pytorch 系列:学习率设置

a. 有序调整:等间隔调整(Step),按需调整学习率(MultiStep),指数衰减调整(Exponential)和 余弦退火CosineAnnealing。 b. 自适应调整:自适应调整学习率 ReduceLROnPlateau。 c. 自定义调整:自定义调整学习率 LambdaLR。 #得到当前学习率 lr = next(iter(optimizer.param_gr…...

LeetCode第107题 - 二叉树的层序遍历 II

题目 解答 class Solution {List<List<Integer>> nodeLevels new LinkedList<>();public List<List<Integer>> levelOrderBottom(TreeNode root) {levelOrder(root, 0);List<List<Integer>> nodeLevels2 new LinkedList<>…...

java 常⽤的线程池模式FixedThreadPool

java 常⽤的线程池模式FixedThreadPool 线程池中的线程数量是固定的。 当提交一个新任务时&#xff0c;如果线程池中的线程都在运行&#xff0c;新任务就会被放入任务队列中等待执行。 如果线程池中的所有线程都在运行&#xff0c;且任务队列已满&#xff0c;那么线程池会创建新…...

双机调度算法

假设当前有两个处理机A、B&#xff0c;以及n个待处理的任务。第i个任务在处理处理机A上处理需要的时间为ai&#xff0c;在处理机B上处理的时间为bi&#xff0c;两个处理机可以并行处理任务&#xff0c;但单个处理机不能同时执行任务。要求给定n个任务及各个任务对应的ai 、bi&a…...

精进单元测试技能——Pytest断言的艺术

本篇文章主要是阐述Pytest在断言方面的应用。让大家能够了解和掌握Pytest针对断言设计了多种功能以适应在不同测试场景上使用。 了解断言的基础 在Pytest中&#xff0c;断言是通过 assert 语句来实现的。简单的断言通常用于验证预期值和实际值是否相等&#xff0c;例如&#xf…...

探索人工智能:深度学习、人工智能安全和人工智能

深度学习是人工智能的一种重要技术&#xff0c;它模拟了人类大脑神经网络的工作原理&#xff0c;通过建立多层次的神经元网络来实现对数据的分析和处理。这种技术的引入使得人工智能的发展进入到了一个新的阶段。 现如今&#xff0c;深度学习在各个领域都有着广泛的应用。例如…...

CHS_02.1.4+操作系统体系结构 二

CHS_02.1.4操作系统体系结构 二 操作系统的结构 上篇文章我们只介绍过宏内核 也就是大内核以及微内核分层结构的操作系统模块化是一种很经典的程序设计思想宏内核和微内核外核 操作系统的结构 上篇文章我们只介绍过宏内核 也就是大内核以及微内核 今年大纲又增加了分层结构 模块…...

【python可视化大屏】使用python实现可拖拽数据可视化大屏

介绍&#xff1a; 我在前几期分享了关于爬取weibo评论的爬虫&#xff0c;同时也分享了如何去进行数据可视化的操作。但是之前的可视化都是单独的&#xff0c;没有办法在一个界面上展示的。这样一来呢&#xff0c;大家在看的时候其实是很不方便的&#xff0c;就是没有办法一目了…...

FineBI实战项目一(4):指标分析之每日订单总额/总笔数

1 明确数据分析目标 统计每天的订单总金额及订单总笔数 2 创建用于保存数据分析结果的表 use finebi_shop_bi;create table app_order_total(id int primary key auto_increment,dt date,total_money double,total_cnt int ); 3 编写SQL语句进行数据分析 selectsubstring(c…...

如何确定CUDA对应的pytorch版本?

参考&#xff1a;此链接...

分布式锁3: zk实现分布式锁5 使用中间件curator

一 curator的说明 1.1 curator的说明 curator是netflix公司开源的一个zk客户端。对Zookeeper提供的原生客户端进行封装&#xff0c;简化了Zookeeper客户端的开发量。Curator解决了很多zookeeper客户端非常底层的细节开发工作&#xff0c;包括连接重连、反复注册wathcer和Node…...

扩展边界opencv

扩展图像的边缘&#xff08;如上边增加50像素&#xff09;通常是通过添加额外的像素行来实现的 使用cv2.copyMakeBorder函数 valueborder_color指定了边框的颜色 import cv2 import numpy as np# 读取图像 image cv2.imread(th.jpg)# 设置边框宽度 top_border_width 50 # …...

开源C语言库Melon:Cron格式解析

本文介绍开源C语言库Melon的cron格式解析。 关于 Melon 库&#xff0c;这是一个开源的 C 语言库&#xff0c;它具有&#xff1a;开箱即用、无第三方依赖、安装部署简单、中英文文档齐全等优势。 Github repo 简介 cron也就是我们常说的Crontab中的时间格式&#xff0c;格式如…...

vue的学习方法

学习Vue.js的方法如下&#xff1a; 先了解基本概念和语法&#xff1a;学习Vue.js的第一步是了解它的基本概念&#xff0c;例如组件、指令、数据绑定等。你可以开始阅读Vue官方文档并参考教程和示例来掌握这些基本概念和语法。 实践项目&#xff1a;在理解了Vue.js的基本概念和…...

Hive之set参数大全-2

C 指定是否启用表达式缓存的评估 hive.cache.expr.evaluation 是 Hive 中的一个配置属性&#xff0c;用于指定是否启用表达式缓存的评估。表达式缓存是一项优化技术&#xff0c;它可以在执行查询时缓存表达式的评估结果&#xff0c;以减少计算开销。 在 Hive 配置中&#xf…...

C++面试宝典第17题:找规律填数

题目 仔细观察下面的数字序列,找到规律,并填写空白处的数字。 (1)1, 2, 4, 7, 11, 16, __ (2)-1, 2, 7, 28, __, 126 (3)6, 10, 18, 32, 57, __ (4)19, 6, 1, 2, 11, __ (5)2, 3, 5, 7, 11, __ (6)1, 8, 9, 4, __, 1/6 (7)1, 2, 3, 7, 16, __, 321 (8)1, 2, …...

ubuntu查看内存使用情况

在Ubuntu中&#xff0c;你可以使用一些命令来查看内存使用情况。这些命令可以帮助你了解系统的内存使用情况&#xff0c;包括已用内存、空闲内存、缓存和缓冲区的内存等。 1、使用free命令 free命令是一个非常有用的命令&#xff0c;可以快速查看系统的内存使用情况。在终端中…...

ES6 新增 Set、Map 两种数据结构的理解

ES6 新增 Set、Map 两种数据结构的理解 Set 是一种叫做集合的数据结构&#xff0c; 集合是由一堆无序的、相关联的 , 且不重复的内存结构【 数学中称为元素 】组成的组合&#xff1b; Map 是一种叫做字典的数据结构 字典是一些元素的集合 。每个元素有一个称作 key 的域 , 不同…...

影视视频知识付费行业万能通用网站系统源码,三网合一,附带完整的安装部署教程

在数字化时代&#xff0c;知识付费行业逐渐成为主流。人们对高质量内容的需求日益增长&#xff0c;越来越多的人愿意为有价值的知识和信息服务付费。为了满足这一市场需求&#xff0c;罗峰给大家分享一款全新的影视视频知识付费网站系统源码&#xff0c;为用户提供一站式的知识…...

Java字符串拼接常用方法总结

使用场景&#xff1a;用某个分隔符拼接字符串 下边是我使用过的几种方式废话不多说&#xff0c;直接上代码初始数据 1.使用流2.StringBuilder3.[StringJoiner](https://blog.csdn.net/qq_43417581/article/details/126076152?ops_request_misc%257B%2522request%255Fid%2522%2…...

【2023 CSIG垂直领域大模型】大模型时代,如何完成IDP智能文档处理领域的OCR大一统?

目录 一、像素级OCR统一模型&#xff1a;UPOCR1.1、为什么提出UPOCR&#xff1f;1.2、UPOCR是什么?1.2.1、Unified Paradigm 统一范式1.2.2、Unified Architecture统一架构1.2.3、Unified Training Strategy 统一训练策略 1.3、UPOCR效果如何&#xff1f; 二、OCR大一统模型前…...

Phi-2小语言模型QLoRA微调教程

前言 就在不久前&#xff0c;微软正式发布了一个 27 亿参数的语言模型——Phi-2。这是一种文本到文本的人工智能程序&#xff0c;具有出色的推理和语言理解能力。同时&#xff0c;微软研究院也在官方 X 平台上声称&#xff1a;“Phi-2 的性能优于其他现有的小型语言模型&#…...

hadoop自动获取时间

1、自动获取前15分钟 substr(from_unixtime(unix_timestamp(concat(substr(20240107100000,1,4),-,substr(20240107100000,5,2),-,substr(20240107100000,7,2), ,substr(20240107100000,9,2),:,substr(20240107100000,11,2),:,00))-15*60,yyyyMMddHHmmss),1) unix_timestam…...

【面试高频算法解析】算法练习8 单调队列

前言 本专栏旨在通过分类学习算法&#xff0c;使您能够牢固掌握不同算法的理论要点。通过策略性地练习精选的经典题目&#xff0c;帮助您深度理解每种算法&#xff0c;避免出现刷了很多算法题&#xff0c;还是一知半解的状态 专栏导航 二分查找回溯&#xff08;Backtracking&…...

ATTCK视角下的信息收集:Sysmon检测

目录 1、简介 2、使用Sysmon 3、检测Sysmon是否安装运行 4、检测Sysmon是否被卸载 5、使Sysmon在终端隐匿运行的技术 1、简介 Sysmon&#xff08;系统监视器&#xff09;是由windows sysinternals 出品的Sysinternals 系列工具中的一个 它是windows系统服务和设备驱动程…...

02、Kafka ------ 配置 Kafka 集群

目录 配置 Kafka 集群配置步骤启动各Kafka节点 配置 Kafka 集群 启动命令&#xff1a; 1、启动 zookeeper 服务器端 小黑窗输入命令&#xff1a; zkServer 2、启动 zookeeper 的命令行客户端工具 &#xff08;这个只是用来看连接的节点信息&#xff0c;不启动也没关系&#…...

2024年全球网络安全预测报告

1.Gartner Gartners Top Strategic Predictions for 2024 and Beyond《Gartner顶级战略预测&#xff1a;2024年及未来》 https://www.gartner.com/en/articles/gartner-s-top-strategic-predictions-for-2024-and-beyond 2.IDC Top 10 Worldwide IT Industry 2024 Predict…...

Qt - QML与C++数据交互详解

文章目录 1 . 前言2 . Qml调用C的变量3 . Qml调用C的类4 . Qml调用C的方法5 . Qml接收C的信号6 . C接收Qml的信号&#xff08;在Qml中定义信号槽&#xff09;7 . C接收Qml的信号&#xff08;在C中定义信号槽&#xff09;8 . C调用Qml的函数9 . 总结 【极客技术传送门】 : https…...

Kettle Local引擎使用记录(一)(基于Kettle web版数据集成开源工具data-integration源码)

Kettle Web &#x1f4da;第一章 前言&#x1f4da;第二章 demo源码&#x1f4d7;pom.xml引入Kettle引擎核心文件&#x1f4d7;java源码&#x1f4d5; controller&#x1f4d5; service&#x1f4d5; 其它&#x1f4d5; maven settings.xml &#x1f4d7;测试&#x1f4d5; 测试…...

Java--业务场景:在Spring项目启动时加载Java枚举类到Redis中(补充)

文章目录 前言步骤测试结果 前言 通过Java–业务场景&#xff1a;在Spring项目启动时加载Java枚举类到Redis中,我们成功将Java项目里的枚举类加载到Redis中了&#xff0c;接下来我们只需要写接口获取需要的枚举值数据就可以了&#xff0c;下面一起来编写这个接口吧。 步骤 在…...

WPF 基础入门(资源字典)

资源字典 每个Resources属性存储着一个资源字典集合。如果希望在多个项目之间共享资源的话&#xff0c;就可以创建一个资源字典。资源字段是一个简单的XAML文档&#xff0c;该文档就是用于存储资源的&#xff0c;可以通过右键项目->添加资源字典的方式来添加一个资源字典文件…...

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《考虑电氢耦合和碳交易的电氢能源系统置信间隙鲁棒规划》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 这标题涉及到一个复杂的能源系统规划问题&#xff0c;其中考虑了电氢耦合、碳交易和置信间隙鲁棒规划。以下是对标题各个部分的解读&#xff1a; 电氢耦…...

ubuntu设定时间与外部ntp同步

前言 在 Ubuntu 上&#xff0c;你可以通过配置 systemd-timesyncd 服务来与外部 NTP 服务器同步系统时间。下面是设置的步骤&#xff1a; 安装 NTP 工具&#xff1a; 如果你的系统中没有安装 ntpdate 工具&#xff0c;可以使用以下命令安装&#xff1a; sudo apt-get updat…...

DataFrame详解

清洗相关的API 清洗相关的API: 1.去重API: dropDupilcates 2.删除缺失值API: dropna 3.替换缺失值API: fillna 去重API: dropDupilcates dropDuplicates(subset):删除重复数据 1.用来删除重复数据,如果没有指定参数subset,比对行中所有字段内容,如果全部相同,则认为是重复数据,…...

控制障碍函数(Control Barrier Function,CBF) 三、代码

三、代码实现 3.1、模型 这是一个QP问题&#xff0c;所以我们直接建模 这其实还是之前的那张图&#xff0c;我们把这个大的框架带入到之前的那个小车追击的问题中去&#xff0c;得到以下的一些具体的约束条件 CLF约束 L g V ( x ) u − δ ≤ − L f V ( x ) − λ V ( x ) …...

哈希表-散列表数据结构

1、什么是哈希表&#xff1f; 哈希表也叫散列表&#xff0c;哈希表是根据关键码值(key value)来直接访问的一种数据结构&#xff0c;也就是将关键码值(key value)通过一种映射关系映射到表中的一个位置来加快查找的速度&#xff0c;这种映射关系称之为哈希函数或者散列函数&…...