Dockerfile
Dockerfile
Dockerfile 是一个文本文件,其内包含了一条条指令,每一条指令构建镜像的一层,因此每一条指令的内容,就是描述该层应当如何构建。 定制镜像,可以将镜像制作的每一层的修改、安装、构建、操作的命令,都写入 Dockerfile 中,使用 Dockerfile 来构建、定制镜像。Dockerfile 相比于快照方法制作镜像,具有方便自动化构建、维护修改,二次开发方便、更加标准化的优点。
快照方法(docker commit)制作的镜像,需要手动一个命令一个命令执行,其制作过程不可考,因此生成的镜像又称为黑箱镜像,制作步骤比较繁琐,维护起来较麻烦,也难以进行二次开发。
在制作 Dockerfile 时,要尽量将不变的因素放在前面,易变化的因素放在后面。如为了减镜像的实际大小,我们往往会在镜像里安装 gcc,当 gcc 编译完代码文件后就删除 gcc,来释放空间。代码文件是易变化的文件,如果将 COPY
代码的指令放在 ADD
gcc 指令的前面,由于 Dockerfile 是逐条构建,每次更改代码文件都需要重新安装和删除 gcc,造成镜像构建时间变长。但如果我们将 COPY
代码的指令放在 ADD
gcc 指令的前面,由于镜像构建时会查找可用的缓存,即不需要重新安装 gcc 就可以重新编译代码,使得镜像构建时间大大缩短。
1. docker build
docker build
命令用于使用 Dockerfile 创建镜像。有三种语法:上下文构建(path),使用某个 Docerfile 构建;网络构建(URL),连接某个主机使用其 Dockerfile 构建;通过标准输入构建(-),可以指定 Docerfile 或 tar 文件。
语法:
docker build [options] [path]docker build [options] [URL]docker build [options] [-]
选项:
- –build-arg=[]: 设置镜像创建时的变量。
- -f: 设定要使用的 Dockerfile 路径。
- –label=[]: 设置镜像使用的元数据。
- –no-cache: 创建镜像的过程中不使用缓存(即不使用引用的方法,重新构建每一层)。
- –pull: 尝试更新镜像的新版本。
- -q,–quiet: 安静模式,成功后只输出镜像 ID。
- -t,–tag: 镜像的名字及标签。
- –network: 默认使用,在构建期间设置
RUN
指令的网络模式。
示例:
docker build -t myimage:1.0.0 .docker build -t myimage:1.0.0 https://127.0.0.1/Dockerfiledocker build -t myimage:1.0.0 - < Dockerfile
2. .dockerignore文件
.dockerignore
文件可以标记在执行 docker build
时忽略的路径和文件,避免发送不必要的数据内容,从而加快整个镜像创建的过程。使用方法简单,只需要在其中添加需要忽略的文件的路径和名字即可,支持通配符。
*.txt
表示忽略所有后缀名为 .txt
的文件。
3. Dockerfile指令
Dockerfile 的指令不区分大小写,但是为了将其于一般的命令和参数区分开来,约定俗成使用大写,Dockerfile 的注释符号为 #
且必须在行首使用才会被识别为注释,行中其他地方出现 #
都会被视为参数。
FROM
FROM
用于指定镜像文件构建过程中的基础镜像,后续的指令运行于此基础镜像所提供的运行环境。因此,FROM
必须是 Dockerfile 中非注释行或者 ARG
之后的第一个指令。 FROM
可以在一个 Dokerfile 里多次出现,即可以使用一个 Dockerfile 创建多个镜像,或者将一个构建阶段作为另一个的依赖。如果 FROM
语句没有指定镜像标签,则默认使用 latest 标签。
默认情况下,
docker build
会在 docker 主机上查找指定的镜像文件,如果本地不存在该镜像,则会自动从 Docker 的公共库 pull 镜像下来,如果还是找不到指定的镜像文件,docker build
会返回一个错误信息。
语法:
FROM [--platform=<platform>] <image> [AS <name>]FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]
参数:
- <platform>: 构建的 cpu 架构,如
linux/amd64
、linux/arm64
。 - <image>: 指定作为 base image 的名称。
- <tag>: base image 的标签,省略时默认 latest。
- <digest>: 镜像的哈希码。
- AS <name>: 指定构建步骤的名称,配合
COPY --from=<name>
可以完成多级构建。
示例:
FROM nginx:latest
LABEL
用于为镜像添加元数据,元数据是键值对的形式。使用 docker inspect
可以查看信息。
语法:
LABEL <key>=<value> <key>=<value>...
示例:
LABEL author="laimaxgg"
COPY
用于从 docker 主机复制新文件或者目录到创建的新镜像指定路径中。
语法:
COPY [--chown=<user>:<group>] <src>... <dest>COPY [--chown=<user>:<group>] ["<src>",..."<dest>"]
参数:
- –chown: 修改用户和组。
- <src>: 要复制的源文件或目录,支持使用通配符
*
。 - <dest>: 目标路径,即正在创建的 iamge 的文件系统路径。建议使用绝对路径,否则
COPY
将指定以WORKDIR
为当前路径。 - –from <name>: 可选项,可以从之前构建的步骤中拷贝内容,往往用于多级构建中。
注意:
<src> 必须是 build 上下文中的路径,不能是其父目录中的文件。
如果 <src> 是目录,则其内部文件或子目录会被递归复制,但 <src> 目录自身不会被复制。
如果指定了多个 <src> ,或在 <src> 使用了通配符,则 <dest> 必须是一个目录,且必须以
/
结尾。如果 <dest> 事先不存在,它将会被自动创建,包括它的父目录路径。
示例:
COPY index,html /data/web/html
ENV
用于为镜像定义所需的环境变量,并可被 Dockerfile 文件中位于其后的其他指令(如 ENV
、 ADD
、 COPY
)调用。调用时使用 $env_name
或 ${env_name}
调用。
语法:
ENV <key>=<value> ...
示例:
ENV env_val1="1"
WORKDIR
用于为 Dockerfile 中所有 RUN
、 CMD
、ENTRYPOINT
、COPY
、 ADD
指定设定工作目录。
语法:
WORKDIR /a/b/c
注意:
WORKDIR
的默认路径是/
,且支持多次定义,定义时,如果没有重新从/
开始指定,则会将前一条WORKDIR
指令的路径视为父目录,如:WORKDIR /a WORKDIR b WORKDIR c
最终的
WORKDIR
为/a/b/c
。
ADD
类似于 COPY
指令,但是 ADD
支持使用 tar
文件和 URL 路径,会自动完成解压和下载。
语法:
ADD [--chown=<user>:<group>] <src>... <dest>ADD [--chown=<user>:<group>] ["<src>",..."<dest>"]
路径中包含空格字符时,一般使用第二种格式。
RUN
用于 docker build
过程中运行的程序,其可以是任何命令。RUN
指令有两种格式。
语法:
#shell格式
RUN [command]#exec格式
RUN ["executable","param1","param2"]
-
shell 格式中, [command] 通常是一个 shell 命令,且以
/bin/sh -c
来运行,如果一个脚本 test.sh 不能自己运行,就必须要使用/bin/sh -c test.sh
的方式来执行,如果使用 shell 格式,最后的指令相当于:/bin/sh -c "/bin/sh -c 'test.sh'"
-
exec 格式中的参数是一个 JSON 格式的数组,其中
executable
为要运行的命令,后面的paramN
为要传递给命令的选项或参数。但是这种格式指定的命令不会以/bin/sh -c
来发起,因此常见的 shell 操作如变量替换以及通配符(?,*
等)都将不会进行。不过,如果要运行的命令依赖于此 shell 特性的话,可以使用以下格式:RUN ["/bin/bash", "-c", "<executable>", "<param1>"]
示例:
ENV WEB_SERVER_PACKAGE nginx-1.21.1.tar.gz
RUN cd ./src && tar -xf ${WEB_SERVER_PACKAGE}
CMD
类似于 RUN
,CMD
指令用于运行任何命令或应用程序,但两者运行的时间点不同。RUN
指令运行于镜像文件构建过程中,而 CMD
指令运行于基于 Dockerfile 构建出的新镜像文件启动一个容器时。 因此,CMD
指令的首要目的在于为启动的容器指定默认要运行的程序,且其运行结束后,容器也将终止。
CMD
指定的命令可以被 docker run
命令的选项所覆盖,在 Dockerfile 中也可以存在多个 CMD
指令,但最终只会生效最后一个。
语法:
#exec格式
CMD ["executable","param1","param2"]#ENTRYPOINT指令默认参数
CMD ["param1","param2"]#shell格式
CMD command param1 param2
注意:
-
第二种格式用于为 ENTRYPOINT 指令提供默认参数。
-
json 数组中,要使用
""
双引号,单引号会出错。
示例:
CMD ["/user/bin/wc","--help"]
EXPOSE
用于为容器声明打开指定要监听的端口以实现于外部通信。但 EXPOSE
并不会发布端口,它只是充当构建图像的人和运行容器的人之间的一种文档,即如果要让容器暴露端口,还是需要使用 -p
参数。
语法:
EXPOSE <port>
EXPOSE <port>/<protocol>
参数:
<port>: 端口。
<protocol>: tcp/udp 协议。
示例:
EXPOSE 80/tcp
ENTRYPOINT
用于指定容器的启动入口。如果是 CMD 是可以被覆盖的,如果是 ENTRYPOINT 则不能被覆盖。定义了 ENTRYPOINT 会将命令作为参数传给程序。
语法:
#exec格式
ENTRYPOINT ["executable","param1","param2"]#shell格式
ENTRYPOINT command param1 param2
注意,json 数组中要使用 ""
双引号,单引号会出错。
示例:
ENTRYPOINT ["nginx","-g","daeom off;"]
ARG
类似于 ENV
,ARG
用于在 Dockerfile 里定义一个变量,但不同是 ENV
的是,用户可以在构建时使用 docker build --build-arg <varname>=<val>
对变量进行修改,而 ENV
不能。
语法:
ARG <name>[=<default value>]
注意:
- Dockerfile 可以包含一个或多个
ARG
指令。 ARG
支持指定默认值。ARG
在docker build
后就会失效,一般用于控制镜像的版本,如通过--build-arg
更改 Dockerfile 默认的ARG
控制的Ubuntu
版本号,实现在外部切换镜像制作出来的版本。
示例:
ARG CONT_IMG_VER=v1.0.0
在外部更改值:
docker build --build-arg CONT_IMG_VER=v2.0.0
VOLUME
用于在镜像中创建一个挂载点目录。通过 VOLUME
指令创建的挂载点,无法指定主机上对应的目录,是自动生成的名字,属于匿名卷。
语法:
VOLUME <moutpoint>
VOLUME ["<moutpoint>"]
注意:
- 如果挂载点目录路径下此前有文件存在,docker run 命令会在卷挂载完成后将此前的所有文件复制到新挂载的卷中。
VOLUME
指令只是声明了容器中的目录作为匿名卷,但是并没有将匿名卷绑定到宿主机指定目录的功能。VOLUME
只是指定了一个目录,用于在用户启动时忘记指定-v
选项也可以保证容器正常运行,即使用户没有指定-v
,容器被删除后也不会导致数据文件被删除。VOLUME
和-v
一样,容器被删除以后映射在主机上的文件不会被删除。- 如果
-v
和VOLUME
指定了同一个位置,会以-v
设定的目录为准。
示例:
VOLUME ["/data1","/data2"]
SHELL
SHELL
指令允许覆盖用于 shell 命令形式的默认 shell。Linux 上的默认 shell 是 ["/bin/sh","-c"]
,在 Windows 上是 ["cmd","/S","/C"]
。SHELL
指令必须以 JSON 格式写入 Dockerfile 中。
语法:
SHEL ["executable","parameters"]
注意:
- 该
SHELL
指令在 Linux 上使用较少,但在 Windows 上特别有用,因为 Windows 有两种不同的 shell(cmd 和 powershell)。
USER
用于指定运行 image 时的或运行 Dockerfile 中任何 RUN
、CMD
或 ENTRYPOINT
指令定的程序时的用户名或 UID。默认情况下,container 的运行身份为 root。
语法:
USER <user>:<group>
USER <UID>:<GID>
参数:
- <user>: 用户
- <group>: 用户组
- <UID>: 组 id
- <GID>: 组 id
示例:
USER docker:docker
HEALTHCHECK
用于告诉 Docker 如何测试容器以检查它是否仍在工作。即使服务器进程仍在运行,也可以检测出陷入无限循环且无法处理新连接的 Web 服务器等情况。
语法:
HEALTHCHECK [options] CMD command
HEALTHCHECK NONE
参数:
[options]
有:- –interval=DURATION(default:30s): 每隔多长时间探测一次,默认 30 秒。
- –timeout=DURATION(default:30s): 服务响应超时时长,默认 30 秒。
- –start-period=DURATION(default:0s): 服务启动多久后开始探测,默认 0 秒。
- –retres=N(default:3): 认为检测失败几次为宕机,默认 3 次。
- 返回值:
0
:容器是健康的,随时可以使用。1
:容器不健康,无法正常工作。2
:保留不使用此退出码。
示例:
HEALTHCHECK --interval=5m --timeout=3s CMD curl -f https://localhost/ || exit 1
ONBUILD
用于在 Dockerfile 中定义一个触发器。以该 Dockerfile 中的作为基础镜像由 FROM 指令在 build 过程中被执行时,将会触发创建其 base iamge 的 Dockerfile 文件中的 ONBULD 指令定义的触发器。
语法:
ONBUILD <instruction>
参数:
- <instruction>: Dockefile 的一条指令。
示例:
ONBUILD ADD ./app/src
STOPSIGHAL
用于设置将发送到容器的系统调用信号,即设置 docker stop
时触发的信号。此信号可以是与内核的系统调用表中的位置匹配的有效无符号数。
语法:
STOPSIGNAL signal
示例:
STOPSIGNAL 9
4. CMD和ENTRYPOINT的组合使用
CMD
和 ENTRYPOINT
在 Dockerfile 里是两个功能十分相近的指令,但 Docker 官方实际更希望我们组合使用这两个指令。
4.1 CMD和ENTRYPOINT的异同
相同点:
-
Dockerfile 里含有多条
CMD
或ENTRYPOINT
命令时,后面的CMD
或ENTRYPOINT
会覆盖前一条指令,最终只生效一条。CMD echo "123" CMD echo "456"
最终
echo "456"
有效,ENTRYPOINT
同理。 -
CMD
和ENTRYPOINT
都支持 shell 和 exec 格式。当使用 shell 格式时,命令行程序作为 sh 程序的子程序运行,docker 用/bin/sh -c
的语法调用,如果用docker ps
命令查看运行的 docker,就可以看出我们启动的程序的 PID 不是 1,由于/bin/sh
命令不会转发消息给实际运行的命令,所以从外部发送任何 POSIX 信号到 docker 容器中都不能安全的关闭 docker 容器;exec 格式直接运行提供的命令,命令进程的 PID 是 1。所以实践中,都强烈推荐使用 exec 格式。
不同点:
- 使用
docker run
传递参数时会覆盖CMD
的内容,但ENTRYPOINT
无法被覆盖,除非使用--entryopint
选项。 - 如果
ENTRYOPINT
使用的是 exec 格式,那么docker run
传递的参数会作为ENTRYOPINT
的参数(实际是触发了CMD
和ENTRYPOINT
的组合模式)
特点:
- 当
ENTRYPOINT
使用 exec 格式时,CMD
和ENTRYPOINT
可触发组合模式。
4.2 组合模式
当 ENTRYPOINT
使用 exec 格式时,CMD
和 ENTRYPOINT
可触发组合模式。在组合模式下,当使用 docker run
运行容器时,docker 会将和 ENTRYPOINT
和 CMD
拼接在一起,如:
ENTRYPOINT ["echo"]
CMD ["Hello, Docker!"]
将会拼接成 echo "Hello, Docker!"
。再加上,CMD
可以被 docker run
的参数覆盖,所以实际组合模式是 Docker 官方更推荐的写法。
相关文章:
Dockerfile
Dockerfile Dockerfile 是一个文本文件,其内包含了一条条指令,每一条指令构建镜像的一层,因此每一条指令的内容,就是描述该层应当如何构建。 定制镜像,可以将镜像制作的每一层的修改、安装、构建、操作的命令…...
Redis高频面试题(含答案)
当然可以,Redis 是面试中非常常见的高频考点,尤其在后台开发、分布式系统、缓存设计等方向,面试官常常通过 Redis 来考察你的高并发处理能力、系统设计能力和对缓存一致性理解。 以下是一些典型 Redis 的面试场景题目类型和你可以如何回答的…...
#3 物联网 的标准
商业化的技术都有标准, 标准的本质就是 可以重复多次实现的方法。而这些方法都是设定物联网的那些人布局的,当然在保证按方法操作的结果是属于物联网这个基本的操作里面,藏着的是对某些利益团队的维护,这里大家知道就可以了。 除 …...
Moviepy 视频编辑的Python库,可调整视频分辨率、格式
MoviePy简介 MoviePy 是一个用于视频编辑的Python库,支持视频剪辑、和合成、转码等多种操作,主要有点: 基于 FFmpeg:能够处理几乎所有常见的视频格式。 修改视频分辨率 方法一:指定新的宽度和高度 from moviepy.editor import V…...
【LeetCode 热题 100】哈希 系列
📁1. 两数之和 本题就是将通过两层遍历优化而成的,为什么需要两层遍历,因为遍历 i 位置时,不知道i-1之前的元素是多少,如果我们知道了,就可以通过两数相加和target比较即可。 因为本题要求返回下标…...
蓝光三维扫描:汽车冲压模具与钣金件全尺寸检测的精准解决方案
随着汽车市场竞争日趋激烈,新车型开发周期缩短,安全性能要求提高,车身结构愈加复杂。白车身由多达上百个具有复杂空间型面的钣金件,通过一系列工装装配、焊接而成。 钣金件尺寸精度是白车身装配精度的基础。采用新拓三维XTOM蓝光…...
鲲鹏+昇腾部署集群管理软件GPUStack,两台服务器搭建双节点集群【实战详细踩坑篇】
前期说明 配置:2台鲲鹏32C2 2Atlas300I duo,之前看网上文档,目前GPUstack只支持910B芯片,想尝试一下能不能310P也部署试试,毕竟华为的集群软件要收费。 系统:openEuler22.03-LTS 驱动:24.1.rc…...
面试篇 - GPT-1(Generative Pre-Training 1)
GPT-1(Generative Pre-Training 1) ⭐模型结构 Transformer only-decoder:GPT-1模型使用了一个12层的Transformer解码器。具体细节与标准的Transformer相同,但位置编码是可训练的。 注意力机制: 原始Transformer的解…...
探索机器人创新技术基座,傅利叶开源人形机器人 Fourier N1
一.傅利叶为什么要开源? 2025年3月17日,傅利叶正式开源全尺寸人形机器人数据集Fourier ActionNet。 2025年4月11日,傅利叶正式发布首款开源人形机器人 Fourier N1。 傅利叶为什么要做这些开源工作呢?4月11日&#x…...
正则表达式和excel文件保存(python)
正则表达式 import re data """ <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8" /> <title>测试页面</title> </head> <body> <h1>《人工智能的发展趋势分析报…...
无人船 | 图解基于视线引导(LOS)的无人艇制导算法
目录 1 视线引导法介绍2 LOS制导原理推导3 Lyapunov稳定性分析4 LOS制导效果 1 视线引导法介绍 视线引导法(Line of Sight, LOS)作为无人水面艇(USV)自主导航领域的核心技术,通过几何制导与动态控制深度融合的机制&am…...
大腾智能获邀出席华为云2025生态大会,携全栈工业软件助力产业智能升级
4月10日-4月11日,以“聚力共创,加速行业智能跃迁”为主题的华为云生态大会2025在安徽芜湖召开。大腾智能受邀出席此次盛会,与众多行业精英、生态伙伴齐聚一堂,深度参与前沿技术演示、生态伙伴签约及商业场景共创,与行业…...
Java基础关键_037_Java 常见新特性
目 录 一、新语法 1.JShell 2.try-with-resources (1)jdk 7 之前 (2)jdk 7 之后 (3)jdk 9 之后 3.局部变量类型判断(不推荐) 4.instanceof 的模式匹配 (1&a…...
鸿蒙公共通用组件封装实战指南:从基础到进阶
一、鸿蒙组件封装核心原则 1.1 高内聚低耦合设计 在鸿蒙应用开发中,高内聚低耦合是组件封装的关键准则,它能极大提升代码的可维护性与复用性。 从原子化拆分的角度来看,我们要把复杂的 UI 界面拆分为基础组件和复合组件。像按钮、输入框这…...
IntelliJ 配置(二)配置相关类库(2)LineMarkerProvider
一、介绍 LineMarkerProvider 是 IntelliJ 平台插件开发中的一个接口,它的作用是在编辑器左侧的“行标记区域”(就是代码行号左边那一栏)添加各种图标、标记或导航链接。比如Java 类中看到的: 小绿色三角形(可以点击运…...
红宝书第四十二讲:Angular核心特性精讲:依赖注入 RxJS整合
红宝书第四十二讲:Angular核心特性精讲:依赖注入 & RxJS整合 资料取自《JavaScript高级程序设计(第5版)》。 查看总目录:红宝书学习大纲 一、依赖注入(Dependency Injection):快…...
AD917X系列JESD204B MODE7使用
MODE7特殊在F8,M4使用2个复数通道 CH0_NCO10MHz CH1_NCO30MHZ DP_NCO50MHz DDS1偏移20MHz DDS2偏移40MHz...
软考高级系统架构设计师-第11章 系统架构设计
【本章学习建议】 根据考试大纲,本章不仅考查系统架构设计师单选题,预计考12分左右,而且案例分析和论文写作也是必考,对应第二版教材第7章,属于重点学习的章节。 软考高级系统架构设计师VIP课程https://edu.csdn.net/…...
中和农信的“三农”服务密码:科技+标准化助力乡村振兴
作为中国农村市场最大的专注服务农村小微客户的“三农”综合服务机构,中和农信凭借多年积累的农村服务经验,成功从单一小额信贷机构转型为覆盖金融、生产、生活及生态服务的综合型“三农”服务平台。近期,中和农信在由中保保险资产登记交易系…...
【Redis】布隆过滤器应对缓存穿透的go调用实现
布隆过滤器 https://pkg.go.dev/github.com/bits-and-blooms/bloom/v3 作用: 判断一个元素是不是在集合中 工作原理: 一个位数组(bit array),初始全为0。多个哈希函数,运算输入,从而映射到位数…...
MyBatis-Plus笔记(下)
注解 tablename注解 - 描述:表名注解,标识实体类对应的表 - 使用位置:实体类 代码举例: TableName//可以不加,使用实体类的名字作为表名!忽略大小写 //BaseMapper->User实体类-》实体类名-》表名数据…...
【项目管理】第14章 项目沟通管理-- 知识点整理
项目管理-相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 (一)知识总览 项目管理知识域 知识点: (项目管理概论、立项管理、十大知识域、配置与变更管理、绩效域) 对应:第6章-第19章 第6章 项目管理概论 4分第13章 项目资源管理 3-4分第7章 项目…...
3个关键数据解密:首航上市如何重构ebay电商新能源供应链?
3个关键数据解密:首航上市如何重构eBay电商新能源供应链? 在跨境电商圈,一个新玩家的崛起往往意味着新的格局变动。2024年,伴随一家名为“首航”的新能源企业在港股成功上市,整个eBay类目的供应链悄然掀起新一轮洗牌。…...
《华为云Node.js部署:从开发环境到生产上线的完整指南》
目录 引言第一步: 重置密码第二步:连接到服务器第三步:安装必要软件第四步:创建项目目录第五步:将代码上传到服务器1、安装 FileZilla2、打开FileZilla,连接到您的服务器:3、连接后,…...
【网络原理】TCP/IP协议五层模型
目录 一. 协议的分层 二. OSI七层网络协议 三. TCP/IP五层网络协议 四. 网络设备所在分层 五. 封装 六. 分用 七. 传输中的封装和分用 八. 数据单位术语 一. 协议的分层 常见的分层为两种OSI七层模型和TCP/IP五层模型 为什么要协议分层? 在网络通信中&…...
Asp.Net Core学习随笔
学习自BLBL杨中科老师 依赖注入(Dependency Injection) 依赖注入是实现控制反转(Inversion Of Control 即IOC)的一种方式(还有一种叫服务定位器的实现,但是不如依赖注入好用),软件开发中实现解耦常用的方式. 比如吃饭 1. 传统写法(没有DI,紧耦合&a…...
基于PHP的酒店网上订房系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 酒店服务是旅游行业的一个重要组成部分,它的作用已经从过去的单一的住宿、结算帐务向全面、高水平的服务型酒店转变。酒店的服务工作贯穿于整个酒店的市场营销、预定、入住、退房、结账等环节,酒店要提高整体工作水平,简化工作程序&…...
《MySQL从入门到精通》
文章目录 《MySQL从入门到精通》1. 基础-SQL通用语法及分类2. 基础-SQL-DDL-数据库操作3. 基础-SQL-DDL-表操作-创建&查询4. 基础-SQL-DDL-数据类型及案例4.1 数值类型4.2 字符串类型4.3 时间和日期类型 5. 基础-SQL-DDL-表操作-修改&删除5.1 DDL-表操作-修改5.2 DDL-表…...
MySQL聚合查询
聚合查询 group by...
生信初学者教程(三十四):文章的方法
文章目录 介绍数据收集和整理数据整合差异基因分析功能富集分析免疫浸润分析候选标记物识别诊断ROC曲线单细胞分析统计方法介绍 在数据分析进行的同时,我们可以逐步撰写方法部分,确保其与结果紧密相连。一旦结果部分完成,方法部分应根据结果的逻辑顺序进行分类和组织。在描…...
算力云平台部署—SadTalker的AI数字人视频
选择算力 部署选择 选择镜像 机器管理 控制台 通过平台工具进入服务器 认识管理系统 打开命令行 进入目录 stable-diffusion-webui# cd 增加执行权限 chmod x ./webui.sh 运行命令 bash ./webui.sh sudo apt install -y python3 python3-venv git 安装软件 Creating the …...
iPhone相册导出到电脑的完整指南
iPhone相册导出到电脑的完整指南 本文介绍通过数据线连接实现iPhone照片视频传输到电脑的标准操作方法,适用于需要备份移动设备影像资料的用户。 环境准备 使用原装Lightning或USB-C数据线连接设备与电脑需在电脑端安装设备管理工具(如克魔助手&#…...
【数据结构】励志大厂版·初阶(复习+刷题):复杂度
前引:从此篇文章开始,小编带给大家的是数据结构初阶的刷题讲解 ,此类文章将简略的包含相关知识,详细的思路拆分讲解,分析每一题的难点、易错点,看见题目如何分析,以上就是小编预备的内容&#x…...
Nginx底层架构(非常清晰)
目录 前言: 场景带入: HTTP服务器是什么? 反向代理是什么? 模块化网关能力: 1.配置能力: 2.单线程: 3.多worker进程 4.共享内存: 5.proxy cache 6.master进程 最后&…...
Golang|Channel 相关用法理解
文章目录 用 channel 作为并发小容器channel 的遍历channel 导致的死锁问题用 channel 传递信号用 channel 并行处理文件用channel 限制接口的并发请求量用 channel 限制协程的总数量 用 channel 作为并发小容器 注意这里的 ok 如果为 false,表示此时不仅channel为空…...
智能合约安全审计平台——以太坊虚拟机安全沙箱
目录 以太坊虚拟机安全沙箱 —— 理论、设计与实战1. 引言2. 理论背景与安全原理2.1 以太坊虚拟机(EVM)概述2.2 安全沙箱的基本概念2.3 安全证明与形式化验证3. 系统架构与模块设计3.1 模块功能说明3.2 模块之间的数据流与安全性4. 安全性与密码学考量4.1 密码学保障在沙箱中…...
趣说区块链隐私智能合约Shielder 实现原理
目录 核心理念 Deposit Withdraw Shielder 是 Aleph Zero 上的智能合约,它利用 zk-SNARK 技术实现隐私支付以及与 DeFi 的隐私交互。这与常规区块链的完全透明性形成鲜明对比,常规区块链允许追踪单个用户与链上合约以及其他用户的所有交互。Shielder 通过使第三方链观察者…...
TCPIP详解 卷1协议 五 Internet协议
5.1——Internet协议 IP是TCP/IP协议族中的核心协议。所有TCP、UDP、ICMP和IGMP数据都通过IP数据报传输。IP 提供了一种尽力而为、无连接的数据报交付服务。“尽力而为”的含义是不保证 IP 数据报能成功到达目的地。任何可靠性必须由上层(例如TCP)提供。…...
基于Oracle ADG通过dblink创建物化视图同步数据到目标库
基于Oracle ADG通过dblink创建物化视图同步数据到目标库 环境说明:源端环境Oracle ADG一主一备,版本11.2.0.4,目标端版本11.2.0.4,测试通过dblink方式在目标库创建物化视图同步ADG备库的数据。 PROD --> STANDBY – > TAR…...
openGauss新特性 | 自动参数化执行计划缓存
目录 自动化参数执行计划缓存简介 SQL参数化及约束条件 一般常量参数化示例 总结 自动化参数执行计划缓存简介 执行计划缓存用于减少执行计划的生成次数。openGauss数据库会缓存之前生成的执行计划,以便在下次执行该SQL时直接使用,可…...
qt中的正则表达式
问题: 1.在文本中把dog替换成cat,但可能会把dog1替换成cat1,如果原本不想替换dog1,就会出现问题 2文本中想获取某种以.txt为结尾的多有文本,普通的不能使用 3如果需要找到在不同的系统中寻找换行符,可以…...
开源项目 | 17款云原生安全相关的扫描和平台类开源工具
“ 随着云计算技术的不断发展,越来越多的企业开始将应用程序和数据存储到云上。然而,云安全问题也随之而来,因此,开源云原生安全工具的需求也越来越大。在本文中,我们将介绍一些流行的开源云原生安全工具,以…...
力扣面试150题—旋转图像和矩阵置零
Day21 题目描述 思路 矩阵转置 在将列反转 1 2 3 4 5 6 7 8 9 转置 1 4 7 2 5 8 3 6 9 反转 7 4 1 8 5 2 9 6 3 class Solution {public void rotate(int[][] matrix) { //分为两步 矩阵转置,将列倒序 int x0; int nmatrix.length; //转…...
ScholarCopilot:“学术副驾驶“
这里写目录标题 引言:学术写作的痛点与 AI 的曙光ScholarCopilot 的核心武器库:智能生成与精准引用智能文本生成:不止于“下一句”智能引用管理:让引用恰到好处 揭秘背后机制:检索与生成的动态协同快速上手:…...
Node.js项目开启多进程的2种方案
当node项目只部署一个单进程单实例时,遇到异常发生后程序会崩溃,此时杀掉进程在重启单这段时间会导致服务不能正常使用,这显然会影响用户体验。 所以需要以多进程的模式去部署应用,这样当某一个进程发生异常重启时,此时有其他请求被接受后,其他进程依旧可以对外提供服务…...
论文导读 | 基于GPU的子图匹配算法
摘要 大规模图上的子图匹配在社交网络挖掘,生物信息学,知识图谱等领域具有关键作用。近年来随着以GPU为代表的新硬件的发展,研究人员开始尝试在GPU上实现这一NP难的任务。GPU提供了大量的计算单元和高速的显存带宽,可以显著提升算…...
中天科技旗下的中天智能装备有限公司,在立库方面有哪些优势?
中天科技旗下的中天智能装备有限公司在立库方面优势显著,主要体现在产品与方案、技术研发、项目经验和服务质量管控等多个维度,能够为客户提供全方位、高品质的立库相关服务。 产品与解决方案优势 多种立库解决方案:提供托盘式立库、料箱式立…...
HTML5+CSS前端开发【保姆级教学】+超链接标签
一、引入: Hello!,各位编程猿们!一个页面可以跳转到其他页面,去访问其他资源,使得我们的文档更加的灵动,那我们如何实现不同页面的跳转呢?本期主要介绍超链接标签 那么什么是超链接…...
【游戏安全】文本校验类风险
文本风险定义: 在游戏中除了动画,声音参与和玩家的交互之外,游戏中的文本也属于和玩家交互中一项重要的元素。由玩家操作触发任何不同于游戏自身逻辑设定,进而破坏游戏平衡的文本内容都可以称之为文本类风险漏洞。(这个定义自己瞎写的…) 文本风险危害(漏洞举例): …...
快速排序及其应用
快速排序及其应用 标准写法改成稳定版本求第k小值O(n)做法快排的另一种写法 标准写法 #include <bits/stdc.h>using namespace std;using ll long long;int a[] {8, 5, 18, 11, 7, 2, 21, 15, 3, 8};void quickSort(int l, int r) {if (l > r) return ; // 元素个数…...