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

K8S - 从零构建 Docker 镜像与容器

一、基础概念

1.1 镜像(Image)

“软件的标准化安装包” ,包含代码、环境和配置的只读模板。

技术解析

镜像由多个层组成,每层对应一个Dockerfile指令:

应用代码 → 运行时环境 → 系统工具链 → 启动配置

核心特性

  • 分层存储(每层对应 Dockerfile指令)

  • 内容寻址(SHA256 哈希防篡改)

  • 不可变性(构建后无法修改)

1.2 容器(Container)

“镜像的运行时实例,基于镜像创建的独立进程,像轻量级隔离的进程沙箱”。

技术解析

容器实例化后,会添加可写层,并应用进程隔离与资源限制机制:

镜像 → 可写层 → 进程隔离(Namespace)→ 资源限制(Cgroups

核心能力

  • 进程隔离(Linux Namespaces)

  • 资源限制(CPU/内存配额 Cgroups)

  • 临时存储(OverlayFS可写层)

1.3 Dockerfile

“镜像的构建说明书”,以 文本文件形式定义如何组装镜像。

技术解析

FROM python:3.8-slim  # 选择基础镜像
WORKDIR /app          # 设置工作目录
COPY requirements.txt .  
RUN pip install -r requirements.txt  # 安装依赖
COPY . .              # 复制应用代码
CMD ["python", "app.py"]  # 设置默认启动命令

关键原则

  • 指令顺序影响构建效率

  • 每个 RUN 生成新层(可合并命令减少层数)

核心价值
在这里插入图片描述

1.4 概念关系图

Dockerfile(docker build) → 镜像 → (docker run) → 容器 → (修改) → 可写层
可写层 -x (容器删除) → 数据丢失

二、 构建第一个镜像

1.环境准备(Mac/Win/Linux通用)

# 安装Docker
# 官网下载:https://www.docker.com/products/docker-desktop
# 验证安装
docker --version
# 预期输出示例:Docker version 20.10.17, build 100c701

2. 示例代码

项目结构概览

my-first-image/           # 项目根目录
│── app.py               # Flask 应用主程序
│── requirements.txt      # Python 依赖文件
│── Dockerfile           # 构建镜像的 Dockerfile

步骤1:创建项目文件

app.py

# 新建项目目录
mkdir ~/my-first-image && cd ~/my-first-image# 创建Python应用文件
cat <<EOF > app.py
from flask import Flask
app = Flask(__name__)@app.route('/')
def hello():return "Hello, 这是我的第一个容器!"if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)
EOF# 生成依赖文件
echo "Flask==2.2.2" > requirements.txt

requirements.txt

Flask==2.2.2

步骤2:编写 Dockerfile (基础版,单阶段)

# 使用官方Python轻量版镜像
FROM python:3.8-slim# 设置容器内工作目录(自动创建)
WORKDIR /app# 1. 先复制依赖文件(利用缓存优化)
COPY requirements.txt .# 2. 安装依赖
RUN pip install --no-cache-dir -r requirements.txt# 3. 复制应用代码
COPY . .# 声明容器监听端口(实际映射需通过-p参数)
EXPOSE 5000# 容器启动命令(JSON格式避免shell解析问题)
CMD ["python", "app.py"]

步骤3:构建镜像

# 构建镜像(注意最后的点 . )
docker build -t my-first-app:v1 .# 查看生成的镜像
docker images
预期输出示例:REPOSITORY     TAG    IMAGE ID      SIZE
my-first-app   v1     a1b2c3d4e5    123MB

步骤4:运行容器

# 启动容器(前台运行,便于调试)
docker run -p 8000:5000 my-first-app:v1# 新开终端,测试访问:
curl http://localhost:8000
# 或在浏览器访问:http://localhost:8000

预期输出:

Hello, 这是我的第一个容器!

关键说明:

  • 缓存优化:先单独复制 requirements.txt安装依赖,代码变更时避免重复安装。

  • –no-cache-dir:禁用 pip缓存,减少镜像体积。

  • EXPOSE:仅为文档说明,实际端口映射需通过 -p 8000:5000实现。

三、Dockerfile实践与高效构建

3.1 Dockerfile 三大核心特性

特性1:分层构建(Layer)

title 镜像层组成
"基础镜像" 
"依赖安装" 
"应用代码" 
"元数据" 

缓存机制:重复构建时未变化的层直接复用缓存。

特性2:声明式语法

Dockerfile 示例

FROM python:3.8-slim  # 声明环境
COPY . /app           # 声明文件
CMD ["python", "app.py"]  # 声明启动

特点:描述 “做什么”而非 “怎么做”。

特性3:跨平台一致性

  • 构建结果与宿主机环境无关

  • 相同 Dockerfile 在任何平台生成相同镜像

3.2 核心指令解析

Dockerfile 基础指令集 (结合第二章示例)
在这里插入图片描述

指令说明

FROM :必须是 Dockerfile 的第一条有效指令。

最佳实践:

• 选择官方维护的基础镜像(如 python:3.8-slim)

• 避免使用 未经审计的第三方镜像

• -slim或 alpine版本可减少镜像体积

WORKDIR

• 会自动创建目录(如果不存在)。

• 比 RUN cd /app && … 更规范。

COPY

• 比 ADD 更推荐使用(除非需要自动解压功能)。

• 受 .dockerignore 文件影响。

RUN

• 每个 RUN 指令都会创建一个新的镜像层。

• 建议合并相关命令(如 apt-get update && apt-get install)。

CMD

生产环境建议
在这里插入图片描述

3.3 基础镜像选择指南

1. 官方镜像仓库推荐

# 通用搜索语法(所有语言适用)
docker search --filter "is-official=true" [技术栈关键词]# 示例:
docker search --filter "is-official=true" node
docker search --filter "is-official=true" golang

官方镜像特征:

• 命名规范:[技术栈]:[版本]-[变体]

# 标准格式示例:
docker pull node:18-bullseye-slim    # Node.js 官方镜像
docker pull golang:1.20-alpine       # Go 官方镜像
docker pull nginx:1.25-alpine        # Nginx 官方镜像

2. 主流语言推荐基础镜像

| 语言       | 开发环境镜像          | 生产环境镜像              |
|------------|---------------------|-------------------------|
| Python     | `python:3.10`       | `python:3.10-slim`      |
| Node.js    | `node:18`           | `node:18-alpine`        |
| Java       | `eclipse-temurin:17`| `eclipse-temurin:17-jre`|

3. 镜像变体对比

A[镜像变体] --> B[完整版]
A --> C[精简版]
A --> D[最小版]
B -->|含gcc/make等| E[500MB+]
C -->|仅运行时依赖| F[100-300MB]
D -->|musl libc| G[5-50MB]

选择原则

### 选择原则(新手友好版)
1. 生产环境优先选择 `-slim` 或 `-alpine````bash# 正确示例docker pull python:3.10-slim
# 开发调试 使用完整版, 临时使用(勿用于生产)
docker pull python:3.10

常用命令

# 查看镜像架构
docker manifest inspect python:3.9 | grep architecture# 拉取指定平台镜像
docker pull --platform=linux/amd64 nginx:alpine

3.4 容器生命周期管理命令集

1. 镜像管理命令

# 构建镜像(注意最后的点表示当前目录)
docker build -t myapp:v1 .# 查看镜像列表(grep 过滤)
docker images | grep python# 查看镜像构建历史
docker history myapp:v1# 删除镜像(-f 强制删除)
docker rmi -f myapp:v1# 给镜像打标签
docker tag myapp:v1 registry.example.com/myapp:v1# 推送镜像到仓库
docker push registry.example.com/myapp:v1

2. 容器操作命令

创建与启动# 创建并运行容器(-d 后台运行,-p 端口映射)
docker run -d -p 8080:80 --name mynginx nginx:alpine# 只创建不运行容器
docker create --name my_redis redis:6# 启动已创建的容器
docker start my_redis

运行中管理

# 查看运行中的容器(-a 显示所有,-q 只显示 ID)
docker ps -a
docker ps -q# 进入容器交互模式(推荐 /bin/sh,更轻量)
docker exec -it mynginx /bin/sh# 查看实时日志(--tail 显示最后 N 行)
docker logs -f --tail=100 mynginx
停止与删除# 优雅停止容器(发送 SIGTERM)
docker stop mynginx# 强制停止容器(发送 SIGKILL)
docker kill my_redis# 删除容器(-f 强制删除运行中的容器)
docker rm -f mynginx
3. 系统管理命令# 查看容器资源使用(CPU/内存/网络)
docker stats# 查看容器详细信息
docker inspect mynginx# 宿主机和容器之间拷贝文件
docker cp ./local_file mynginx:/container_path
docker cp mynginx:/container_path ./local_dir

4. 一键清理命令

# 清理所有停止的容器(-f 强制)
docker container prune -f# 清理所有悬空镜像
docker image prune -f# 彻底清理(包括未使用的镜像和缓存)
docker system prune -a

5. 生产环境组合命令

# 批量停止并删除所有容器
docker stop $(docker ps -aq) && docker rm $(docker ps -aq)# 删除所有 <none> 镜像(悬空镜像)
docker rmi $(docker images -f "dangling=true" -q)# 重启所有容器(先 stop 再 start)
docker stop $(docker ps -q) && docker start $(docker ps -aq)
6. 注意事项# 重要数据必须挂载 volume(示例)
docker run -v /host/path:/container/path mysql# 设置资源限制(示例)
docker run --memory="1g" --cpus="2" myapp# 使用非 root 用户运行(在 Dockerfile 中添加)
RUN useradd -m appuser && chown -R appuser /app
USER appuser

四、总结

4.1 核心概念关系

A[Dockerfile] --> B[镜像]
B --> C[容器]
C --> D[Pod]
D --> E[Deployment]

相关文章:

K8S - 从零构建 Docker 镜像与容器

一、基础概念 1.1 镜像&#xff08;Image&#xff09; “软件的标准化安装包” &#xff0c;包含代码、环境和配置的只读模板。 技术解析 镜像由多个层组成&#xff0c;每层对应一个Dockerfile指令&#xff1a; 应用代码 → 运行时环境 → 系统工具链 → 启动配置核心特性…...

贪心算法求解边界最大数

贪心算法求解边界最大数&#xff08;拼多多2504、排列问题&#xff09; 多多有两个仅由正整数构成的数列 s1 和 s2&#xff0c;多多可以对 s1 进行任意次操作&#xff0c;每次操作可以置换 s1 中任意两个数字的位置。多多想让数列 s1 构成的数字尽可能大&#xff0c;但是不能比…...

C++类和对象(中)

类的默认成员函数 默认成员函数就是用户没有显式实现&#xff0c;编译器会自动生成的成员函数。一个类&#xff0c;我们不写的情况下编译器会默认生成6个默认成员函数&#xff0c;C11以后还会增加两个默认成员函数&#xff0c;移动构造和移动赋值。默认成员函数 很重要&#x…...

(Go Gin)Gin学习笔记(五)会话控制与参数验证:Cookie使用、Sessions使用、结构体验证参数、自定义验证参数

1. Cookie介绍 HTTP是无状态协议&#xff0c;服务器不能记录浏览器的访问状态&#xff0c;也就是说服务器不能区分两次请求是否由同一个客户端发出Cookie就是解决HTTP协议无状态的方案之一&#xff0c;中文是小甜饼的意思Cookie实际上就是服务器保存在浏览器上的一段信息。浏览…...

Windows 10 环境二进制方式安装 MySQL 8.0.41

文章目录 初始化数据库配置文件注册成服务启停服务链接服务器登录之后重置密码卸载 初始化数据库 D:\MySQL\MySQL8.0.41\mysql-8.0.41-winx64\mysql-8.0.41-winx64\bin\mysqld -I --console --basedirD:\MySQL\MySQL8.0.41\mysql-8.0.41-winx64\mysql-8.0.41-winx64 --datadi…...

Day.js一个2k轻量级的时间日期处理库

dayjs介绍 dayjs是一个极简快速2kB的JavaScript库&#xff0c;可以为浏览器处理解析、验证、操作和显示日期和时间&#xff0c;它的设计目标是提供一个简单、快速且功能强大的日期处理工具&#xff0c;同时保持极小的体积&#xff08;仅 2KB 左右&#xff09;。 Day.js 的 API…...

SQL实战:05之间隔连续数问题求解

概述 最近刷题时遇到一些比较有意思的题目&#xff0c;之前多次遇到一些求解连续数的问题&#xff0c;这次遇到了他们的变种&#xff0c;连续数可以间隔指定的数也视为是一个完整的“连续”。针对连续数的这类问题我们之前讲的可以利用等差数列的思想来解决&#xff0c;然而现…...

Windows下Dify安装及使用

Dify安装及使用 Dify 是开源的 LLM 应用开发平台。提供从 Agent 构建到 AI workflow 编排、RAG 检索、模型管理等能力&#xff0c;轻松构建和运营生成式 AI 原生应用。比 LangChain 更易用。 前置条件 windows下安装了docker环境-Windows11安装Docker-CSDN博客 下载 Git下载…...

回归分析丨基于R语言复杂数据回归与混合效应模型【多水平/分层/嵌套】技术与代码

回归分析是科学研究特别是生态学领域科学研究和数据分析十分重要的统计工具&#xff0c;可以回答众多科学问题&#xff0c;如环境因素对物种、种群、群落及生态系统或气候变化的影响&#xff1b;物种属性和系统发育对物种分布&#xff08;多度&#xff09;的影响等。纵观涉及数…...

EasyRTC嵌入式音视频实时通话SDK技术,打造低延迟、高安全的远程技术支持

一、背景 在当今数字化时代&#xff0c;远程技术支持已成为解决各类技术问题的关键手段。随着企业业务的拓展和技术的日益复杂&#xff0c;快速、高效地解决远程设备与系统的技术难题变得至关重要。EasyRTC作为一款高性能的实时通信解决方案&#xff0c;为远程技术支持提供了创…...

webrtc ICE 打洞总结

要搞清webrtc ICE连接是否能成功 &#xff0c; 主要是搞懂NAT NAT 类型 简单来说 一 是本地的ip和端口 决定外部的 ip和端口(和目的Ip和端口无关) &#xff0c; &#xff08;这种情况又分为 &#xff0c; 无限制&#xff0c;仅限制 ip &#xff0c; 限制ip和port , 也就是…...

AI开发者的Docker实践:汉化(中文),更换镜像源,Dockerfile,部署Python项目

AI开发者的Docker实践&#xff1a;汉化&#xff08;中文&#xff09;&#xff0c;更换镜像源&#xff0c;Dockerfile&#xff0c;部署Python项目 Dcoker官网1、核心概念镜像 (Image)容器 (Container)仓库 (Repository)DockerfileDocker Compose 2、Docker 的核心组件Docker 引擎…...

4.30阅读

一. 原文阅读 Passage 7&#xff08;推荐阅读时间&#xff1a;6 - 7分钟&#xff09; In department stores and closets all over the world, they are waiting. Their outward appearance seems rather appealing because they come in a variety of styles, textures, and …...

区块链:跨链协的技术突破与产业重构

引言&#xff1a;区块链的“孤岛困境”与跨链的使命 区块链技术自诞生以来&#xff0c;凭借去中心化、透明性和安全性重塑了金融、供应链、身份认证等领域。然而&#xff0c;不同区块链平台间的​​互操作性缺失​​&#xff0c;如同“数据与价值的孤岛”&#xff0c;严重限制…...

Github 热点项目 Qwen3 通义千问全面发布 新一代智能语言模型系统

阿里云Qwen3模型真是黑科技&#xff01;两大模式超贴心——深度思考能解高数题&#xff0c;快速应答秒回日常梗。支持百种语言互译&#xff0c;跨国客服用它沟通零障碍&#xff01;打工人福音是内置API工具&#xff0c;查天气做报表张口就来。字&#xff09; 1Qwen3 今日星标 …...

有状态服务与无状态服务:差异、特点及应用场景全解

有状态服务和无状态服务是在分布式系统和网络编程中常提到的概念&#xff0c;下面为你详细介绍&#xff1a; 一、无状态服务 无状态服务指的是该服务的单次请求处理不依赖之前的请求信息&#xff0c;每个请求都是独立的。服务端不会存储客户端的上下文信息&#xff0c;每次请…...

【网络入侵检测】基于源码分析Suricata的引擎日志配置解析

【作者主页】只道当时是寻常 【专栏介绍】Suricata入侵检测。专注网络、主机安全&#xff0c;欢迎关注与评论。 1. 概要 &#x1f44b; Suricata 的引擎日志记录系统主要记录该引擎在启动、运行以及关闭期间应用程序的相关信息&#xff0c;如错误信息和其他诊断信息&#xff0c…...

Attention层的FLOPs计算

前置知识 设矩阵 A 的维度为 mn&#xff0c;矩阵 B 的维度为 np&#xff0c;则它们相乘后得到矩阵 C 的维度为 mp。其中&#xff0c;C 中每个元素的计算需要进行 n 次乘法和 n−1 次加法。也就是说&#xff0c;总的浮点运算次数&#xff08;FLOPs&#xff09;约为 m p (2n) …...

支付APP如何做好网络安全防护

支付APP的网络安全防护需要从技术、管理、用户行为等多层面综合施策&#xff0c;以下为核心措施&#xff1a; ​​一、技术防御&#xff1a;构建安全底层​​ ​​数据加密​​ ​​传输加密​​&#xff1a;使用最新协议&#xff08;如TLS 1.3&#xff09;对交易数据加密&…...

Missashe考研日记-day31

Missashe考研日记-day31 0 写在前面 芜湖&#xff0c;五一前最后一天学习圆满结束&#xff0c;又到了最喜欢的放假环节&#xff0c;回来再努力了。 1 专业课408 学习时间&#xff1a;2h学习内容&#xff1a; OK啊&#xff0c;今天把文件系统前两节的内容全部学完了&#xf…...

二叉树的路径总和问题(递归遍历,回溯算法)

112. 路径总和 - 力扣&#xff08;LeetCode&#xff09; class Solution { private: bool traversal(TreeNode*cur,int count){if(!cur->left&&!cur->right&&count0){return true;}if(!cur->left&&!cur->right){return false;}if(cur-…...

Java学习计划与资源推荐(入门到进阶、高阶、实战)

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息文章目录 Java学习计划与资源推荐**一、筑基阶段(2-3个月)****二、进阶开发阶段(2个月)****三、高级突破阶段(2-3个月)****四、项目实战与竞…...

动态规划 -- 子数组问题

本篇文章中主要讲解动态规划系列中的几个经典的子数组问题。 1 最大子数组和 53. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09; 解析题目&#xff1a; 子数组是一个数组中的连续部分&#xff0c;也就是说&#xff0c;如果一个数组以 nums[i]结尾&#xff0c;那么有两…...

Sehll编程的函数于数组

目录 一、函数 1.1、定义函数 1.2、查看、删除函数 1.3、函数的返回值 1.4、函数的参数传递 1.5、函数的作用范围 1.6、函数递归 二、数组 2.1、声明数组 2.2、数组格式定义 2.3、数组调用 2.4、删除数组 一、函数 shell编程中&#xff0c;函数用于封装一段可以重…...

flutter 专题 六十四 在原生项目中集成Flutter

概述 使用Flutter从零开始开发App是一件轻松惬意的事情&#xff0c;但对于一些成熟的产品来说&#xff0c;完全摒弃原有App的历史沉淀&#xff0c;全面转向Flutter是不现实的。因此使用Flutter去统一Android、iOS技术栈&#xff0c;把它作为已有原生App的扩展能力&#xff0c;…...

AI生成Flutter UI代码实践(一)

之前的杂谈中有提到目前的一些主流AI编程工具&#xff0c;比如Cursor&#xff0c;Copilot&#xff0c;Trea等。因为我是Android 开发&#xff0c;日常使用Android Studio&#xff0c;所以日常使用最多的还是Copilot&#xff0c;毕竟Github月月送我会员&#xff0c;白嫖还是挺香…...

spring boot中@Validated

在 Spring Boot 中&#xff0c;Validated 是用于触发参数校验的注解&#xff0c;通常与 ​​JSR-303/JSR-380​​&#xff08;Bean Validation&#xff09;提供的校验注解一起使用。以下是常见的校验注解及其用法&#xff1a; ​1. 基本校验注解​​ 这些注解可以直接用于字段…...

VBA代码解决方案第二十四讲:EXCEL中,如何删除重复数据行

《VBA代码解决方案》(版权10028096)这套教程是我最早推出的教程&#xff0c;目前已经是第三版修订了。这套教程定位于入门后的提高&#xff0c;在学习这套教程过程中&#xff0c;侧重点是要理解及掌握我的“积木编程”思想。要灵活运用教程中的实例像搭积木一样把自己喜欢的代码…...

SpringBoot+EasyExcel+Mybatis+H2实现导入

文章目录 SpringBootEasyExcelMybatisH2实现导入1.准备工作1.1 依赖管理1.2 配置信息properties1.3 H2数据库1.4 Spring Boot 基础概念1.5 Mybatis核心概念 1.6 EasyExcel核心概念 2.生成Excel数据工具类-随机字符串编写生成Excel的java文件 3.导入功能并且存入数据库3.1 返回结…...

算法四 习题 1.3

数组实现栈 #include <iostream> #include <vector> #include <stdexcept> using namespace std;class MyStack { private:vector<int> data; // 用于存储栈元素的数组public:// 构造函数MyStack() {}// 入栈操作void push(int val) {data.push_back…...

el-tabs与table样式冲突导致高度失效问题解决(vue2+elementui)

背景 正常的el-table能根据父容器自动计算剩余高度&#xff0c;并会在列表中判断自适应去放出滚动条。而el-tabs本身就是自适应el-tab-pane内容的高度来进行自适应调节&#xff0c;这样就会导致el-table计算不了当前剩余的高度&#xff0c;所以当el-tabs里面包含el-table时&am…...

Access开发:轻松一键将 Access 全库表格导出为 Excel

hi&#xff0c;大家好呀&#xff01; 在日常工作中&#xff0c;Access 常常是我们忠实的数据管家&#xff0c;默默守护着项目信息、客户列表或是库存记录。它结构清晰&#xff0c;录入便捷&#xff0c;对于许多中小型应用场景来说&#xff0c;无疑是个得力助手。然而&#xff…...

合并多个Excel文件到一个文件,并保留格式

合并多个Excel文件到一个文件&#xff0c;并保留格式 需求介绍第一步&#xff1a;创建目标文件第二步&#xff1a;创建任务列表第三步&#xff1a;合并文件第四步&#xff1a;处理合并后的文件之调用程序打开并保存一次之前生成的Excel文件第五步&#xff1a;处理合并后的文件之…...

使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第十讲)

这一期我们讲解demo中登录、ok按键的回调函数以及界面的美化&#xff0c;以下是上期界面的图片如图所示&#xff1a; 首先点击界面在右侧的工具栏中调配颜色渐变色&#xff0c;具体设置如下图所示&#xff1a; 然后是关于界面内框也就是容器的美化&#xff0c;具体如下图所示…...

论文笔记(八十二)Transformers without Normalization

Transformers without Normalization 文章概括Abstract1 引言2 背景&#xff1a;归一化层3 归一化层做什么&#xff1f;4 动态 Tanh &#xff08;Dynamic Tanh (DyT)&#xff09;5 实验6 分析6.1 DyT \text{DyT} DyT 的效率6.2 tanh \text{tanh} tanh 和 α α α 的消融实验…...

Mysql之数据库基础

&#x1f31f; 各位看官好&#xff0c;我是maomi_9526&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f680; 今天来学习Mysql的相关知识。 &#x1f44d; 如果觉得这篇文章有帮助&#xff0c;欢迎您一键三连&#xff0c;分享给更…...

shell(5)

位置参数变量 1.介绍 当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量. 比如&#xff1a;./myshell.sh100 200,这就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息. 2.基本语法 $n(功能描述&#xff1a;n为数字,$0代表命令…...

VARIAN安捷伦真空泵维修清洁保养操作SOP换油操作流程内部转子图文并茂内部培训手侧

VARIAN安捷伦真空泵维修清洁保养操作SOP换油操作流程内部转子图文并茂内部培训手侧...

动画震动效果

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 在有的相关目中特别是在C端一般都要求做的炫酷一些&#xff0c;这就需要一些简易的动画效果&#xff0c;这里就弄了一个简易的震动的效果如下视频所示 让图标一大一小的震动视频 分析&#xff1a; 提…...

DB-GPT V0.7.1 版本更新:支持多模态模型、支持 Qwen3 系列,GLM4 系列模型 、支持Oracle数据库等

V0.7.1版本主要新增、增强了以下核心特性 &#x1f340;DB-GPT支持多模态模型。 &#x1f340;DB-GPT支持 Qwen3 系列&#xff0c;GLM4 系列模型。 &#x1f340; MCP支持 SSE 权限认证和 SSL/TLS 安全通信。 &#x1f340; 支持Oracle数据库。 &#x1f340; 支持 Infini…...

C++23 std::invoke_r:调用可调用 (Callable) 对象 (P2136R3)

文章目录 引言背景知识回顾可调用对象C17的std::invoke std::invoke_r的诞生提案背景std::invoke_r的定义参数和返回值异常说明 std::invoke_r的使用场景指定返回类型丢弃返回值 std::invoke_r与std::invoke的对比功能差异使用场景差异 结论 引言 在C的发展历程中&#xff0c;…...

pymysql

参数&#xff08;会导致SQL注入&#xff09; import pymysql# 创建数据库连接 conn pymysql.connect(user "root",password "root",host "127.0.0.1",port 3306,database "test" )# 创建游标对象 cur conn.cursor(cursorpymysql.…...

基于Spring Boot + Vue 项目中引入deepseek方法

准备工作 在开始调用 DeepSeek API 之前&#xff0c;你需要完成以下准备工作&#xff1a; 1.访问 DeepSeek 官网&#xff0c;注册一个账号。 2.获取 API 密钥&#xff1a;登录 DeepSeek 平台&#xff0c;进入 API 管理 页面。创建一个新的 API 密钥&#xff08;API Key&#x…...

Spring Boot集成Kafka并使用多个死信队列的完整示例

以下是Spring Boot集成Kafka并使用多个死信队列的完整示例&#xff0c;包含代码和配置说明。 1. 添加依赖 (pom.xml) <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId&…...

全面了解CSS语法 ! ! !

CSS&#xff08;层叠样式表&#xff09;是网页设计的灵魂之一&#xff0c;它赋予了网页活力与美感。无论是为一个简单的个人博客增添色彩&#xff0c;还是为复杂的企业网站设计布局&#xff0c;CSS都是不可或缺的工具。那么&#xff0c;CSS语法到底是什么样的呢&#xff1f;它背…...

Springboot使用ThreadLocal提供线程局部变量,传递登录用户名

文章目录 概述使用创建ThreadLocalUtil工具类在登录拦截器中使用ThreadLocal存储登录用户名在/userInfo接口中获取登录用户名 注意事项参考视频 概述 使用 创建ThreadLocalUtil工具类 utils/ThreadLocalUtil.java package org.example.utils;/*** ThreadLocal 工具类*/ Supp…...

排序算法——选择排序

一、介绍 「排序算法sortingalgorithm」用于对一组数据按照特定顺序进行排列。排序算法有着广泛的应用&#xff0c;因为有序数据通常能够被更有效地查找、分析和处理。 如图所示&#xff0c;排序算法中的数据类型可以是整数、浮点数、字符或字符串等。排序的判断规则可根据需求…...

AlphaFold蛋白质结构数据库介绍

AlphaFold Protein Structure Database (AlphaFold DB) 是 DeepMind + EMBL-EBI 合作开发的公开蛋白质结构预测数据库,是利用 AlphaFold2/AlphaFold3 AI模型 预测的全基因组级蛋白质三维结构库。 网址: https://alphafold.ebi.ac.uk 项目内容主办单位DeepMind + EMBL-EBI上线…...

Roboflow标注数据集

使用Roboflow进行标注 关键点标注目标检测标注图像分类标注分割标注 Roboflow是一款易于使用的在线 图像标注。 关键点标注 每个图像的标注包括&#xff1a; 1、边界框坐标&#xff08;每个物品应该有一个边界框&#xff0c;用*[x1,y1,x2,y2]*格式即左上角和右下角点描述&…...

大厂经验:第三方包Paramunittest参数化 VS Unittest内置参数化文本管理器subtest

大厂经验&#xff1a;第三方包Paramunittest参数化 VS Unittest内置参数化文本管理器subtest 代码解析 Paramunittest 核心逻辑 paramunittest.parametrized((Testerr, test, Invalid Login or Password., test_login_admin is passed),(Sam, test, Invalid Login or Passwo…...