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

4.docker容器编排(docker compose 与 docker swarm)

本文目录

  • 1.容器编排
  • 2.Docker Compose
    • 1.Docker Compose 安装
    • 2.Docker Compose 示例
      • 1.使用 docker-compose 启动 nginx
      • 2.docker compose 常用命令
      • 3.校验 docker-compose.yml 是否有错误
      • 4.创建服务,启动容器
      • 5.弹性伸缩<扩缩容>
  • 3.Docker Swarm
    • 1.Swarm 架构图
    • 2.Swarm 节点说明
    • 3.Swarm 集群部署
      • 1.了解docker swarm 命令
      • 2.初始化集群
      • 3.work节点加入集群
      • 4.查看swarm集群节点信息
    • 4.部署服务命令
    • 5.部署服务
    • 6.弹性伸缩<扩缩容>
      • 缩容
    • 7.节点离开swarm集群
    • 8.删除离开的节点
    • 9.离开的节点,再次加入swarm集群
    • 10.退出 docker swarm 集群

1.容器编排

容器编排:就是针对容器生命周期的管理,对容器的生命周期进行更快速方便的方式进行管理。

实例:一个java程序,依赖了mysql,redis,要想把 java 程序运行起来,则必须要先启动 mysql、redis。那么这三者这件就存在了依赖关联。
 
容器编排存在的意义:

  • 依赖管理,当一个容器必须在另一个容器运行完成后,才能运行时,就需要进行依赖管理
  • 副本数控制,容器有时候也需要集群,快速的对容器集群进行弹性伸缩
  • 配置共享,通过配置文件统一描述需要运行的服务相关信息,自动化的解析配置内容,并构建对应的服务
     

容器编排的出现,就是让开发者可以更简单的使用容器,省去频繁的写各种命令,docker 容器编排的出现,就类似 shell 脚本,一键搞定!

容器编排,主要有两种模式:

  • 基于Docker Compose(单机)
  • 基于Swarm(集群)

2.Docker Compose

  Docker Compose 是单机环境下的容器编排。
 
  有的时候我们会需要涉及到在一台机器部署多个容器,那么此时再手动的每次输入相关的一堆配置命令再来启动容器,还是产生了很多无意义的重复性劳动。针对单机的多容器部署的情况,Docker 为我们提供了一个单机版本的服务编排工具 docker-compose
 
  Docker-Compose 可以高效便捷的管理单机上运行的所有容器,它通过 yaml 配置文件的方式完成之前执行 docker run 命令所设置的所有参数,你可以先针对单机上的所有容器进行相关配置,配置完成后即可使用 docker-compose 对单机多容器进行高效的管理
 
  docker compose 容器编排,就是基于docker-compose.yml配置文件进行的容器编排。只要学会如何编写这个配置文件,就会用这个玩意了。

在这里插入图片描述

1.Docker Compose 安装

注意:需要注意的是,docker-compose 与docker有版本对应关系,因此在使用docker-compose时需要选择与已安装的docker版本相对应的docker-compose版本,否则可能会出现不兼容或无法正常工作的问题。但是!我在官网一致没有找到 docker 和 docker-compose 的对应关系表啊,有知道的小伙伴能评论发我一下吗??我只找到个 docker compose 发行版本,依赖的 docker 需要升级的版本,docker compose 发行版本地址:https://docs.docker.com/compose/release-notes。如下图所示:
 
在这里插入图片描述
因为 docker 使用的是最新版本:24.0.6,所以 docker compose 也使用了最新版本 2.21.0
 
还有一个对应关系表,在这里,也没有太看懂。地址:

  • https://docs.docker.com/compose/compose-file/compose-file-v2
  • https://docs.docker.com/compose/compose-file/compose-file-v3

Docker Compose 下载地址:https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-linux-x86_64
 
在这里插入图片描述

# step 1:下载 docker compose 最新版本
curl -L "https://github.com/docker/compose/releases/download/v2.21.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# $(uname -s)  系统内核,即:linux
# $(uname -m)  系统架构,即:x86_64# step 2:将可执行权限应用于二进制文件
sudo chmod +x /usr/local/bin/docker-compose# step 3:创建软链
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose# step 4:测试是否安装成功
docker-compose --version

在这里插入图片描述

2.Docker Compose 示例

# docker 启动 nginx命令:
docker run -d --restart=always --network xxx -v /www/abc:/usr/share/nginx/html -e APP_ENV=dev -p 80:80 --name nginx-compose  nginx
# 命令解释:
# -d  后台运行
# --restart=always   出现异常后总是自动重启
# --network xxx  自定义网络
# -v /www/abc:/usr/share/nginx/html  将[本地目录/www/abc]与[容器目录/usr/share/nginx/html] 进行数据卷绑定
# -e APP_ENV=dev  添加环境变量
# -p 80:80  端口映射
# --name  容器名称
# nginx  镜像名

上述命令,就可以在 docker 中启动一个 nginx 容器了。

  • 在不使用来回复制、粘贴的方式,如何将这条命令复用呢?
  • 这个命令还不算太长,如果命令更长的怎么办呢?
     

这样就需要用到 docker compose 了。

1.使用 docker-compose 启动 nginx

创建一个/opt/docker/nginx文件夹,在nginx文件夹下创建一个 docker-compose.yml 文件,进入文件,就可以编写 docker compose了

参考官网进行编写docker compose即可。因为docker compose的配置项太多了。截至 2023-09-14,使用的docker 24.0.6docker compose 2.21.0,所以此处直接使用 Compose V3版本。地址:https://docs.docker.com/compose/compose-file/compose-file-v3
 
配置超级多,根本记不住。所以参考官网来写就好了。
 
如果是一个普通的镜像,更多的关注【服务services】、【网络networks】、【数据卷volumes】这三个配置项就可以了
 
在这里插入图片描述

# docker 启动 nginx命令:
docker run -d --restart=always --network xxx -v /www/abc:/usr/share/nginx/html -e APP_ENV=dev -p 80:80 --name nginx-compose  nginx

上面的命令,转成 nginx compose 如下:

version: "3.8"
services: nginx-demo-compose:contianer_name: "nginx-compose"image: nginxrestart: alwaysnetworks: nginx_netvolumes:- /www/abc:/usr/share/nginx/htmlenvironment:- APP_ENV=devports:- 80:80networks:nginx_net:ipam:driver: defaultconfig:- subnet: "172.16.238.0/24"

2.docker compose 常用命令

命令说明
build先构建完镜像,然后构建一个docker服务(如果开始就已经是个镜像了,则会跳过,命令不生效)
config规范、验证并查看 compose 文件,验证通过后,控制台会返回 compose 文件内容
cp在容器和本地文件系统之间复制文件/文件夹
create为 compose 中的 service 服务创建容器。
down停止并删除容器、网络
events从容器接收实时事件
exec在运行中的容器中执行命令
images列出创建的容器使用的镜像
kill强制停止服务容器
logs查看容器的日志输出
ls列出正在运行的 compose 项目
pause暂停 service 服务
port输出端口绑定的公共端口
ps列出容器
pull拉取 service 服务镜像
push推送 service 服务镜像
restart重启 service 服务容器
rm删除停止的服务容器
run在服务上运行一次性命令
start启动服务
stop停止服务
top显示正在运行的进程
unpause取消暂停服务
up创建并启动一个容器
version显示 Docker Compose 版本信息
wait等待阻塞直到第一个服务容器停止

提示: 更详细命令说明,使用 docker compose [命令] --help 了解。比如:docker compose up --help

扩缩容命令:

命令说明
docker compose up --scale 服务名=num扩容/缩容,服务名为compose文件服务名,num 为数量

3.校验 docker-compose.yml 是否有错误

# 进入/opt/docker/nginx 目录,在docker-compose.yml同级下,执行如下命令
docker compose config

在这里插入图片描述

4.创建服务,启动容器

进入/opt/docker/nginx 目录下,在docker-compose.yml同级目录下,开始操作

# step 1:创建服务(此处也可以启动compose中的特定服务:docker compose create 服务名)
docker compose create
# step 2:查看服务是否创建成功
docker compose ps -a
# step 3:后台启动容器
docker compose up -d

如图所示:

在这里插入图片描述

5.弹性伸缩<扩缩容>

扩缩容命令,如下:

docker compose up -d --scale 服务名=num

扩缩容注意:

  • 需要删除 container_name (docker 不允许多个容器具有相同的名称)
  • 修改 port 端口映射(一个服务只能一个端口,会提示端口占用问题)

修改后的 docker-compose.yaml 如下:

version: "3.8"
services: nginx-demo:image: nginxrestart: alwaysnetworks: - nginx_netvolumes:- /www/abc:/usr/share/nginx/htmlenvironment:- APP_ENV=devports:- 80   # 此处80代表容器中的80端口,映射到本地的随机端口networks:nginx_net:ipam:driver: defaultconfig:- subnet: "172.16.238.0/24"

修改配置信息后,执行 docker compose up -d,便会重新读取compose配置,启动容器

在这里插入图片描述

3.Docker Swarm

Swarm 也是需要提前安装好 Docker Compose !!!
 
  Swarm 是 Docker 公司推出的用来管理 docker 集群的平台,几乎全部用GO语言来完成的开发的, 它是将一群 Docker 宿主机变成一个单一的虚拟主机,Swarm 使用标准的 Docker API 接口作为其前端的访问入口,换言之,各种形式的DockerClient(compose, docker-py 等) 均可以直接与 Swarm 通信,甚至 Docker 本身都可以很容易的与 Swarm 集成,这大大方便了用户将原本基于单节点的系统移植到 Swarm 上,同时Swarm 内置了对 Docker 网络插件的支持,用户也很容易的部署跨主机的容器集群服务。
 
  Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务对于微服务的部署,显然 Docker Swarm 会更加适合
 
  从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,所以 swarm 我们无需手动安装。
 
  Swarm deamon只是一个调度器(Scheduler) + 路由器(router),Swarm自己不运行容器,它只是接受Docker客户端发来的请求,调度适合的节点来运行容器,这就意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,放Swarm重新恢复运行之后,他会收集重建集群信息。https://github.com/docker/swarm
 
  k8s 的出现早于 swarm,所以 swarm 的诞生,就是为了与 k8s 竞争,k8s 已经很成熟了,所以目前市场上用的 k8s 的还是挺多的,swarm 相对来说用的还不是提多。

1.Swarm 架构图

在这里插入图片描述

2.Swarm 节点说明

  运行 Docker 的主机可以主动初始化一个 Swarm 集群或者加入一个已存在的 Swarm 集群,这样这个运行 Docker 的主机就成为一个 Swarm 集群的节点 (node) 。
 
  Swarm节点分为管理 (manager) 节点工作 (worker) 节点
 
  管理节点用于 Swarm 集群的管理,docker swarm 命令基本只能在管理节点执行(节点退出集群命令 docker swarm leave 可以在工作节点执行)。一个 Swarm 集群可以有多个管理节点,但只有一个管理节点可以成为 leader,leader 通过 raft 协议实现。通常,第一个启用docker swarm的节点将成为leader,后来加入的都是follower。当前的leader如果挂掉,剩余的节点将重新选举出一个新的leader。每一个manager都有一个完整的当前集群状态的副本,可以保证manager的高可用。
 
  工作节点是任务执行节点,管理节点将服务 (service) 下发至工作节点执行。管理节点默认也作为工作节点。你也可以通过配置让服务只运行在管理节点。worker节点之间,通过control plane进行通信,这种通信使用gossip协议,并且是异步的。
 
  来自 Docker 官网的这张图片形象的展示了集群中管理节点与工作节点的关系。

3.Swarm 集群部署

三台机器如下:每台机器都安装好 dockerdocker-compose

IP角色
192.168.204.101manager 管理节点
192.168.204.102worker 工作节点
192.168.204.103worker 工作节点

1.了解docker swarm 命令

# 查看docker swarm 命令
docker swarm --help[root@localhost ~]# docker swarm --helpUsage:  docker swarm COMMANDManage SwarmCommands:init        Initialize a swarmjoin        Join a swarm as a node and/or managerRun 'docker swarm COMMAND --help' for more information on a command.
# 查看 swarm 集群状态
docker info
# 查看 swarm 集群节点信息
docker node ls

2.初始化集群

# 登录管理节点,并执行如下命令
docker swarm init --advertise-addr 192.168.204.101# 返回如下信息
[root@localhost ~]# docker swarm init --advertise-addr 192.168.204.101
Swarm initialized: current node (2tlpn6ywqh9kms9ymgndpoinc) is now a manager.To add a worker to this swarm, run the following command:docker swarm join --token SWMTKN-1-3gcmbp3voxo05kw0q4lfe972a1uy7bbch59aabu55i3dnb2eeo-3a26jdpdkmdmvjuj54ki9c14h 192.168.204.101:2377To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

3.work节点加入集群

复制初始化集群返回的命令,分别在 两个work 节点执行,将work节点加入 swarm 集群。
 
记得:关闭防火墙,或者开放端口 2377!!!
先关闭防火墙:systemctl stop firewalld
然后永久关闭防火墙:systemctl disable firewalld

# 加入swarm集群命令
docker swarm join --token SWMTKN-1-3gcmbp3voxo05kw0q4lfe972a1uy7bbch59aabu55i3dnb2eeo-3a26jdpdkmdmvjuj54ki9c14h 192.168.204.101:2377

加入成功如图所示:

在这里插入图片描述

4.查看swarm集群节点信息

进入 manager 管理节点,通过 docker node ls 查看集群节点信息。work 节点无法查看哦!

在这里插入图片描述

4.部署服务命令

在管理节点,通过命令 docker service 部署服务,通过docker service --help 查看详细命令

命令说明
create创建一个新的服务
inspect展示一个/多个服务的详细信息
logs查看服务/任务的日志
ls显示所有service服务
ps显示一个/多个服务的所有task
rm删除一个/多个服务
rollback恢复service服务的配置信息
scale弹性扩缩容service服务
update更新service服务

5.部署服务

在管理节点,通过命令 docker service 部署服务,此处来部署一个 nginx 服务

# 部署一个nginx服务
docker service create --replicas 1 -p 80:80 --name nginx_swarm nginx
# --replicas 1  一个副本
# -p 80:80 端口映射
# --name 自定义名称

在这里插入图片描述

# manager管理节点, 查看所有service服务
docker service ls

在这里插入图片描述

# 在 manager 和 work 节点,都执行 docker ps 命令,查看服务是否启动成功
docker ps

在这里插入图片描述

# 访问服务
curl 192.168.204.101

在这里插入图片描述

如果要想在管理端去访问 curl 192.168.204.202 和 192.168.204.203,也显示服务正常。
需要先扩容至副本数为 3,即可。
 
提示:另一种情况:副本数为3后,现在指定节点203退出swarm集群,此时 3 个副本就会重新分配(比如:201机器2个副本,202机器1个副本,如果此时203节点重新加入后,即使203这个节点上没有这个副本,集群会帮我们自动分发服务,你同样还是可以访问curl 192.168.204.203 成功)

6.弹性伸缩<扩缩容>

以下命令,在 manager 管理节点执行操作

# 副本数扩容(nginx_swarm:服务名)
docker service update --replicas 3 nginx_swarm

错误提示:error creating external connectivity network: Failed to Setup IP tables: U
解决方案:关闭防火墙后,需要重启 docker 服务
命令:service docker restart

在这里插入图片描述
在这里插入图片描述

缩容

修改 --replicas 的个数即可。

7.节点离开swarm集群

# 哪个节点要离开集群,在指定节点执行如下命令
docker swarm leave

管理节点查看节点信息,可以看到有个节点已经Down
在这里插入图片描述

8.删除离开的节点

以下命令,在 manager 管理节点执行操作

# 删除节点(nodeId 通过 docker node ls 查看)
docker node rm [nodeId]

在这里插入图片描述

9.离开的节点,再次加入swarm集群

在要加入集群的节点执行如下命令:

# 查看加入woker的命令
docker swarm join-token worker
# 再次执行刚才的,加入swarm集群命令即可
docker swarm join --token SWMTKN-1-3gcmbp3voxo05kw0q4lfe972a1uy7bbch59aabu55i3dnb2eeo-3a26jdpdkmdmvjuj54ki9c14h 192.168.204.101:2377

在这里插入图片描述

附:join token其他常见命令:
docker swarm join-token worker:查看加入woker的命令。
docker swarm join-token manager:查看加入manager的命令
docker swarm join-token --rotate worker:重置woker的Token。
docker swarm join-token -q worker:仅打印Token。

10.退出 docker swarm 集群

# work 节点:
docker swarm leave
# manager节点:
docker swarm leave -f

本文结束,谢谢

相关文章:

4.docker容器编排(docker compose 与 docker swarm)

本文目录 1.容器编排2.Docker Compose1.Docker Compose 安装2.Docker Compose 示例1.使用 docker-compose 启动 nginx2.docker compose 常用命令3.校验 docker-compose.yml 是否有错误4.创建服务&#xff0c;启动容器5.弹性伸缩<扩缩容> 3.Docker Swarm1.Swarm 架构图2.S…...

Linux中配置sudo用户访问权限

一、如何在 Linux 中配置 sudo 的访问权限 1.1、添加一个Linux普通用户有 sudo 权限 [root@localhost ~]# useradd test // 创建一个普通用户为:test [root@localhost ~]# [root@localhost ~]# passwd test // 设置用户test密码为:test Changing password for user te…...

ASfP: 增强AOSP平台开发的利器——Android Studio for Platform

ASfP: 增强AOSP平台开发的利器——Android Studio for Platform Android Studio for Platform (ASfP) 是一个为使用 Soong 构建系统构建的 Android 开源项目&#xff08;AOSP&#xff09;平台开发者而设计的 Android Studio IDE 版本。与标准 Android Studio 不同&#xff0c;…...

【Html】用CSS定义咖啡 - 咖啡配料展示

显示效果 代码 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><title>CodePen - For The Love Of Coffee</title><link rel"stylesheet" href"./style.css">&l…...

Learn Prompt-Prompt 高级技巧:AutoGPT

AutoGPT 是一个由Toran Richards创建的流行开源项目。它利用GPT4作为大脑&#xff0c;结合langchain的链接思想&#xff0c;连接各种工具和互联网资源&#xff0c;来完成人类给予的任务。您只需要设定一个目标&#xff0c;AutoGPT就会自主规划并逐步执行任务。如果遇到问题&…...

IntelliJ IDEA - Maven 在控制台Maven编译正常,但是在IDEA中不正常,表现不一致

文章目录 现象原因解决验证 现象 一个Maven项目&#xff0c;当导入到IDEA后&#xff0c;无法在IDEA中正常的编译和下载jar依赖&#xff0c;类似下面的截图。 但是在Windows控制台却可以正常编译&#xff0c;类似下面的截图。 CMD执行&#xff1a;mvn clean install -Dmaven.te…...

list 用法与模拟

list 用法 list list 模拟 #pragma once #include <assert.h> namespace sjy {//链表节点template <typename T>struct __list_node{__list_node(const T& val T()):_prev(nullptr),_next(nullptr),_val(val){}/*成员变量*/__list_node<T>* _prev;__…...

【操作系统笔记】进程和线程

进程的组成 进程要读取 ELF 文件&#xff0c;那么&#xff1a; ① 要知道文件系统的信息&#xff0c;fs_struct② 要知道打开的文件的信息&#xff0c;files_struct 一个进程除了需要读取 ELF 文件外&#xff0c;还可以读取其他的文件中的数据。 进程中肯定有一个 mm_struct…...

一短文读懂编译型与解释型编程语言

在编程世界中&#xff0c;我们经常听到编译型语言和解释型语言这两个术语。它们是什么&#xff0c;有什么区别呢&#xff1f;让我们一起来探讨一下。 编译型语言 编译型语言&#xff0c;如C、Java等&#xff0c;是一种需要先被编译成机器代码&#xff0c;然后才能被执行的语言…...

修炼离线:(三)sqoop插入hbase 报错权限问题

一&#xff1a;报错现象。 二&#xff1a;解决方式。 方法一&#xff1a;修改文件所有者。 切换hadoop用户&#xff1a;export HADOOP_USER_NAMEhdfs hadoop fs -chown -R root:root /方法二&#xff1a;修改权限 切换hadoop用户&#xff1a;export HADOOP_USER_NAMEhdfs ha…...

【JavaEE】多线程(四)

多线程&#xff08;四&#xff09; 在开始讲之前&#xff0c;我们先来回顾回顾前三篇所讲过的内容~ 线程的概念 并发编程&#xff0c;多进程&#xff0c;比较重&#xff0c;频繁创建销毁&#xff0c;开销大 Thread的使用 创建线程 继承Thread实现Runnable继承Thread&#xff…...

第一章:最新版零基础学习 PYTHON 教程(第七节 - Python 中的语句、缩进和注释)

在这里,我们将讨论Python中的语句、Python中的缩进和Python中的注释。我们还将讨论 Python 语句、Python 缩进、Python 注释的不同规则和示例,以及“文档字符串”和“多行注释”之间的区别。 Python中的语句是什么 Python语句是Python 解释器可以执行的指令。Python 语言中…...

C++ 【2】

1.指针基础 字符&#xff1a;C 一个字符占一个字节 在C中 << 这个为插入运算符 >> 这个为提取运算符 一个变量的地址称为该变量的指针&#xff1b;如果在程序中定义了一个变量或者数组&#xff0c; 那么&#xff0c;这个变量或数组的地址&#xff08;指针…...

Java学习笔记40——Lambda表达式

Lambda表达式 Lambda表达式函数式编程思想概述Lambda表达式的标准格式Lambda表达式练习练习1练习2练习3 Lambda表达式的省略模式Lambda表达式的注意事项Lambda表达式与接口的区别 Lambda表达式 函数式编程思想概述 面向对象思想强调“必须通过对象的形式做事” 在函数式思想中…...

【考研数学】线性代数第五章 —— 特征值和特征向量(3,矩阵对角化理论)

文章目录 引言三、矩阵对角化理论3.1 一般矩阵的相似对角化3.2 实对称矩阵的相似对角化3.2.1 实对称矩阵相似对角化定理3.2.2 实对称矩阵相似对角化过程 写在最后 引言 承接前文&#xff0c;我们来看看矩阵的对角化理论。 我们前面提到对角化是在矩阵相似那里&#xff0c;若存…...

【计算机网络】IP数据报首部格式、最大传输单元MTU、最大分段大小MSS

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多计算机网络知识专栏&#xff1a;计算机网络&#x1f525; 给大家跳段…...

shell脚本之文件读写

shell脚本之文件读写 1、读取文件内容并打印2、将内容写入文件3、追加内容到文件末尾4、读取文件内容到变量中5、逐行读取文件内容并处理6、逐行追加内容到文件末尾7、获取文件行数8、获取文件最后一个单词 Shell 脚本读写文件的方法有很多种&#xff0c;下面是一些常见的方法&…...

SAP 刷新Fiori Apps缓存的方法(解决修改CDS后Fiori无法重载新配置)

1. 问题 修改CDS Annotation后&#xff0c;基于Fiori Element发布的Fiori App无法应用新的界面 2. 解决办法 2319491 - How to clean up the cache after applying changes that affect SAP Fiori apps刷新Frontend&#xff1a; SE38&#xff1a; /UI5/APP_INDEX_CALCULATE…...

如何在 Excel 中计算日期之间的天数

计算两个日期之间的天数是 Excel中的常见操作。无论您是规划项目时间表、跟踪时间还是分析一段时间内的趋势&#xff0c;了解如何在 Excel 中查找日期之间的天数都可以提供强大的日期计算功能。 幸运的是&#xff0c;Excel 提供了多种简单的方法来获取两个日期之间的天数。继续…...

Java高级-注解

注解 1.介绍2.元注解3.注解的解析4.注解的应用场景 1.介绍 注解 Annotation 就是Java代码里的特殊标记&#xff0c;作用是让其他程序根据注解信息来决定什么是执行该程序注解&#xff1a;注解可以在类上、构造器上、方法上、成员变量上、参数上等位置 自定义注解 /*** 自定…...

逻辑回归:给不确定性划界的分类大师

想象你是一名医生。面对患者的检查报告&#xff08;肿瘤大小、血液指标&#xff09;&#xff0c;你需要做出一个**决定性判断**&#xff1a;恶性还是良性&#xff1f;这种“非黑即白”的抉择&#xff0c;正是**逻辑回归&#xff08;Logistic Regression&#xff09;** 的战场&a…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

HubSpot推出与ChatGPT的深度集成引发兴奋与担忧

上周三&#xff0c;HubSpot宣布已构建与ChatGPT的深度集成&#xff0c;这一消息在HubSpot用户和营销技术观察者中引发了极大的兴奋&#xff0c;但同时也存在一些关于数据安全的担忧。 许多网络声音声称&#xff0c;这对SaaS应用程序和人工智能而言是一场范式转变。 但向任何技…...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...