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

【Docker 08】Compose - 容器编排

🌈 一、Docker Compose 介绍

⭐ 1. Docker Compose 是什么

  • Docker Compose 是由 Docker 官方提供的一个用于定义和运行多容器应用的工具,它让用户可以通过一个 YAML 文件(通常是 docker-compose.yml)来配置应用所需要的服务(如 Web 服务、数据库、缓存等),然后使用一条命令就可以启动整个应用栈。
  • 在 docker-compose 中,有以下两个非常重要的概念:
    1. 服务 service:由若干相同镜像容器组成的应用。
    2. 项目 project:由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义,整个 docker-compose.yml 定义一个项目。

⭐ 2. Docker Compose 的必要性

  • Docker 是一个轻量化的应用程序,Docker 官方推荐每个 Docker 容器中只运行一个进程。
  • 假设当前要启动一个应用,它涉及到了 MySQL 和 Nginx,需要分别为应用、MySQL 和 Nginx 创建单独的 Docker 容器,然后将这些容器运行起来。当构建好 Docker 之后,每次启动这个应用都至少需要 docker run 三次,未免也太过繁琐。且这些容器都是分散独立的,也不方便镜像管理。
  • 此时就引入了 Docker Compose 来将那些为同一个应用服务的容器整合起来,方便进行管理。

Docker Compose 主要优势

  • 简化控制:Docker Compose 允许用户在单个 YAML 文件中定义和管理多容器应用程序。简化了编排和协调各种服务的复杂任务,从而更轻松地管理和复制用户的应用程序环境。
  • 高效协作:Docker Compose 的配置文件易于共享,促进了开发、运营、测试等项目相关者之间的协作。
  • 快速应用程序开发:Docker Compose 会缓存用于创建容器的配置。当重新启动未更改的服务时,Docker Compose 会重新使用现有容器。重复使用容器意味着可以非常快速的更改环境。
  • 跨环境的可移植性:Docker Compose 支持 Compose 文件中的变量,可以使用这些变量为不同的环境或不同的用户自定义合成。

⭐ 3. Docker Compose 的功能

  • Docker Compose 可以管理应用程序的整个生命周期。
功能分类具体内容示例命令
服务编排使用 docker-compose.yml 文件定义多个服务docker compose up
自动构建镜像可以自动根据 Dockerfile 文件构建镜像docker compose build
一键启动于停止一条命令就可以 启动 / 停止 整个应用docker compose up / down
服务依赖管理通过 depends_on 来定义服务之间的依赖关系depends_on: [db]
网络自动管理默认为服务创建隔离的虚拟网络,也支持自定义网络networks:
数据卷管理自动创建、挂载卷,实现数据持久化volumes:
日志集中查看查看所有服务容器的日志输出docker compose logs
配置参数统一管理可以使用 .env 文件来定义环境变量.env 文件 + %{VAR} 语法

⭐ 4. Docker Compose 的使用场景

  1. 本地开发环境构建:用于本地构建一个由多个服务组成的项目(如 Web + 数据库 + 缓存),通过一个 docker-compose.yml 文件可以一键启动所有组件,避免环境配置混乱。
  2. 多环境配置管理:结合多个 Compose 文件或环境变量管理不同部署环境下的配置,可以避免重复配置和代码污染,提升部署灵活性。
  3. 数据库备份 / 恢复演练:搭建一个隔离的数据库环境进行数据恢复、备份策略测试或异常演练,不会影响正式环境。

🌈 二、Docker Compose 文件

  • Docker Compose 可以通过一个 YAML 文件(通常是 docker-compose.yml)来配置应用所需要的服务。

⭐ 1. 文件语法版本

  • 当前官方支持 3 个大版本(version1、version2、version3),其中的 version1 已经被废弃。
  • 建议始终使用 Docker 官方文档推荐的最新版语法,以获得最大兼容性和功能支持。
Compose 版本对应字段写法支持的最低 Docker Engine 版本说明
1不写 version 字段< 1.10功能有限,已废弃
2version: ‘2’1.10+引入了 depends_on 等基本功能
2.1 ~ 2.4version: ‘2.x’1.12 ~ 17.12增强了 healthcheck、资源限制等
3version: ‘3’1.13+为 Swarm 服务模式涉及
3.1 ~ 3.9version: ‘3.x’17.01 ~ 20.10添加 secrets、configs、runtime
3.8version: ‘3.8’19.03+最常用的稳定版本
3.9version: ‘3.9’20.10+最新 v3 版本,新增 profiles

⭐ 2. 文件基本结构

  • 一个标准的 docker-compose.yml 文件主要包括以下几个顶层字段(提示:xxx 仅作为占位,需根据具体服务进行填写)。
version: '3.8'           # 指定语法版本
services:                # 服务定义块(核心),可以存在多个servicename:           # 服务名称,内部 bridge 网络下可作为 DNS 名称image:        xxx    # 必选,镜像的名字command:      xxx    # 可选,覆盖默认镜像里的 CMD 命令environment:  xxx    # 可选,设置环境变量,等价于 docker run 的 --envvolumes:      xxx    # 可选,挂载数据卷,等价于 docker run 的 -vnetworks:     xxx    # 可选,加入的网络,等价于 docker run 的 --networkports:        xxx    # 可选,端口映射,等价于 docker run 的 -pexpose:       xxx    # 可选,仅声明容器暴露的端口,等价于 --exposedepends_on:   xxx    # 可选,设置服务间的依赖顺序,类似于 --linkrestart:      xxx    # 可选,容器重启策略,等价于 --restartbuild:        xxx    # 可选,构建镜像路径,等价于 docker build 的 -fservicename2:# ...servicename3:# ...
volumes:                # 可选,数据卷定义块,等价于 docker volume create# volume_name:#   driver: xxx
networks:               # 可选,网络定义块,等价于 docker network create# network_name:#   driver: bridge

⭐ 3. 常见字段格式语法

🌙 3.1 image

  • 用于指定容器运行的镜像,以下格式都可以:
image: image_name                                 # 镜像名(默认最新版本)
image: image_name:tag                             # 镜像 + 标签(版本号)
image: image_name@sha256:digest                   # 镜像 + 摘要哈希
image: namespace/image_name                       # 指定命名空间镜像
image: registry_host:port/namespace/image_name    # 私有仓库中的镜像

🌙 3.2 command

  • 用于覆盖镜像默认的启动命令,以下格式都可以:
command: "executable param1 param2"               # 字符串形式命令
command: ["executable", "param1", "param2"]       # 列表形式命令(推荐)

🌙 3.3 entrypoint

  • 用于覆盖容器默认的 entrypoint,以下格式都可以:
entrypoint: "/entry.sh"                           # 字符串形式入口点
entrypoint: ["sh", "/entry.sh"]                   # 列表形式入口点(推荐)

🌙 3.4 environment

  • 用于设置容器的环境变量,以下格式都可以:
environment:- VAR_NAME=value                                # 字符串列表格式- VAR_NAME                                      # 从宿主环境继承变量environment:VAR_NAME: value                                 # 映射格式(推荐使用)ANOTHER_VAR: "true"

🌙 3.5 networks

  • 指定容器运行的网络,可用于服务发现,以下格式都可以:
networks:- network_name                                   # 加入已有网络(简写形式)networks:custom_net:aliases:- service_alias                              # 在网络中定义别名

🌙 3.6 volumes

  • 用于将宿主机的存储卷 / 文件挂载到容器中:
volumes:- host_path:container_path                       # 将宿主机路径挂载到容器中- volume_name:container_path                     # 使用命名卷挂载数据- container_path                                 # 创建匿名卷并挂载到容器路径- type: volume|bind                              # 指定挂载类型(volume 或 bind)source: volume_name_or_host_path               # 数据来源(卷名或宿主路径)target: container_path                         # 容器内的目标挂载路径read_only: true|false                          # 是否只读挂载

🌙 3.7 ports

  • 用于配置宿主机和容器之间的端口映射:
ports:- "host_port:container_port"                     # 宿主端口映射到容器端口- "host_ip:host_port:container_port"             # 限定绑定主机 IP- "container_port"                               # 随机分配宿主机端口映射容器端口- target: container_port                         # 容器暴露端口(Swarm 专用格式)published: host_port                           # 映射到宿主机的端口protocol: tcp|udp                              # 协议类型mode: ingress|host                             # 发布模式(负载均衡或主机直连)

🌙 3.8 expose

  • 用于暴露容器端口,仅在网络中可访问:
expose:- container_port                                 # 向同一网络中的容器暴露端口- another_container_port                         # 不对主机暴露,仅内部访问

🌙 3.9 build

  • 用于从源码构建镜像,以下几种格式都可以:
build: context_path                                # 简写,指定构建上下文路径build:context: context_path                            # 构建上下文路径(目录)dockerfile: Dockerfile_name                      # Dockerfile 文件名(默认是 Dockerfile)args:                                            # 构建时传入的参数(ARG)ARG_NAME: valuetarget: build_stage_name                         # 多阶段构建时的目标阶段cache_from:- image_name:tag                               # 用于加速构建的缓存镜像来源

🌙 3.10 depends_on

  • 用于声明依赖服务的启动顺序(仅控制启动顺序,不保证服务已就绪):
depends_on:- service_a                                      # 当前服务依赖 service_a 启动- service_b                                      # 当前服务依赖 service_b 启动

🌙 3.11 env_file

  • 用于引入 .env 文件来设置环境变量:
env_file:- .env                                           # 默认环境文件,当前路径- config/dev.env                                 # 自定义路径下的 .env 文件

🌈 三、Docker Compose 命令

⭐ 1. 命令清单

命令功能
01docker compose build构建服务所需要的镜像
02docker compose config检查 docker-compose.yml 文件格式是否正确,并以规范的格式来显示配置
03docker compose cp在本地系统和服务容器之间拷贝文件
04docker compose create创建服务的容器,但不启动它们
05docker compose up构建,(重新)创建,启动,链接一个服务相关的容器
06docker compose down停止所有容器,并删除容器、网络、卷等资源
07docker compose exec在运行中的容器内执行命令
08docker compose images列出所有容器当前使用的镜像
09docker compose kill强制停止服务的容器
10docker compose logs查看服务容器输出的日志
11docker compose ls显示当前主机上的所有 Compose 项目
12docker compose pause暂停服务容器
13docker compose unpause恢复被暂停的服务容器
14docker compose ps列出当前项目中运行的所有容器
15docker compose pull从远程仓库拉取服务镜像
16docker compose push推送服务镜像到远程仓库
17docker compose restart重启 / 重启某个服务
18docker compose rm删除服务停止的容器
19docker compose run在指定服务容器上执行相关的命令(一次性)
20docker compose start启动当前停止的某个容器
21docker compose stop停止当前运行的某个容器
22docker compose top显示服务容器中运行的进程
23docker compose port列出所有的服务端口映射
24docker compose events从服务获取实时事件
25docker compose version查看 Compose 版本信息

⭐ 2. 命令通用格式

  • 对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或容器。
    • 如果没有特别说明,命令对象默认是项目,这意味着项目中所有的服务都会受到命令影响。
  • Docker Compose 命令的基本使用格式如下:
docker compose [options] command [args...]
options 的常见选项说明
-f 或 --file指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定
-p 或 --project-name指定项目名称,默认将所在目录的目录名作为项目名

⭐ 3. docker compose up

  • 该命令用于启动并创建 Compose 文件中定义的所有服务容器。
  • 它会尝试自动完成包括购进啊镜像、(重新)创建服务、启动服务并关联服务相关容器的一系列操作。

1. 基础语法

docker compose up [options] [service_name...]
options 的可选项功能
-d在后台运行服务容器
--force-recreate强制重新创建容器,不能和 --no-recreate 同时使用
--no-recreate如果容器已经存在,则不重新创建,不能和 --force-recreate 同时存在

2. 使用示例

docker compose up -d web	# 后台启动名为 web 的服务

⭐ 4. docker compose down

  • 用于停止并删除所有 / 指定的服务容器、网络、卷(可选)和镜像(可选),用于彻底清理 Compose 启动的资源。

1. 基础语法

docker compose down [options] [service_name...]
options 的可选项功能
-v 或 --volumes删除所有的目录映射

2. 使用示例

docker compose down -v # 删除所有的服务容器、网络、卷

⭐ 5. docker compose run

  • 临时运行一个服务容器,并在其中执行命令,不影响原有容器的生命周期。

1. 基础语法

docker compose run [options] service_name [command] [args...]
options 的可选项功能
-d在后台运行容器
--name NAME自定义容器名称(默认为 项目_服务_序号)
--entrypoint CMD覆盖默认的容器启动指令
-e KEY=VAL设置环境变量的值
-u 或 --user=""指定运行容器的用户 UID 或 用户名
--rm命令执行完后,自动删除容器
-p 或 --publish=[]将主机端口映射到容器端口,格式为 host_port:container_port

2. 使用示例

docker compose run --rm db sh                    # 临时进入 db 服务执行 sh
docker compose run app npm install               # 对 app 服务执行 npm 安装

🌈 四、Docker Compose 部署 WordPress

⭐ 1. WordPress 介绍

  • WordPress 是一个免费、开源的内容管理系统(CMS),用户可以通过直观的管理页面创建、管理、发布数字内容,主要用于构建和管理网站

WordPress 的核心功能

功能模块说明
文章与页面创建并发布博客文章和页面,支持分类、标签、草稿、发布时间等
插件系统提供扩展功能,例如 SEO 优化、安全防护、缓存、联系表单、电商功能等
主题系统可切换外观风格,支持免费/付费主题,开发者也可自定义开发主题
媒体管理上传和插入图片、视频、PDF 等媒体资源,有图库管理
用户与权限管理支持多个用户角色:管理员、编辑、作者、投稿者、订阅者
评论系统内建文章评论功能,支持反垃圾评论插件如 Akismet
多语言支持支持多语言网站,可配合插件如 Polylang、WPML 构建多语种页面

⭐ 2. WordPress 部署

  1. 编写 Docker Compose:创建一个 docker-compose.yml 文件,内容如下:
version: "3.8"                                     # 指定 Docker Compose 文件语法版本services:                                          # 所有服务容器定义块wordpress:                                       # WordPress 服务(Web前端)image: wordpress                               # 使用官方 WordPress 镜像restart: always                                # 始终重启(容器异常退出时自动恢复)depends_on:                                    # 设置服务依赖关系db:                                          # 依赖名为 db 的服务(MySQL)condition: service_healthy                 # 等待 db 服务变为健康后才启动本服务ports:- 8080:80                                    # 将主机 8080 端口映射到容器 80 端口(HTTP)environment:                                   # 设置环境变量供 WordPress 安装初始化使用WORDPRESS_DB_HOST:     db                    # 数据库主机(服务名)WORDPRESS_DB_USER:     MyWordPressUser       # 数据库用户名WORDPRESS_DB_PASSWORD: MyWordPressPass       # 数据库密码WORDPRESS_DB_NAME:     WordPress             # 要使用的数据库名volumes:- ./WordPress:/var/www/html                  # 映射本地目录到容器网站目录,实现持久化db:                                              # MySQL 服务(数据库)image: mysql:5.7                               # 使用官方 MySQL 5.7 镜像(兼容性良好)restart: always                                # 始终重启(数据库异常后自动恢复)environment:                                   # 设置数据库初始化参数(首次运行有效)MYSQL_DATABASE:      WordPress               # 初始化创建的数据库名MYSQL_USER:          MyWordPressUser         # 自定义数据库用户MYSQL_PASSWORD:      MyWordPressPass         # 数据库用户密码MYSQL_ROOT_PASSWORD: MyRootPass              # 数据库 root 用户密码volumes:- ./MysqlVarLib:/var/lib/mysql               # 映射本地目录到容器数据库目录,实现数据持久化healthcheck:                                   # 健康检查(用于依赖启动判断)test:     mysql -u root -pMyRootPass -e "SELECT 1;" # 测试 MySQL 是否响应查询timeout:  5s                                        # 每次检查最大等待时间retries:  10                                        # 最大重试次数
  1. 让站点在后台运行:
docker compose up -d

image-20250621223242234

  1. 在浏览器内通过访问服务器的 8080 端口来访问容器内的 web 页面。

image-20250621223605257

  1. 配置参数,点击安装:

image-20250621224014197

image-20250621224042749

  1. 使用创建的用户名和密码进行登录:

image-20250621224131772

  1. 进入后台,发布一篇 blog 看看功能是否正常。

image-20250621224828322

  1. 清理资源:先停应用,再停数据库。

image-20250621225210513

相关文章:

【Docker 08】Compose - 容器编排

&#x1f308; 一、Docker Compose 介绍 ⭐ 1. Docker Compose 是什么 Docker Compose 是由 Docker 官方提供的一个用于定义和运行多容器应用的工具&#xff0c;它让用户可以通过一个 YAML 文件&#xff08;通常是 docker-compose.yml&#xff09;来配置应用所需要的服务&…...

docker执行yum报错Could not resolve host: mirrorlist.centos.org

解决办法&#xff1a; -- 依次执行以下命令cd /etc/yum.repos.d/sed -i s|#baseurlhttp://mirror.centos.org|baseurlhttp://vault.centos.org|g /etc/yum.repos.d/CentOS-*sed -i s/mirrorlist/#mirrorlist/g /etc/yum.repos.d/CentOS-*yum update -yecho "export LC_ALL…...

信贷域——信贷授信业务

摘要 本文详细介绍了信贷授信业务&#xff0c;包括其核心目标、典型流程、不同机构授信流程的对比、授信业务的其他类型以及授信模块的技术实现。信贷授信是金融机构在放贷前对客户信用额度的评估与审批流程&#xff0c;旨在控制风险、合理设定额度和期限、确保合规&#xff0…...

python的校园兼职系统

目录 技术栈介绍具体实现截图系统设计研究方法&#xff1a;设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理&#xff0c;难度适中&#xf…...

深度剖析 PACK_SESSIONID 实现原理与安全突破机制

&#x1f310; 深度剖析 PACK_SESSIONID 实现原理与安全突破机制 &#x1f5bc;️ 1. 完整数据处理流程 #mermaid-svg-TW7jVIcz81hCZVS9 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-TW7jVIcz81hCZVS9 .error-ico…...

从0开始学习计算机视觉--Day02--数据驱动

上次我们在课程里了解到&#xff0c;亚马逊网站在当时构建了一个在那时候最大的供AI训练的数据集&#xff0c;为了推广这个测试&#xff0c;他们举办了比赛邀请了许多的参赛者&#xff0c;识别图片的标准是输出的类别中只要在前面五个里包含了正确答案就算识别成功。在这个过程…...

【LeetCode#第198题】打家劫舍(一维dp)

198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#…...

stm32串口(uart)2转发到串口(uart)3实现

今天博主在用kelil5写stm32的程序时遇到了一个全局变量因为在中断和任务切换时没有加 volatile 修饰&#xff0c;导致任务检测不到标志位变化&#xff0c;无法实现效果的问题。 全部代码&#xff1a; /* USER CODE BEGIN Header */ /***************************************…...

数据结构——函数填空题

链队出队入队 入队&#xff1a;新指针p赋给队尾的下一个&#xff0c;再赋给队尾 出队&#xff1a;队首指针赋给p&#xff0c;后移 p的下一个赋给队首指向的下一个 若队尾p&#xff0c;则证明首尾相连为1个 字符串匹配算法 二叉树 统计二叉树度为1的节点 树T为空&#xff0…...

什么是跨域问题?后端如何解决跨域问题?

跨域问题是指浏览器为了安全&#xff0c;对不同域&#xff08;包含不同协议、不同端口或不同主机名&#xff09;的请求进行限制&#xff0c;从而导致请求无法正常访问后端接口。 跨域问题的产生源于浏览器的同源策略&#xff08;Same-Origin Policy&#xff09;&#xff0c;这…...

使用ccs生成bin

CCS12.6 编译生成BIN文件正确方法_ccs生成bin文件-CSDN博客...

Python 邻接表详细实现指南

邻接表是图数据结构的一种高效表示方法&#xff0c;特别适合表示稀疏图。下面我将用 Python 详细讲解邻接表的多种实现方式、操作方法和实际应用。 一、邻接表基础概念 邻接表的核心思想是为图中的每个顶点维护一个列表&#xff0c;存储与该顶点直接相连的所有邻接顶点。 邻…...

FVISION 未来视界工作室:AI驱动的创新与智能外包平台

大家好&#xff0c;今天给大家介绍一个非常有意思的AI创新平台——FVISION 未来视界工作室。如果你正在寻找高效、智能、前沿的数字化工具和服务&#xff0c;这里一定有你想要的答案&#xff01; &#x1f31f; 平台简介 FVISION 未来视界工作室专注于AI驱动的创新应用开发&am…...

领域驱动设计(DDD)【3】之事件风暴

文章目录 说明一 事件风暴理论知识1.1 事件风暴的核心目标1.2事件风暴的关键步骤1.2.1 准备工作1.2.2 核心流程1.2.3 事件风暴的输出 1.3 事件风暴的优势1.4 常见问题Q1&#xff1a;事件风暴适合所有项目吗&#xff1f;Q2&#xff1a;事件风暴后如何落地&#xff1f;Q3&#xf…...

3.10 坐标导航

1.编写代码 新建文件nav_clienr.cpp编写代码 #include<ros/ros.h> #include<move_base_msgs/MoveBaseAction.h> #include<actionlib/client/simple_action_client.h>typedef actionlib::SimpleActionClient<move_base_msgs::MoveBaseAction> MoveBas…...

TensorFlow 安装与 GPU 驱动兼容(h800)

环境说明TensorFlow 安装与 GPU 驱动兼容CUDA/H800 特殊注意事项PyCharm 和终端环境变量设置方法测试 GPU 是否可用的 Python 脚本 # 使用 TensorFlow 2.13 在 NVIDIA H800 上启用 GPU 加速完整指南在使用 TensorFlow 进行深度学习训练时&#xff0c;充分利用 GPU 能力至关重要…...

WPF调试三种工具介绍:Live Visual Tree、Live Property Explorer与Snoop

WPF调试工具详解&#xff1a;Live Visual Tree、Live Property Explorer与Snoop 1. Live Visual Tree (实时可视化树) 简介 Live Visual Tree是Visual Studio内置的WPF调试工具&#xff0c;允许开发者在应用程序运行时检查可视化树结构&#xff0c;查看控件的层次关系及其状态。…...

用OBS Studio录制WAV音频,玩转语音克隆和文本转语音!

言简意赅的讲解OBS Studio解决的痛点 随着AI技术的快速发展&#xff0c;语音克隆与文本生成语音技术越来越受欢迎。无论你想要制作个人虚拟主播&#xff0c;还是给自媒体视频配音&#xff0c;拥有高质量的原始音频都是关键。本文详细教你使用免费且功能强大的软件——OBS Stud…...

5.3 VSCode使用FFmpeg库

一、VSCMake 1.1 使用ffmpeg动态库 项目目录结构&#xff1a; ./ ├── 3rdparty # 第三方依赖库 │ └── ffmpeg_4.4.1 │ ├── include # 头文件 │ ├── lib # 静态库库 │ └── share ├── build # 编译目…...

【Datawhale组队学习202506】零基础学爬虫 02 数据解析与提取

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 例如&#xff1a;第一章 Python 机器学习入门之pandas的使用 文章目录 系列文章目录前言2.1 概述2.2 re 解析2.3 bs4 解析2.4 xpath 解析总结 前言 Datawhale是一个专注于…...

[muduo] ThreadPool | TcpClient | 异步任务 | 通信测试

第九章&#xff1a;线程池&#xff08;ThreadPool&#xff09; 在第八章《TcpServer》中&#xff0c;我们了解到muduo::net::TcpServer通过EventLoop线程池处理入站连接。 这些EventLoop线程主要负责网络I/O&#xff1a;套接字读写和定时器处理&#xff0c;由Poller和Channel…...

探索 Vue 替代方案

Vue vs React vs Angular 在快速迭代的前端世界&#xff0c;Vue、React和Angular三大框架的竞争从未停止。2025年的今天&#xff0c;它们各自进化出了怎样的面貌&#xff1f;让我们深入剖析它们的核心差异&#xff0c;助你做出明智的技术选型。 Vue.js 完整的基于组件的UI框…...

大模型的开发应用(十二):RAG 与 LlamaIndex基础

这里写目录标题 1 LlamaIndex 简要介绍1.1 核心价值1.2 核心组件1.3 核心流程1.4 为什么要用 LlamaIndex&#xff1f;1.5 典型应用场景1.6 与类似工具对比1.7 安装1.8 学习资源 2 文档解析与 Document 对象2.1 示例文件与代码2.2 Document 对象的核心特性2.3 在 RAG 工作流程中…...

Java面试题025:一文深入了解数据库Redis(1)

欢迎大家关注我的JAVA面试题专栏&#xff0c;该专栏会持续更新&#xff0c;从原理角度覆盖Java知识体系的方方面面。 一文吃透JAVA知识体系&#xff08;面试题&#xff09;https://blog.csdn.net/wuxinyan123/category_7521898.html?fromshareblogcolumn&sharetypeblogco…...

Web攻防-XSS跨站Cookie盗取数据包提交网络钓鱼BEEF项目XSS平台危害利用

知识点&#xff1a; 1、Web攻防-XSS跨站-手工代码&框架工具&在线平台 2、Web攻防-XSS跨站-Cookie盗取&数据提交&网络钓鱼 演示案例-WEB攻防-XSS跨站-Cookie盗取&数据提交&网络钓鱼&Beef工具 1、XSS跨站-攻击利用-凭据盗取 条件&#xff1a;无防…...

(LeetCode 面试经典 150 题) 169. 多数元素(哈希表 || 二分查找)

题目&#xff1a;169. 多数元素 方法一&#xff1a;二分法&#xff0c;最坏的时间复杂度0(nlogn)&#xff0c;但平均0(n)即可。空间复杂度为0(1)。 C版本&#xff1a; int nnums.size();int l0,rn-1;while(l<r){int mid(lr)/2;int ans0;for(auto x:nums){if(xnums[mid]) a…...

71、单元测试-Junit5简介

71、单元测试-Junit5简介 # JUnit 5 简介 JUnit 5 是 Java 平台上最流行的单元测试框架之一&#xff0c;是 JUnit 的重大升级版本&#xff0c;引入了许多新特性和改进&#xff0c;旨在提供更现代化、灵活和强大的测试体验。 ## 主要组成部分 JUnit 5 由三个模块组成&#xff1a…...

IEC61850 一致性测试中的 UCA 测试

一、IEC61850 与 UCA 的关系背景 标准演进&#xff1a;IEC61850 是电力系统自动化领域的国际通信标准&#xff0c;其发展与美国 UCA&#xff08;User Communications Architecture&#xff09;标准密切相关。2001 年&#xff0c;UCA 国际用户组织与 IEC 合作&#xff0c;将 UC…...

ProtoBuf:proto3 语法详解

&#x1f308; 个人主页&#xff1a;Zfox_ &#x1f525; 系列专栏&#xff1a;ProtoBuf 在语法详解部分&#xff0c;依旧使⽤项⽬推进的⽅式完成讲解。这个部分会对通讯录进⾏多次升级&#xff0c;使⽤2.x表⽰升级的版本&#xff0c;最终将会升级如下内容&#xff1a; 不再打…...

博图SCL语言GOTO语句深度解析:精准跳转

在SCL编程中&#xff0c;**GOTO语句**是控制流程的底层工具&#xff0c;它允许程序无条件跳转到指定的**标签位置**。虽然现代编程中较少使用&#xff0c;但在特定工业场景下仍能发挥独特价值。 GOTO语句核心机制 基本语法结构 // 定义标签 <标签名>: // 跳转指令 GOTO…...

面试题-在ts中有两个类型,一个是a,一个是b,这两个联合起来就是c,如何实现联合

在 TypeScript 中&#xff0c;若要将两个类型 a 和 b 联合成一个新类型 c&#xff0c;可以使用 联合类型&#xff08;Union Type&#xff09; 或 交叉类型&#xff08;Intersection Type&#xff09;&#xff0c;具体取决于你的需求&#xff1a; 一、联合类型&#xff08;Unio…...

Mac电脑-触摸板增强工具-BetterTouchTool

BetterTouchTool mac 触摸板增强工具&#xff0c;允许用户使用各种手势来控制其计算机。 Bettertouchtool mac是一个小而高效的macOS应用程序&#xff0c;旨在帮助您为手势定义快捷方式。 此外&#xff0c;Bettertouchtool可用于使用常规鼠标和键盘快捷键&#xff0c;并提供伴…...

MySQL误删数据急救指南:基于Binlog日志的实战恢复详解

背景 数据误删是一个比较严重的场景 1.典型误操作场景 场景1&#xff1a;DELETE FROM orders WHERE status0 → 漏写AND create_time>‘2025-06-20’ 场景2&#xff1a;DROP TABLE customer → 误执行于生产环境 认识 binlog 1.binlog 的核心作用 记录所有 DDL/DML 操…...

API网关Apisix管理接口速查

&#x1f9ed; 管理接口总体分类&#xff08;基于 REST API&#xff09; 资源类别接口路径前缀功能说明路由&#xff08;Routes&#xff09;/apisix/admin/routes/{id}定义 HTTP 请求的匹配规则及转发目标服务&#xff08;Services&#xff09;/apisix/admin/services/{id}封装…...

React 组件通信

父传子 函数式组件 function Footer(props){const [count,setCount] useState(0)const {name,age} propsconst onClick ()>{setCount(count1)}return (<div><button onClick{()>{onClick()}}>点此1</button><div>{count}</div><di…...

Zephyr 电源管理机制深度解析:从 Tickless Idle 到平台 Suspend 实践

本文系统解析 Zephyr 的电源管理机制&#xff0c;包括 Tickless Idle 模式、系统 suspend/resume 生命周期管理、平台级功耗优化 Hook、自定义设备电源域&#xff0c;以及如何结合低功耗 SoC 实现最小化功耗设计。全文超过 5000 字&#xff0c;适合构建对功耗敏感的 IoT、BLE、…...

clickhouse-server连不上clickhouse-keeper的问题记录

背景 想简单部署一个1 shard 2 replica&#xff0c;1keeper的集群。 有两个虚拟机&#xff1a;192.168.1.3&#xff0c;192.168.1.6。 192.168.1.3&#xff1a;部署1个ck&#xff0c;1个keeper 192.168.1.6&#xff1a;部署1个ck 192.168.1.3和192.168.1.6的ck组成1个shar…...

Python 数据分析与可视化 Day 3 - Pandas 数据筛选与排序操作

&#x1f3af; 今日目标 掌握 DataFrame 的条件筛选&#xff08;布尔索引&#xff09;学会多条件筛选、逻辑运算熟练使用排序&#xff08;sort_values&#xff09;提升数据组织力结合列选择进行数据提取分析 &#x1f9ea; 一、列选择与基本筛选 ✅ 选择单列 / 多列 df[&quo…...

Android NDK下载链接及配置版本

Android NDK下载链接及配置版本 https://github.com/android/ndk/releases 在build.gralde里面这样配置ndk具体版本号&#xff1a; android {ndkVersion "27.0.12077973" } Android Studio报错&#xff1a;Could not move temporary workspace () to immutable locat…...

Mac Parallels Desktop Kali 2025 代理设置

Mac Parallels Desktop Kali 2025 代理设置 核心步骤&#xff1a; kali设置桥接wifi 查看kali和主机ip 运行命令ifconfig查看kali ip&#xff1a; mac主机ip&#xff1a; kali设置proxy ip填写主机ip&#xff0c;port为主机proxy端口 enjoy...

Python 的内置函数 hash

Python 内建函数列表 > Python 的内置函数 hash Python 的内置函数 hash() 是一个非常有用的工具函数&#xff0c;主要用于获取对象的哈希值。哈希值是一个固定长度的整数&#xff0c;代表该对象的唯一标识。在 Python 中&#xff0c;hash() 函数常用于字典键值、集合元素等…...

文生视频(Text-to-Video)

&#x1f552; 生成时间&#xff1a;每张图大概 10–60 秒&#xff08;取决于设备&#xff09; ✅ 二、文生视频&#xff08;Text-to-Video&#xff09; 以下项目中&#xff0c;很多都基于 SD 模型扩展&#xff0c;但视频生成复杂度高&#xff0c;生成时间一般 超过 30 秒&am…...

(LeetCode 面试经典 150 题) 80. 删除有序数组中的重复项 II (双指针、栈)

题目&#xff1a;80. 删除有序数组中的重复项 II 思路&#xff1a;左指针 left 类似于指向栈顶的下一个待填的元素&#xff0c;每次遍历只需看当前元素nums[i]和栈顶的下一个元素nums[left-2]是否相等&#xff0c;不等就可以插入栈当中。时间复杂度0(n)。 C版本&#xff1a; …...

【舞蹈】编排:如何对齐拍子并让小节倍数随BPM递减

音的强弱关系 当前划分编排最小单位的代码的分析 📊 代码逻辑分析 ✅ 完整性方面 代码逻辑相对完整,包含了: 结构段落分析(intro, verse, chorus等)强拍时间点提取歌词时间轴处理AI增强的编舞建议生成⚠️ 主要问题 1. 强拍对齐逻辑不够精确 # 当前代码只是简单提取…...

LangGraph--基础学习(工具调用)

本节将详细学习大模型是怎么调用工具的&#xff0c;为什么可以调用工具等等&#xff0c;手写一个工具调用&#xff0c;后续可以通过mcp自己调用即可&#xff0c;没必要自己写&#xff0c;但是学习过程中需要手写&#xff0c;通常怎么使用第三方工具调用呢&#xff1f; import o…...

华为云 Flexus+DeepSeek 实战:华为云单机部署 Dify-LLM 开发平台全流程指南【服务部署、模型配置、知识库构建全流程】

华为云 FlexusDeepSeek 实战&#xff1a;华为云单机部署 Dify-LLM 开发平台全流程指南【服务部署、模型配置、知识库构建全流程】 文章目录 华为云 FlexusDeepSeek 实战&#xff1a;华为云单机部署 Dify-LLM 开发平台全流程指南【服务部署、模型配置、知识库构建全流程】前言1、…...

【appium】2.初始连接脚本配置

连接配置 from appium import webdriver desired_caps {platformName: Android,automationName: UIAutomator2,deviceName: ZTEB880,appPackage: com.taobao.taobao,appActivity: com.taobao.tao.welcome.Welcome,noReset: True }driver webdriver.Remote(http://localhost:…...

磁性传感器在电机控制闭环系统中的反馈作用

磁性传感器的基本原理和类型 基本原理 &#xff1a;磁性传感器是基于磁学原理来检测磁场强度、方向或其他与磁场相关的物理量。常见的磁性传感器有霍尔传感器、磁阻传感器等。霍尔传感器是利用霍尔效应工作的&#xff0c;当电流通过置于磁场中的半导体材料时&#xff0c;在垂直…...

Python:.py文件如何变成双击可执行的windows程序?(版本1)

1、如下.py文件&#xff0c;右键重命名文件后缀名&#xff1a;py改为&#xff1a;pyw 2、修改时&#xff0c;提示如下&#xff1a;不用管点击&#xff1a;是即可 3、之后双击&#xff0c;即可执行python代码文件。 好的&#xff0c;我们来详细介绍一下 Python 的 .pyw 文件。 简…...

Spring Boot + MyBatis + Vue:全栈开发的深度剖析与实践指南

一、技术栈深度剖析 &#xff08;一&#xff09;Spring Boot&#xff1a;后端开发的加速器 Spring Boot 是基于 Spring 框架的一个开源 Java 项目&#xff0c;旨在简化基于 Spring 的应用开发。它通过自动配置机制&#xff0c;能够根据项目中添加的依赖自动配置 Spring 和相关…...