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

Docker 镜像构建与优化

一、Dockerfile 构建镜像

1.1.拉取所需镜像

首先 docker pull 拉取一个 centos7 的镜像。

docker pull centos:7

下载 nginx 源码包。

官网:nginx: download

wget https://nginx.org/download/nginx-1.26.3.tar.gz

1.2.解决 CentOS 7 安装源问题

因为原本的 centos 7 安装源有问题不能下载软件,所以需要更换容器的安装源。以下是根据宿主机本机搭建共享安装源供容器使用,可也自行更换阿里或者其他平台的开源镜像源。

1.2.1.添加新光盘

搭建本地 Apache 服务,共享本地 RHEL 7 安装源供容器 CentOS 7 使用。

添加新 CD/DVD 设置 RHEL 7.9 的镜像文件。

1.2.2.配置 Apache 服务

安装 httpd ,配置服务。

yum install httpd -y
vim /etc/httpd/conf/httpd.conf

修改 httpd 主配置文件监听端口为 8888,为了与容器的端口不冲突。

构建访问页面,共享 RHEL 7.9 信息。

mkdir /var/www/html/rhel7.9
mount /dev/sr1 /var/www/html/rhel7.9/
systemctl enable --now httpd

1.2.3.测试

浏览器可访问到共享的光盘信息。

1.3.运行 CentOS 容器,修改 yum 源

查看 centos 容器网络(此时 IP :172.17.0.2)。

docker inspect centos

容器看到主机的网络为与容器同一网段的 IP 地址,所以,接下来在容器里配置 yum 源,需要设置容器连接的本机 IP(172.17.0.1),而不是本机真实 IP(192.168.67.140)。

运行 CentOS 容器,配置 yum 源。

docker run -it --name centos centos:7
​
# 进入容器,执行以下命令
cd /etc/yum.repos.d/
rm -rf *.repo
​
cat >> centos7.repo << EOF
[centos7]
name=centos7.9
baseurl=http://172.17.0.1:8888/rhel7.9/
gpgcheck=0
EOF
​
# 退出容器,但不关闭容器,使用命令 ctrl+p+q
# 提交 centos 现有状态
docker commit -m "add repo" centos centos:repo

SIZE 没大的变化。

因为原本的 centos 镜像安装源不能安装软件,所以需要搭建能安装软件的 centos 镜像,为了下面编写构建文件做准备。

1.4.编写构建文件

1.4.1.构建参数

FROM指定 base 镜像 eg:FROM busybox:version
COPY复制文件 eg:COPY file/file 或者 COPY ["file","/"]
MAINTAINER指定作者信息,比如邮箱 eg:MAINATINER user@example.com 在最新版的 docker 中用 LABEL KEY=“VALUE” 代替
ADD功能和 copy 相似,指定压缩文件或 url eg:ADD test.tar /mnt 或者 eg:ADD http://ip/test.tar /mnt
ENV指定环境变量 eg:ENV FILENAME test
EXPOSE暴露容器端口 eg:EXPOSE 80
VOLUME申明数据卷,通常指数据挂载点 eg:VOLUME["/var/www/html"]
WORKDIR切换路径 eg:WORKDIR /mnt
RUN在容器中运行的指令 eg:touch file
CMD在容器启动时自动运行的动作可以被覆盖 eg:CMD echo $FILENAME 会调用 shell 解析 eg:CMD["/bin/sh","-c","echo $FILENAME"]不调用 shell 解析
ENTRYPOINT和 CMD 功能和用法类似,但动作不可被覆盖

镜像层机制解析

  • Docker 镜像层的工作原理:

    • Docker 镜像是由多个只读层(Layer)叠加而成的。每个 RUN、COPY、ADD 指令都会生成一个新层。镜像层具有共享特性,相同的文件内容在多个镜像中只存储一次。但过多的镜像层会增加镜像体积和构建时间,因此合并层是优化的关键。

缓存机制说明

  • Docker 构建缓存的机制和注意事项:

    • Docker 在构建时会缓存每一层的结果。若某层指令未改变,后续构建会复用缓存。但修改上层指令会导致下层缓存失效。例如,将 ADD 指令放在 RUN 之前可以减少缓存失效的概率。

1.4.2.创建 Dockerfile

在家目录下建立文件。

mkdir /root/docker
cd /root/docker/
cp /root/nginx-1.26.3.tar.gz /root/docker/     # 注意:构建所需的所有文件多要与 Dockerfile 在同一个文件夹里
​
# 编写构建文件
cat >> Dockerfile << EOF
FROM centos:repo                             # 指定基础镜像,不过'repo'不是有效的CentOS镜像标签,应替换为如'centos:7'等有效标签
LABEL Mail=haha@qq.com                       # 为镜像添加元数据标签,标注维护者邮箱为haha@qq.com
ADD nginx-1.26.3.tar.gz /mnt                 # 将当前目录下的nginx-1.26.3.tar.gz文件添加到镜像的/mnt目录,ADD可自动解压压缩包
EXPOSE 80                                    # 声明容器运行时监听的端口为80,仅作声明,不进行实际端口映射
WORKDIR /mnt/nginx-1.26.3                    # 设置后续命令执行的工作目录为/mnt/nginx-1.26.3
RUN yum install gcc make pcre-devel openssl-devel -y  # 使用yum包管理器安装编译Nginx所需的依赖包
RUN ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module                      # 执行Nginx配置脚本,指定安装目录和开启相关模块
RUN make                                     # 执行make命令,编译Nginx源代码
RUN make install                             # 执行make install命令,将编译好的Nginx安装到指定目录
VOLUME ["/usr/local/nginx/html"]             # 创建数据卷,用于持久化存储数据和容器间共享
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]  # 定义容器启动时执行的命令,以非守护进程模式启动Nginx
EOF

1.4.3.通过 Dockerfile 构建镜像

docker build -t nginx:v1 /root/docker/

以下是通过 CentOS7 构建出来的 nginx 镜像。

问题:

  1. 镜像层冗余问题:多个 RUN 指令会生成多个镜像层,这会让镜像体积增大,还可能产生不必要的缓存。

  2. 包安装缓存问题:yum install 后没有清理缓存,这会让镜像体积增大。


二、镜像优化方案

2.1.镜像优化策略

  • 镜像层合并:把多个 RUN 指令合并成一个,以此减少镜像层数量,进而减小镜像体积。

  • 包安装缓存清理:在 yum install 之后添加 yum clean all 和 rm -rf /var/cache/yum 来清理缓存。

2.2.镜像优化示例

2.2.1.缩减镜像层

cd /root/docker/
​
# 修改构建文件
cat >> Dockerfile << EOF
FROM centos:repo
LABEL Mail=haha@qq.com
ADD nginx-1.26.3.tar.gz /mnt
EXPOSE 80
WORKDIR /mnt/nginx-1.26.3
RUN yum install gcc make pcre-devel openssl-devel -y && ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module && make && make install && rm -rf /mnt/nginx-1.26.3 && yum clean all
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
EOF
​
docker build -t nginx:v2 /root/docker/

查看建立的镜像,v2 比 v1 小了一些。

解决的问题:

  • 镜像层冗余问题

    • 原问题

    • 原 Dockerfile 中使用了多个 RUN 指令,每个 RUN 指令都会在镜像构建过程中创建一个新的镜像层,这会导致镜像层数增多,最终使得镜像体积变大,同时也可能造成不必要的缓存问题。

    • 解决方式

    • 修改后的 Dockerfile 将多个 RUN 指令合并为一个,即 RUN yum install gcc make pcre - devel openssl - devel -y && ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module && make && make install && rm -rf /mnt/nginx - 1.26.3 && yum clean all。这样只创建一个镜像层,减少了镜像层数,有效减小了镜像体积。

  • 包安装缓存问题

    • 原问题

    • 原 Dockerfile 里 yum install 后没有清理缓存,这些缓存会被包含在镜像中,从而增加镜像体积。

    • 解决方式

    • 修改后的 Dockerfile 在 yum install 之后添加了 yum clean all 命令,它会清理 yum 的缓存文件,进一步减小了镜像体积。

  • 临时文件残留问题

    • 原问题

    • 原 Dockerfile 构建完成后,/mnt/nginx - 1.26.3 目录下的文件仍然存在于镜像中,这会增加镜像的冗余数据。

    • 解决方式

    • 修改后的 Dockerfile 在安装完成 Nginx 后添加了 rm -rf /mnt/nginx - 1.26.3 命令,将解压的 Nginx 源码目录删除,避免了临时文件占用镜像空间。

  • 构建效率问题

    • 原问题

    • 多个 RUN 指令可能会导致每次构建时都需要重新执行多个步骤,影响构建效率。

    • 解决方式

    • 合并 RUN 指令后,Docker 可以一次性执行多个操作,减少了中间层的创建和处理,在一定程度上提高了构建效率。

2.2.2.多阶构建

cd /root/docker/
​
# 修改构建文件
cat >> Dockerfile << EOF
FROM centos:repo AS build
ADD nginx-1.26.3.tar.gz /mnt
WORKDIR /mnt/nginx-1.26.3
RUN yum install gcc make pcre-devel openssl-devel -y && ./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module && make && make install && rm -rf /mnt/nginx-1.26.3 && yum clean all
​
FROM centos:repo
LABEL Mail=haha@qq.com
COPY --from=build /usr/local/nginx /usr/local/nginx
EXPOSE 80
VOLUME ["/usr/local/nginx/html"]
CMD ["/usr/local/nginx/sbin/nginx","-g","daemon off;"]
EOF
​
docker build -t nginx:v3 /root/docker/

查看建立的镜像,v3 比 v2 小了一些。

解决的问题:

  • 镜像体积显著减小

    • 原问题

    • 在单阶段构建时,构建过程中用到的所有工具(如编译工具、依赖库等)以及临时文件都会被打包进最终镜像,导致镜像体积庞大。例如,在安装和编译 Nginx 时,需要安装 gcc、make、pcre - devel、openssl - devel 等编译工具和依赖库,但在运行 Nginx 时,这些编译工具和依赖库并非必需,却依然存在于最终镜像中,增加了镜像的冗余数据。

    • 解决方式

    • 多阶段构建将构建过程分为多个阶段。在第一个阶段(build 阶段),使用包含编译工具的基础镜像进行编译和安装操作,完成后可以丢弃该阶段中使用的所有编译工具和临时文件。第二个阶段从一个新的基础镜像开始,仅将第一个阶段构建好的可执行文件和必要的配置文件复制到新的镜像中。在这个例子中,仅将 /usr/local/nginx 目录从 build 阶段复制到最终镜像,避免了编译工具和临时文件进入最终镜像,从而显著减小了镜像体积。

  • 提高镜像安全性

    • 原问题

    • 单阶段构建的镜像中包含了构建过程中使用的所有工具和依赖,这些工具和依赖可能存在安全漏洞。例如,编译工具可能存在已知的安全隐患,将其留在最终镜像中会给容器的运行带来安全风险。

    • 解决方式

    • 多阶段构建的最终镜像只包含运行应用所需的最小化依赖。在第二个阶段,使用一个干净、轻量级的基础镜像,不包含构建阶段的编译工具和其他不必要的软件包,减少了潜在的安全漏洞,提高了镜像的安全性。

  • 构建过程的独立性和可维护性增强

    • 原问题

    • 单阶段构建的 Dockerfile 中,构建步骤和运行步骤混杂在一起,当需要修改构建过程或者运行配置时,可能会相互影响,导致维护困难。而且,单阶段构建的逻辑不够清晰,难以理解每个步骤的目的。

    • 解决方式

    • 多阶段构建将构建过程和运行过程分离,每个阶段都有明确的职责。build 阶段专注于编译和安装应用,而第二个阶段专注于运行应用。这种分离使得 Dockerfile 的逻辑更加清晰,易于理解和维护。如果需要修改构建过程,只需要修改 build 阶段;如果需要调整运行配置,只需要修改第二个阶段,相互之间的影响较小。

  • 构建效率提升

    • 原问题

    • 单阶段构建每次构建都需要重新执行所有步骤,即使某些步骤的结果在之前的构建中已经存在。例如,每次构建都需要重新安装编译工具和依赖库,浪费了时间和资源。

    • 解决方式

    • 多阶段构建可以利用 Docker 的缓存机制。如果 build 阶段的代码和配置没有发生变化,Docker 可以复用之前构建的结果,只需要重新构建有变化的部分。在第二个阶段,由于只复制必要的文件,复制操作的时间也会减少,从而提高了整体的构建效率。

相关文章:

Docker 镜像构建与优化

一、Dockerfile 构建镜像 1.1.拉取所需镜像 首先 docker pull 拉取一个 centos7 的镜像。 docker pull centos:7 下载 nginx 源码包。 官网&#xff1a;nginx: download wget https://nginx.org/download/nginx-1.26.3.tar.gz 1.2.解决 CentOS 7 安装源问题 因为原本的 …...

Mininet--moduledeps.py源码解析

整体构架概述 1. What is it moduledeps.py是Mininet网络模拟框架的模块依赖管理工具&#xff0c;用于动态管理Linux内核模块&#xff08;如Open vSwitch、TUN/TAP&#xff09;和验证系统环境。其核心目的是确保Mininet运行所需的底层模块和可执行文件已正确加载或存在&#…...

JAVA EE_多线程-初阶(一)

1.认识线程 1.1概念 1&#xff09;线程是什么 线程是在进程内部中进行运行的&#xff0c;可以把它想成一个“执行流“&#xff0c;每个线程负责执行线程内的部分代码&#xff0c;多个线程之间可以”同时“执行多个代码。 “同时”&#xff1a;指并行&#xff0c;采用分时复用…...

批量优化与压缩 PPT,减少 PPT 文件的大小

我们经常能够看到有些 PPT 文档明明没有多少内容&#xff0c;但是却占用了很大的空间&#xff0c;存储和传输非常的不方便&#xff0c;这时候通常是因为我们插入了一些图片/字体等资源文件&#xff0c;这些都可能会导致我们的 PPT 文档变得非常的庞大&#xff0c;今天就给大家介…...

AI 的“幻觉”现象:深入解析 Hallucination 的成因与应对之道

文章目录 一、啥是 AI 的 Hallucination&#xff1f;二、啥时候容易出现幻觉&#xff1f;1. 知识边界之外的问题2. 模糊或不明确的输入3. 生成长篇内容4. 多模态任务中的误解5. 过度自信的语气要求 三、幻觉为啥会出现&#xff1f;原理是啥&#xff1f;1. 概率预测的本质2. 训练…...

加载huggingface数据集报token无效错误解决方案

加载huggingface数据集报错 import pandas as pddf pd.read_json("hf://datasets/udell-lab/NLP4LP/data/test.jsonl", linesTrue) print(df)PS C:\Users\pengkangzhen\PythonProjects\llm-ecr> & C:/Users/pengkangzhen/.conda/envs/py3.12_ml/python.exe …...

Java面试题及知识点Day1

自动拆箱和自动装箱 装箱就是自动将基本数据类型转换为包装器类型 拆箱就是自动将包装其类型转化为基本数据类型 重写和重载 重写 1.发生在子类和父类之间 2.参数的方法名&#xff0c;参数&#xff0c;返回值&#xff0c;必须相同 3.权限修饰符不能小于重写方法的权限修饰符…...

【动态规划】-- 三步问题(easy)

文章目录 1. 题目2. 题目解析3. 代码 1. 题目 在线oj 三步问题。有个小孩正在上楼梯&#xff0c;楼梯有 n 阶台阶&#xff0c;小孩一次可以上 1 阶、2 阶或 3 阶。实现一种方法&#xff0c;计算小孩有多少种上楼梯的方式。结果可能很大&#xff0c;你需要对结果模 1000000007。…...

字符流Reader/Writer

一、Reader相关介绍及其子类 Reader是所有字符输入流的超类。它提供了读取字符流的基本方法&#xff0c;如read(), read(char[] cbuf, int off, int len)等&#xff1b;由于Reader是抽象类&#xff0c;通常使用它的子类如FileReader, BufferedReader等来创建字符输入流对象。 …...

字符串交替合并问题

问题&#xff1a; 给你两个字符串 word1 和 word2 。请你从 word1 开始&#xff0c;通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长&#xff0c;就将多出来的字母追加到合并后字符串的末尾。 返回 合并后的字符串 。 示例 1&#xff1a; 输入&#xff1a;w…...

shell脚本一键安装docker+docker-compose,支持x86_64、arm64双架构

目录 脚本内容 运行效果 安装包和脚本 脚本内容 [roottest1 docker]# cat install.sh #!/bin/bash set -e export pathpwd export docker_data"/data/docker_data"function check_arch() {if [ -f /etc/redhat-release ]; thenOS"RedHat"elif [ -f /e…...

Elasticsearch 面试备战指南

Elasticsearch 面试备战指南 一、基础概念 什么是Elasticsearch&#xff1f; Elasticsearch是一个基于Lucene的分布式搜索和分析引擎&#xff0c;提供近实时搜索、高可用性和水平扩展能力。常用于日志分析&#xff08;ELK&#xff09;、全文检索、商业智能等场景。 Elasticsea…...

新手村:逻辑回归-理解04:熵是什么?

新手村&#xff1a;逻辑回归04&#xff1a;熵是什么? 熵是什么? 前置条件 在开始学习逻辑回归中的熵理论之前&#xff0c;需要掌握以下基础知识&#xff1a; 概率论与统计学&#xff1a; 概率分布&#xff08;如伯努利分布、正态分布&#xff09;。条件概率和贝叶斯定理。期…...

Javaweb后端登录会话技术jwt令牌

jwt生成与校验 是base4补位的 最后面是签名&#xff0c;签名不是base64&#xff0c;是通过签名算法加密后来的 令牌长度不是固定的&#xff0c;长度取决于原始内容&#xff0c;载荷&#xff0c;大小 头有&#xff0c;类型&#xff0c;签名算法 base64可以对任意的二进制数据进…...

图像对比分析并生成报告

pip install pyautogui """ 图像对比分析工具 功能&#xff1a;实现像素级差异、结构相似性(SSIM)、直方图相似度和特征匹配率四种对比方法 作者&#xff1a;智能助手 版本&#xff1a;1.2 日期&#xff1a;2025-02-27""" import os import cv2 …...

DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例1,TableView16_01.vue 基础行拖拽排序示例

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例1,TableView16_01.vu…...

vue-如何将组件内容作为图片生成-html2canvas

1.引入必要的库 这里呢我们使用 html2canvas 库来将 HTML 元素转换为画布&#xff08;canvas&#xff09;&#xff0c;然后再将其导出为图片。首先&#xff0c;确保在项目中安装了 html2canvas&#xff1a; npm install html2canvas 2. 组件结构 然后在我们的vue文件里面&a…...

单片机 - RAM 与内存、ROM 与硬盘 之间的详细对比总结

RAM 与 内存 RAM&#xff08;Random Access Memory&#xff0c;随机存取存储器&#xff09; 和 内存 这两个术语通常是 同义词&#xff0c;即 内存 常常指的就是 RAM。 1. RAM&#xff08;内存&#xff09; 定义&#xff1a;RAM 是计算机中的 主存储器&#xff0c;用于临时存…...

Linux 练习一 NFS和DNS

练习四 任务需求&#xff1a;客户端通过访问 www.nihao.com 后&#xff0c;能够通过 dns 域名解析&#xff0c;访问到 nginx 服务中由 nfs 共享的首页文件&#xff0c;内容为&#xff1a;Very good, you have successfully set up the system. 各个主机能够实现时间同步&#…...

aab 转 apk

googleplay发布的游戏对外前&#xff0c;测试同学要安装到手机上先行测试&#xff0c;所以就有了这个需求。网上找了一篇文章讲的很详细了&#xff0c;文档是英语的&#xff0c;这里摘抄重要的部分做下记录&#xff1a; https://www.geekdashboard.com/extract-apk-files-from…...

JAVA开发:实例成员与静态成员

判断Java中的实例成员与静态成员 在Java中&#xff0c;可以通过以下几种方式判断一个成员是实例成员还是静态成员&#xff1a; 1. 通过声明方式判断 静态成员使用static关键字修饰&#xff0c;实例成员不使用&#xff1a; public class MyClass {// 实例成员int instanceVa…...

DeepSeek面试——模型架构和主要创新点

本文将介绍DeepSeek的模型架构多头潜在注意力&#xff08;MLA&#xff09;技术&#xff0c;混合专家&#xff08;MoE&#xff09;架构&#xff0c; 无辅助损失负载均衡技术&#xff0c;多Token 预测&#xff08;MTP&#xff09;策略。 一、模型架构 DeepSeek-R1的基本架构沿用…...

[项目]基于FreeRTOS的STM32四轴飞行器: 十二.角速度加速度滤波

基于FreeRTOS的STM32四轴飞行器: 十二.滤波 一.滤波介绍二.对角速度进行一阶低通滤波三.对加速度进行卡尔曼滤波 一.滤波介绍 模拟信号滤波&#xff1a; 最常用的滤波方法可以在信号和地之间并联一个电容&#xff0c;因为电容通交隔直&#xff0c;信号突变会给电容充电&#x…...

《基于SpringBoot的图书网购平台的设计与实现》开题报告

个人主页&#xff1a;大数据蟒行探索者 一、选题的依据及意义 1.1选题来源 市场需求驱动&#xff1a;如今&#xff0c;互联网深度融入人们生活&#xff0c;阅读场景愈发多元化&#xff0c;线上购书成为主流趋势之一。读者期望随时随地浏览海量图书资源&#xff0c;对比价格…...

Python 非异步函数执行异步函数的方案

import asyncio import sys from your_module import browser_main # 替换为你的实际模块名 async def _keep_alive(): """保持程序持续运行""" while True: await asyncio.sleep(1) def run_browser(index: int None): """ 执…...

计算机期刊推荐 | 工程技术-电子与电气, 计算机

IET Microwaves Antennas & Propagation的新特刊&#xff1a;《天线与超材料的设计、合成、仿真与实验》 学科领域&#xff1a; 工程技术-电子与电气, 计算机 期刊类型&#xff1a; SCI/SSCI/AHCI 收录数据库&#xff1a; SCI(SCIE) ISSN&#xff1a; 1751-8725 中科院…...

【开源宝藏】30天学会CSS - DAY9 第九课 牛顿摆动量守恒动画

以下是一份逐步拆解教程&#xff0c;带你从零理解并复刻这个牛顿摆&#xff08;Pendulum of Newton&#xff09;动画效果&#xff0c;这是一个经典的物理演示模型&#xff0c;现在通过纯 HTML 和 CSS 实现出来&#xff0c;视觉效果炫酷、结构简洁。 &#x1f3af; 动画效果说明…...

对三维物体模型的阈值操作

对三维物体模型的阈值操作 1. 使用point_coord_x、point_coord_y、point_coord_z阈值分割麻辣兔头2. point_normal_x、point_normal_y、point_normal_z有什么区别&#xff1f;3. 去除离群点 1. 使用point_coord_x、point_coord_y、point_coord_z阈值分割麻辣兔头 dev_open_win…...

【Unity网络编程知识】使用Socket实现简单TCP通讯

1、Socket的常用属性和方法 创建Socket TCP流套接字 Socket socketTcp new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 1.1 常用属性 1&#xff09;套接字的连接状态 socketTcp.Connected 2&#xff09;获取套接字的类型 socketTcp.So…...

简记_单片机硬件最小系统设计

以STM32为例&#xff1a; 一、电源 1.1、数字电源 IO电源&#xff1a;VDD、VSS&#xff1a;1.8~3.6V&#xff0c;常用3.3V&#xff0c;去耦电容1 x 10u N x 100n &#xff1b; 内核电源&#xff1a;内嵌的稳压器输出&#xff1a;1.2V&#xff0c;给内核、存储器、数字外设…...

Android Launcher实战:完美复刻iOS风格Hotseat布局优化

一、需求背景与效果呈现 在Android 13系统深度定制过程中&#xff0c;原生Launcher的Hotseat布局因视觉效果平庸需要进行UI重构。产品团队要求仿照iOS系统设计&#xff0c;实现以下核心特性&#xff1a; 取消传统横屏铺满效果 采用居中显示布局方案 支持圆角背景与智能边距调…...

2025-3-25算法打卡

一&#xff0c;走迷宫 1.题目描述&#xff1a; 给定一个 NMNM 的网格迷宫 GG。GG 的每个格子要么是道路&#xff0c;要么是障碍物&#xff08;道路用 11 表示&#xff0c;障碍物用 00 表示&#xff09;。 已知迷宫的入口位置为 (x1,y1)(x1​,y1​)&#xff0c;出口位置为 (x…...

Python:进程的常用方法,注意细节,进程线程对比

进程常用方法&#xff1a; start()&#xff1a;启动进程实例 is_alive()&#xff1a;判断子进程的存活状态&#xff0c;返回True或False&#xff0c;子进程执行完后的状态为False join([timeout])&#xff1a;是否等待子进程执行结束(在当前位置阻塞主进程)主进程等子进程多长…...

北京交通大学第三届C语言积分赛

作者有言在先&#xff1a; 题解的作用是交流思路&#xff0c;不是抄作业的。可以把重点放在思路分析上而不是代码上&#xff0c;毕竟每个人的代码风格是不一样的&#xff0c;看别人的代码就跟做程序填空题一样。先看明白思路再看代码。 还有就是&#xff0c;deepseek真的很好用…...

架构设计之自定义延迟双删缓存注解(下)

架构设计之自定义延迟双删缓存注解(下) 小薛博客官方架构设计之自定义延迟双删缓存注解(下)地址 为了保证Cache和ClearAndReloadCache的灵活性&#xff0c;特意加入EL表达式解析 1、Cache package com.xx.cache;import java.lang.annotation.*; import java.util.concurren…...

SingleMod

SingleMod SingleMod是一种深度学习模型,专为利用纳米孔直接RNA测序(DRS)数据在单RNA分子中精确检测m6A修饰而设计。该模型通过深度多实例回归框架进行训练,能够充分利用广泛的甲基化率标签。SingleMod是一个通用框架,可轻松适配其他核酸修饰的检测模型训练。 注意: Si…...

SQL-查询漏洞

一、查询注入的数据类型 //list.php<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatiable" content"IEedge"><meta name"viewport" content&…...

Maven 多模块项目(如微服务架构)中,父 POM(最外层) 和 子模块 POM(具体业务模块)的区别和联系

文章目录 **1. 父 POM 的核心职责****1.1 依赖管理 (dependencyManagement)****1.2 插件管理 (pluginManagement)****1.3 其他公共配置** **2. 子模块 POM 的核心职责****2.1 依赖声明 (dependencies)****2.2 插件启用与覆盖 (plugins)** **3. 核心对比表****4. 使用场景示例**…...

【AIGC】图片变视频 - SD ComfyUI视频生成

效果图 完整过程 SD ComfyUI 下载 下载 https://pan.quark.cn/s/64b808baa960 解压密码&#xff1a;bilibili-秋葉aaaki 完整 https://www.bilibili.com/video/BV1Ew411776J/ SD ComfyUI 安装 1.解压 2.将controlnet内部文件复制到 ComfyUI-aki-v1.6\ComfyUI\models\control…...

思考我的未来职业

李升伟 编译 关于我 我是一名专注于后端开发的软件工程师&#xff0c;拥有十年专业编程经验。从学生时代起&#xff0c;编程就是我的热情所在&#xff0c;并一直保持着这个长期爱好。此外&#xff0c;我也热爱动漫和电影。 然而过去几年&#xff0c;婚姻、家庭责任和育儿让生…...

StarRocks数据导入

文章目录 StarRocks数据导入Broker LoadETL 集群导数非 ETL 集群导数Broker Load 任务查看BrokerLoad⼤数据量导⼊优化参数推荐配置BrokerLoad 排查思路 Insert IntoInsert Into大数据量导入优化参数 Stream LoadStreamLoad⼤数据量导⼊优化参数推荐配置Stream Load 排查思路 R…...

mmdetection安装

链接: link...

光学像差的类型与消除方法

### **光学像差的类型、理解与消除方法** 光学像差是指实际光学系统成像时&#xff0c;由于透镜或反射镜的非理想特性导致的光线偏离理想路径&#xff0c;从而影响成像质量的现象。像差可分为**单色像差**&#xff08;与波长无关&#xff09;和**色差**&#xff08;与波长相关…...

Manus AI 破局多语言手写识别,解锁智能新天地

Manus AI 破局多语言手写识别&#xff0c;解锁智能新天地 前言 在人工智能技术不断渗透各行各业的背景下&#xff0c;手写识别领域长期面临多语言适配难、复杂场景泛化能力弱等挑战。ManusAI凭借其创新的算法架构和多模态融合技术&#xff0c;成功突破传统OCR&#xff08;光学…...

文字颜色的渐变(svg实现)

一 上下渐变&#xff08;有底部阴影&#xff09; 效果如图&#xff1a; svg代码如下&#xff1a; <svg width"300" height"100" xmlns"http://www.w3.org/2000/svg"><defs><linearGradient id"textGradient" x1"…...

Java-设计模式

Java-设计模式 ⓪设计模式基础 ❶设计模式分类 创建型模式 用于描述对象实例化&#xff08;创建对象&#xff09;的模式&#xff0c;即用于解耦对象的实例化过程 GoF&#xff08;四人组&#xff09;书中提供了单例、原型、工厂方法、抽象工厂、建造者等 5 种创建型模式。 …...

“我是GM”之NAS搭建Luanti游戏服务器,开启沙盒游戏新体验

“我是GM”之NAS搭建Luanti游戏服务器&#xff0c;开启沙盒游戏新体验 哈喽小伙伴们好&#xff0c;我是Stark-C~ 曾几何时&#xff0c;哪怕是现在&#xff0c;估计依然有很多小伙伴沉迷于开放性和自由度极高的《我的世界》这种沙盒游戏吧~。 我个人到现在手机上还有这款游戏…...

K8S学习之基础五十:k8s中pod时区问题并通过kibana查看日志

k8s中pod默认时区不是中国的&#xff0c;挂载一个时区可以解决 vi pod.yaml apiVersion: v1 kind: Pod metadata:name: counter spec:containers:- name: countimage: 172.16.80.140/busybox/busybox:latestimagePullPolicy: IfNotPresentargs: [/bin/sh,-c,i0;while true;do …...

光电效应及普朗克常数的测定数据处理 Python实现

内容仅供参考&#xff0c;如有错误&#xff0c;欢迎指正&#xff0c;如有疑问&#xff0c;欢迎交流。 因为我不会Excel所以只能用Python来处理 祝大家早日摆脱物理实验的苦海 用到的一些方法 PCHIP &#xff08;分段三次埃尔米特插值多项式&#xff09; 因为实验时记录的数…...

hyperf中关于时间的设定

下面我来总结这三者的用法和它们之间的关系&#xff1a; 1. protected ?string $dateFormat U; 作用&#xff1a; 定义数据库日期字段的存储格式‘U’ 表示使用 Unix 时间戳格式&#xff08;秒级&#xff0c;10位数字&#xff09; 影响范围&#xff1a; 决定了模型从数据…...