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

再探Docker:从Docker基础到跨服务器部署


摘要: 这篇文章将从介绍Docker基础开始,逐步讲解如何创建镜像、使用Docker Compose编排容器、在Docker中更新部署环境,将更新后的环境打包为镜像并导出为tar包,最后在其他服务器上应用这个镜像。

1. Docker是什么

Docker是一种容器化平台,旨在简化应用程序的部署、管理和运行。它利用容器技术,允许开发人员将应用程序及其依赖项(例如库、工具、运行环境等)打包到一个称为容器的可移植容器中。这些容器在任何支持Docker的环境中都可以轻松部署和运行,无论是开发人员的个人计算机、数据中心的服务器还是云服务供应商的基础架构中。

通过Docker,用户可以实现快速、可靠地构建、发布和管理应用程序,因为容器打包了应用程序及其所有依赖,保证了在不同环境中的一致性。Docker提供了一种便捷的方式来管理应用程序的生命周期,包括开发、测试、部署和扩展。同时,它还提供了诸如容器编排、网络管理、存储管理等功能,使得大规模应用程序的管理更加高效和可靠。

容器化技术的主要优势包括:

  1. 便携性: 容器可以在不同的环境中运行,无需担心依赖项或配置的问题。
  2. 轻量级: 容器共享主机的操作系统内核,因此比虚拟机更轻量级,资源消耗更少。
  3. 可扩展性: 可以快速部署多个相同的容器副本以处理高负载。
  4. 隔离性: 容器提供了一定程度的隔离,使得不同的应用程序可以安全地在同一主机上运行。

总体而言,Docker的出现简化了软件开发和部署的过程,使得应用程序在不同环境中更加一致和可移植。

2. Docker的开发和现状

Docker最初是由一家名为Docker,Inc.的公司开发的。Docker,Inc. 于2013年创建了Docker开源项目,并推出了Docker容器化平台。这家公司旨在推动容器化技术的发展,并提供与Docker平台相关的商业产品和服务。

随着时间的推移,Docker成为了容器化领域的领先者,并且其容器技术得到了广泛的应用。然而,在公司发展的过程中,Docker,Inc.后来更名为Mirantis,专注于企业级容器管理解决方案,并在容器技术的领域继续提供服务和支持。

尽管Docker最初由Docker,Inc.开发,但Docker容器技术目前是一个开源项目,得到了全球范围内广泛的社区支持和贡献。因此,虽然公司本身已经发生了变化,但Docker容器技术仍然是一个活跃的开源项目,并且持续受到许多组织和个人的关注和使用。

Docker公司(即前身为Docker, Inc.的Mirantis)在容器技术领域仍然对Docker技术栈持有兴趣。尽管公司本身的焦点可能有所变化,专注于提供企业级容器管理解决方案和服务,但Docker技术本身仍然是他们的基础,并且在开源社区中得到广泛的支持。

在过去几年中,Docker技术栈不断发展,社区持续为其增加新的功能和改进。Docker容器技术作为一个成熟的容器化解决方案,继续受到许多组织和个人的青睐,用于开发、部署和管理应用程序。

尽管有些公司可能转向其他容器编排和管理工具(比如Kubernetes等),但Docker仍然是一个重要的工具,并且在许多场景下被广泛使用。不同的组织和团队会根据其特定需求和偏好选择合适的工具和技术,但Docker作为容器技术的先驱之一,在容器化领域仍然有着显著的地位和影响力。

3. Docker的基本概念和组成部分

Docker是一个开源的容器化平台,它引入了一系列的概念和组件,让用户能够轻松地创建、部署和管理应用程序的容器。以下是一些Docker的基本概念:

  1. 容器(Container):容器是Docker的核心概念,它是一个独立运行的、轻量级的可执行软件包,包含应用程序及其所需的运行环境、依赖项、库等。容器提供了隔离性、可移植性和一致性,允许应用程序在不同的环境中运行,而无需担心环境差异的问题。

  2. 镜像(Image):镜像是容器的模板,包含了运行容器所需的所有内容,包括文件系统、代码、运行时、库、环境变量等。用户可以基于现有的镜像来构建自己的应用程序镜像,也可以从Docker Hub等镜像仓库获取现有的镜像。

  3. Docker引擎(Docker Engine):Docker引擎是Docker的核心组件,负责管理容器的生命周期,包括创建、运行、停止和删除容器。它由dockerd守护进程和与其通信的CLI工具组成。

  4. Docker文件(Dockerfile):Docker文件是用于定义和构建Docker镜像的文本文件。它包含一系列的指令和命令,用于描述如何组装镜像,包括基础镜像选择、添加文件、运行命令、设置环境变量等。

  5. Docker Compose:Docker Compose是一个工具,允许用户使用YAML文件来定义和管理多个容器化应用服务。它简化了多容器应用的编排和管理。

  6. Docker Hub:Docker Hub是一个公共的镜像仓库,包含了大量的Docker镜像,用户可以从中获取镜像用于构建和运行容器。

  7. 容器编排(Orchestration):容器编排是管理和协调多个容器的过程,确保它们按照预期的方式运行和交互。Kubernetes是一个流行的容器编排工具,用于管理大规模容器化应用的部署、扩展和管理。

这些是Docker的一些基本概念,掌握这些概念有助于理解和使用Docker平台来进行应用程序的容器化和管理。

4. Docker Compose介绍

4.1. Docker Compose编排工具具体介绍

Docker Compose是一个用于定义和运行多个Docker容器应用的工具。它使用一个单独的YAML文件来配置应用程序的服务、网络设置、卷挂载等,并通过简化的命令集合来管理整个多容器应用的生命周期。

使用Docker Compose,开发人员可以定义一个包含多个服务的应用程序,每个服务对应一个独立的容器。这些服务可以彼此协作,例如Web服务器、数据库、消息队列等。通过使用Docker Compose,开发者可以在单个配置文件中描述整个应用程序的结构,并使用一条命令即可启动、停止、构建或销毁整个应用程序。

Docker Compose 是一个用于定义和管理多容器应用的工具,它允许开发者使用一个单独的文件来配置和启动多个相关联的 Docker 容器。下面是关于 Docker Compose 的一些详细说明:

主要特点:

  1. 声明式的定义
    使用 YAML 文件格式,开发者可以在一个文件中声明性地定义应用的服务、网络、卷等配置,非常易于阅读和维护。

  2. 多容器编排
    Docker Compose 允许定义多个服务(如数据库、Web 服务器、缓存服务等),并指定它们之间的依赖关系,以便一次性启动多个相关联的容器。

  3. 简化本地开发环境
    在开发环境中,可以使用 Docker Compose 快速启动多个容器服务,模拟生产环境的架构,使得团队成员能够轻松地共享相同的开发环境。

  4. 一键启动应用
    通过单个命令 docker-compose up,可以根据配置文件启动整个应用程序的所有服务。

  5. 环境变量、网络和卷的管理
    可以通过 Docker Compose 文件设置环境变量、网络连接和卷挂载等容器属性,方便进行配置和管理。

Docker Compose 文件结构示例:

以下是一个简单的 Docker Compose 文件示例,其中包含了两个服务:一个是基于 Node.js 的 Web 应用,另一个是 MongoDB 数据库。

version: '3.8'services:web:image: node:14volumes:- ./app:/appports:- "3000:3000"depends_on:- dbdb:image: mongo:latestenvironment:MONGO_INITDB_DATABASE: mydatabaseports:- "27017:27017"

常用命令:

  • docker-compose up: 启动所有定义的服务。
  • docker-compose down: 停止并删除所有服务和相关的网络、容器和卷。
  • docker-compose ps: 显示所有正在运行的容器状态。
  • docker-compose logs: 查看服务的日志输出。
  • docker-compose exec <service_name> <command>: 在运行中的服务容器中执行命令。

4.2. 使用Docker-Compose进行Docker容器编排

使用 Docker Compose 可以方便地定义和编排多个容器化服务,下面是一个简单的示例来演示如何使用 Docker Compose 编排容器。

假设您有一个 web 应用和一个数据库服务(比如一个基于 Node.js 的 Web 应用和一个 MongoDB 数据库),您可以使用 Docker Compose 来定义并编排这两个服务。

  1. 创建 Docker Compose 文件:创建一个名为 docker-compose.yml 的文件,内容如下:
version: '3.8'services:web:image: node:14   # 使用 Node.js 镜像作为基础镜像volumes:- ./app:/app   # 挂载本地文件到容器中,假设您的应用在./app目录下ports:- "3000:3000"  # 映射容器的3000端口到主机的3000端口depends_on:- db            # 定义依赖,表示web服务依赖于db服务db:image: mongo:latest  # 使用最新的MongoDB镜像environment:MONGO_INITDB_DATABASE: mydatabase  # 初始化数据库名称ports:- "27017:27017"  # 映射容器的27017端口到主机的27017端口
  1. 启动容器:在包含 docker-compose.yml 文件的目录中运行以下命令来启动容器:
docker-compose up -d

这会根据 docker-compose.yml 文件中定义的服务来启动两个容器:一个是名为 web 的 Node.js 应用容器,另一个是名为 db 的 MongoDB 容器。

  1. 访问应用:您的 Node.js 应用现在应该在 http://localhost:3000 上运行,并且能够访问 MongoDB 数据库。

  2. 停止和销毁容器:当您不再需要这些服务时,可以运行以下命令来停止并销毁容器:

docker-compose down

这样可以停止并删除由 Docker Compose 启动的所有容器。

通过 Docker Compose,您可以使用一个文件来定义和管理多个相关的容器服务,简化了多容器应用的部署和管理。

4.3. Docker Compose配置项介绍

当编写 Docker Compose 文件(通常命名为 docker-compose.yml)时,需要了解每个节点的配置。以下是 Docker Compose 文件中常见节点的详细说明:

version

  • 用于指定 Docker Compose 文件的版本。版本号定义了支持的语法和功能。例如:version: '3.8'

services

  • services 节点下定义了各种服务,每个服务对应一个容器。示例:

    services:web:# 服务配置db:# 另一个服务配置
    

服务配置

image
  • 指定 Docker 镜像名称,用于创建该服务的容器。例如:image: nginx:latest
build
  • 指定 Dockerfile 的路径来构建镜像。例如:build: ./myapp
ports
  • 定义端口映射,将容器端口映射到主机端口。例如:ports: ["8080:80"]
volumes
  • 挂载卷,将主机文件或目录挂载到容器内部。例如:volumes: ["./data:/app/data"]
environment
  • 设置环境变量。例如:environment: ["NODE_ENV=production", "DB_HOST=db"]
depends_on
  • 指定服务之间的依赖关系。例如:depends_on: ["db"]
command
  • 指定容器启动时要执行的命令。例如:command: npm start
networks
  • 指定容器所属的网络。例如:networks: ["my-network"]
restart
  • 指定容器的重启策略。例如:restart: always

示例

以下是一个完整的示例 Docker Compose 文件,演示了上述配置项的使用:

version: '3.8'services:web:image: nginx:latestports:- "8080:80"volumes:- ./html:/usr/share/nginx/htmlnetworks:- my-networkrestart: alwaysdb:image: mysql:latestenvironment:MYSQL_ROOT_PASSWORD: passwordvolumes:- mysql_data:/var/lib/mysqlnetworks:- my-networkrestart: alwaysnetworks:my-network:volumes:mysql_data:

这个示例展示了一个包含 webdb 两个服务的 Docker Compose 文件,每个服务都有相应的配置项。理解这些节点配置能够帮助您有效地定义和管理多容器应用。

5. 案例

5.1. 容器的产生和销毁

假设您有一个基于 Docker 的简单 Web 服务器应用,您可以通过以下步骤创建和销毁一个容器:

  1. 创建 Docker 镜像
    首先,您需要创建一个 Docker 镜像,用于构建您的 Web 服务器应用。这个镜像包含了您的应用程序、运行时环境等。您可以使用 Dockerfile 来定义这个镜像。

    示例 Dockerfile 可能如下所示:

    FROM nginx:latest
    COPY index.html /usr/share/nginx/html
    

    假设您有一个名为 index.html 的网页文件,它会被复制到 Nginx 服务器的默认 HTML 目录中。

  2. 构建镜像
    在包含 Dockerfile 的目录中,运行以下命令来构建镜像:

    docker build -t my-web-server .
    

    这将根据 Dockerfile 构建一个名为 my-web-server 的镜像。

  3. 运行容器
    一旦您有了镜像,可以使用该镜像来创建并运行一个容器。

    docker run -d -p 8080:80 --name my-container my-web-server
    

    这个命令会以后台模式运行一个容器,将容器的 80 端口映射到主机的 8080 端口,并命名为 my-container

  4. 访问应用
    现在您的容器正在运行,您可以通过浏览器或其他 HTTP 请求工具访问该 Web 服务器。在浏览器中访问 http://localhost:8080 就可以查看到您的网页内容。

  5. 销毁容器
    当您不再需要该容器时,可以停止并销毁它。

    docker stop my-container
    docker rm my-container
    

    第一个命令 docker stop 会停止容器,而第二个命令 docker rm 则会将其从系统中移除。

通过这些步骤,您可以创建一个简单的 Docker 容器,其中包含了一个基本的 Web 服务器应用,并能够在需要时启动、访问和销毁该容器。

5.2. Docker环境更新和导出

好的,以下是一个示例,将通过 Dockerfile 创建一个镜像,使用 Docker Compose 编排 Docker 容器,部署应用程序,然后在 Docker 中更新部署环境,将更新后的环境打包为镜像并导出为 tar 包,最后在其他服务器上应用这个镜像。

步骤一:创建 Dockerfile 创建镜像

  1. 创建应用目录和文件
    创建一个包含应用程序的目录,例如 myapp,并在其中编写应用程序文件。

  2. 编写 Dockerfile
    myapp 目录下创建 Dockerfile,示例内容如下:

    # 使用 Node.js 作为基础镜像
    FROM node:14# 设置工作目录
    WORKDIR /usr/src/app# 将应用程序文件复制到镜像中
    COPY package.json ./
    COPY . .# 安装依赖
    RUN npm install# 暴露应用程序端口
    EXPOSE 3000# 定义启动命令
    CMD ["npm", "start"]
    
  3. 构建镜像
    Dockerfile 所在目录执行以下命令构建镜像:

    docker build -t myapp-image .
    

步骤二:使用 Docker Compose 编排部署应用

  1. 创建 Docker Compose 文件
    创建一个名为 docker-compose.yml 的文件,定义你的服务。示例内容如下:

    version: '3.8'services:web:image: myapp-imageports:- "8080:3000"volumes:- ./myapp:/usr/src/appenvironment:- NODE_ENV=production
    
  2. 启动服务
    在包含 docker-compose.yml 文件的目录中运行以下命令来启动服务:

    docker-compose up -d
    

步骤三:在 Docker 中更新部署环境

  1. 进入容器
    可以使用 docker-compose exec 命令进入正在运行的容器,并在容器中进行环境更新。

    docker-compose exec web bash
    
  2. 更新环境
    在容器中进行所需的环境更新,例如更新配置、安装软件、修改应用程序等。

  3. 退出容器
    退出容器,并在退出后将其保存为新的镜像。

步骤四:将更新后的环境打包为镜像并导出为 tar 包

  1. 创建新的镜像
    在容器中更新完环境后,可以将其保存为新的镜像:

    docker commit <container_id> myapp-updated
    
  2. 导出为 tar 包
    将新的镜像导出为 tar 包:

    docker save myapp-updated > myapp-updated.tar
    

步骤五:在其他服务器上应用这个镜像

  1. 传输 tar 包到目标服务器
    将导出的 myapp-updated.tar 文件传输到目标服务器上。

  2. 加载镜像
    在目标服务器上加载镜像:

    docker load -i myapp-updated.tar
    
  3. 使用加载的镜像运行容器
    使用加载的镜像在目标服务器上运行容器,参考步骤二中的 Docker Compose 配置和启动命令。

这些步骤演示了如何创建镜像、使用 Docker Compose 部署应用、在 Docker 中更新环境并将其打包为镜像,最后将更新后的镜像导出为 tar 包并在其他服务器上加载应用。

结语

Docker作为一种容器化技术,为应用程序的部署和管理提供了高度便捷性和灵活性。以上案例展示了在Docker环境中的具体操作,从创建镜像到编排容器,再到更新和导出环境,为读者提供了全面的实践指南。


这篇博客将对Docker的基础概念、Docker Compose的使用以及具体案例进行了详细的阐述,以帮助读者了解并掌握Docker在应用部署和环境更新方面的应用。

相关文章:

再探Docker:从Docker基础到跨服务器部署

摘要&#xff1a; 这篇文章将从介绍Docker基础开始&#xff0c;逐步讲解如何创建镜像、使用Docker Compose编排容器、在Docker中更新部署环境&#xff0c;将更新后的环境打包为镜像并导出为tar包&#xff0c;最后在其他服务器上应用这个镜像。 1. Docker是什么 Docker是一种容…...

C# 使用PanGu分词

写在前面 这是官方介绍&#xff1a;盘古分词是一个中英文分词组件。作者eaglet 曾经开发过KTDictSeg 中文分词组件&#xff0c;拥有大量用户。作者基于之前分词组件的开发经验&#xff0c;结合最新的开发技术重新编写了盘古分词组件。 盘古分词组件需要配合其字典文件使用&am…...

Termius 一款优秀的跨平台 SSH 客户端工具

&#x1f525;&#x1f525;&#x1f525; 作为程序员或者运维管理人员&#xff0c;我们经常需要使用终端工具来进行服务器管理及各种操作&#xff0c;比如部署项目、调试代码、查看/优化服务、管理服务器等。 而实现远程服务器连接需要借助 SSH 协议来进行&#xff0c;SSH&am…...

生命科学领域 - 新药从研发到上市全流程

新药是指新研制的、临床尚未应用的药物&#xff0c;其化学本质应为新的化合物或称新化学实体、 新 分子实体、新活性实体。新药研发的根本目的是治疗疑难危重疾病&#xff0c;研制出来的药物即使是全新的化学结构&#xff0c;但是疗效或安全性却不及现有的药物便失去新药价值&a…...

血的教训------入侵redis之利用python来破解redis密码

血的教训------入侵redis之利用python来破解redis密码 利用强大的python来进行redis的密码破解&#xff0c;过程不亦乐乎&#xff0c;当然也可以用shell脚本 本篇文章只供学习交流&#xff0c;请勿他用&#xff0c;谢谢。 其他相关联的文章 [1]VMware安装部署kail镜像服务器【…...

yolov8-pose 推理流程

目录 一、关键点预测 二、图像预处理 二、推理 三、后处理与可视化 3.1、后处理 3.2、特征点可视化 四、完整pytorch代码 yolov8-pose tensorrt 一、关键点预测 注&#xff1a;本篇只是阐述推理流程&#xff0c;tensorrt实现后续跟进。 yolov8-pose的tensorrt部署代码…...

笔记十七、认识React的路由插件react-router-dom和基本使用

react-router 分类 web使用 react-router-dom native使用 react-router-native anywhere&#xff08;使用麻烦&#xff09; react-router 安装 yarn add react-router-dom main.jsx import React from "react"; import ReactDOM from "react-dom/client"…...

CleanMyMac X4.14.5Crack最新Mac电脑清理优化最佳应用

CleanMyMac X 4.14.5是用于清理和优化Mac的最佳应用程序和强大工具。它看起来很棒而且很容易理解。该软件可以清理、保护、优化、稳定和维护您的 Mac 系统。您可以立即删除不必要的、不寻常的、无用的垃圾文件、损坏的文件垃圾&#xff0c;并释放大量内存空间。此外&#xff0c…...

Linux shell单双引号区别

shell单双引号区别&#xff1a; Shell脚本中很多时候都在用单引号或双引号来框住字符串&#xff0c;但是他们之间是存在区别的 避免踩坑记录… 单引号 单引号中的任何字符都没有特殊含义,即一些转义字符&#xff0c;$ 变量引用都会无效&#xff0c;它只把他们当作一个单纯的…...

ES 8.x开始(docker-compose安装、kibana使用、java操作)

学习文档地址 一、Docker安装 这里使用docker-compose来安装&#xff0c;方便后续迁移&#xff0c;Elasticserach和kibina一起安装。 1、创建安装目录 configdataplugins 2、配置文件 配置文件有两个&#xff0c;一个是ES的配置文件&#xff0c;一个docker-compose的配置文件 …...

有了倾斜摄影,如何搭建一座智慧城市?

随着无人机航测、倾斜摄影等全新一代测绘信息技术方法的发展&#xff0c;可以迅速搜集制作精细化的城市三维模型&#xff0c;搭建城市地理信息基础服务架构。 近期都在重点关注的“智慧城市”究竟是什么&#xff0c;有什么重大作用&#xff0c;同时又面临着什么难关&#xff0c…...

设计测试用例的具体方法总结

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️白马沉河共歃誓&#xff0c;怒涛没城亦不悔 ☁️基于需求进行测试用例的设计 基…...

计算机毕业设计|基于SpringBoot+MyBatis框架的仿天猫商城购物系统设计与实现

计算机毕业设计|基于SpringBootMyBatis框架的仿天猫商城购物系统设计与实现 迷你仿天猫商城是一个基于SSM框架的综合性B2C电商平台&#xff0c;需求设计主要参考天猫商城的购物流程&#xff1a;用户从注册开始&#xff0c;到完成登录&#xff0c;浏览商品&#xff0c;加入购物…...

JAXB的XmlValue注解

XmlValue注解用在Java属性、或者方法上。它可以使得映射到XML Schema中的Java类具有一个simpleContent 或者simpleType。 一个Java类中最多只能有一个属性被XmlValue注解。 如果被XmlValue注解的JavaBean属性是Java类中唯一映射到XML的成员&#xff0c;那么该Java类将会被映射…...

Git版本管理(05) git仓库迁移(保留原来记录分支体系)

说明&#xff1a;本文主要是一次git迁移仓库的实战记录。 1 迁移前的准备 仓库迁移前&#xff0c;需要将所有有必要的分支checkout到本地&#xff08;想要转移到新仓库的分支就都 checkout一遍&#xff09;&#xff0c;接下来将old仓库从远程仓库克隆到本地&#xff1a; $git…...

科技与教育:未来教育的新趋势

在21世纪&#xff0c;科技的快速发展正在深刻地改变教育行业。从在线学习平台到虚拟现实教室&#xff0c;科技为教育带来了革命性的变化。本文将探讨科技如何影响现代教育&#xff0c;并预测未来教育的发展趋势。 一、科技在教育中的应用 在线学习平台&#xff1a;通过平台如C…...

E云管家微信群聊机器人开发

请求URL&#xff1a; http://域名地址/modifyGroupRemark 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型说明wId是String登录实例标识chatRo…...

CVE-2023-27524:Apache Superset未授权访问漏洞复现

文章目录 ​Apache Superset 未授权访问漏洞(CVE-2023-27524)复现0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.漏洞复现 0x06 修复建议 ​Apache Superset 未授权访问漏洞(CVE-2023-27524)复现 0x01 前言 免责声明&#xff1a;请勿利用文…...

机器学习——多元线性回归升维

机器学习升维 升维使用sklearn库实现特征升维实现天猫年度销量预测实现中国人寿保险预测 升维 定义&#xff1a;将原始的数据表示从低维空间映射到高维空间。在线性回归中&#xff0c;升维通常是通过引入额外的特征来实现的&#xff0c;目的是为了更好地捕捉数据的复杂性&#…...

[C/C++]用堆实现TopK算法

一:引入 思考一个问题: 怎么在100个数中找到前10个最大的数? way1: 相信大多数人想到的方法是先把100个数放到数组中从大到小排序,再打印前10个数 way2: 前一文中我们讲了堆结构,那么就可以把这100个数建为大堆,再依次pop10次 这种方法虽然再这个问题下可行,但是如果是再1亿…...

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数&#xff0c;对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容&#xff1a;参考网站&#xff1a; PID算法控制 PID即&#xff1a;Proportional&#xff08;比例&#xff09;、Integral&#xff08;积分&…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1)&#xff1a;从基础到实战的深度解析-CSDN博客&#xff0c;但实际面试中&#xff0c;企业更关注候选人对复杂场景的应对能力&#xff08;如多设备并发扫描、低功耗与高发现率的平衡&#xff09;和前沿技术的…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...