小阿轩yx-Docker Swarm 管理

news2024/12/24 19:05:47

小阿轩yx-Docker Swarm 管理

容器编排部署工具

  • 除 Google 推出的 Kubernetes 之外,还有 Docker 发布的 Swarm 与 Mesos 推出的 Marathon

案例一 Docker Swarm 群集部署

Docker

  • 自诞生以来,容器特性以及镜像特性给 DevOps 爱好者带来很多方便
  • 很长时间内 Docker 只能在单机上运行,跨主机部署、运行与管理能力受外界诟病
  • 跨主机能力薄弱,导致容器与主机的形成高度耦合,降低了容器的灵活性,难以实现容器迁移、分组等功能

案例概述

  • 创鑫公司给云计算工程师提出新的要求
  • 可将集群中所有 Docker Engine 整合进一个虚拟的资源池,通过执行命令与单一的主 Swarm 进行沟通,不必和每个 DockelEngine 沟通。
  • 在灵活的调度策略下,IT 团队可以更好地管理可用的主机资源,保证应用容器的高效运行。

案例前置知识点

Docker Swarm 概述
  • 是 Docker 社区提供的基于 Docker 的集群管理调度工具
  • 能将多台主机构建成一个 Docker 集群

默认对外提供两种 API

标准的 Docker API 包括

  • Docker Client
  • Compose
  • DockerUI
  • Jenkins

它们可以通过 Swarm 工具与 Docker 集群进行通信

集群管理 API

  • 用于集群的管理
Docker Swarm基本特性
  • 通过 SwarmKit 进行构建的,Swarm 模式是 Docker Engine 内置支持的一种默认实现
  • Docker 1.12以及更新的版本都支持 Swarm 模式

集群管理集成进 Docker Engine

  • 使用内置的集群管理功能,可以直接通过 Docker CLI 命令来创建 Swarm 集群,并部署应用服务,而不需要其它外部软件来创建和管理 Swarm 集群

去中心化设计

  • Swarm 集群中包含管理节点(Manager)和工作节点(Worker)两类,可以直接基于 Docker Engine 来部署任何类型的节点。在 Swarm 集群运行期间,可以对其作出任何改变,实现对集群的扩容和缩容等,如添加与删除节点。而做这些操作时不需要暂停或重启当前的 Swarm 集群服务。

声名式服务模型

  • 在实现的应用栈中,Docker Engine 使用了一种声明的方式,可以定义各种所期望的服务状态。

缩放

  • 对于每个服务,可以声明要运行的任务数。向上或向下扩展时,Swarm集群会通过添加或删除任务来自动调整以维持所需的状态。

协调预期状态与实际状态的一致性

  • 管理节点会不断地监控并协调集群的状态,使得Swarm 集群的预期状态和实际状态保持一致。

多主机网络

  • Swarm 集群支持多主机网络,可以为服务指定覆盖网络。管理节点在初始化或更新应用程序时自动为覆盖网络上的容器分配地址。

服务发现

  • 管理节点会给Swarm 集群中每一个服务分配一个唯一的 DNS 名称,对运行中的 Docker 容器进行负载均衡。可以通过 Swarm 内置的 DNS 服务器,查询 Swarm集群中运行的 Docker 容器状态。

负载均衡

  • Swarm 集群中,可以指定如何在各个 Node 之间分发服务容器(ServiceContainer),实现负载均衡。如果想要使用 Swarm 集群外部的负载均衡器,可以将服务容器的端口暴露到外部。

默认安全

  • Swarm 集群中的每个节点都强制执行 TLS 相互身份验证和加密,以保护自身与所有其他节点之间的通信。用户可以选择使用自签名根证书或自定义根 CA 的证书

滚动更新

  • 对于服务需要更新的场景,可以在多个节点上进行增量部署更新,在 Swarm管理节点使用 Docker CLI 设置一个 delay(延迟)时间间隔,实现多个服务在多个节点上依次进行部署,这样可以非常灵活地控制。如果有一个服务更新失败,则暂停后面的更新操作,重新回滚到更新之前的版本。
主要的关键概念
节点
  • 每个参与到 Swarm 集群中的 Docker Engine 都称之为一个节点。
  • 在单个物理计算机或云服务器上运行一个或多个节点,但是生产环境下的集群部署通常包括分布在多个物理和云机器上的 Docker 节点。
  • 要将应用程序部署到集群中,则需要将服务定义提交给管理节点

集群中节点分为

  • 管理节点
  • 工作节点

管理节点

  • 被称为任务的工作单元分派给工作节点
  • 为了维持 Swarm 集群的目标状态,还将承担编排和集群管理的功能
  • 一旦存在多个管理节点时,会选出一个领导来进行任务编排

工作节点

  • 用于接收并执行来自管理节点分发的任务
  • 默认情况下,管理节点也是工作节点,也可以把它配置成只充当管理节点的角色
  • 将负责的任务当前状态通知给管理节点,以便管理节点可以维护每个工作节点的期望状态
服务与任务
  • 在复制服务模型中,Swarm 管理器根据所需状态中设置的比例在节点之间分配特定数量的副本任务

服务

  • 定义了需要在工作节点上执行的任务
  • 它是 Swarm 系统的中心结构,也是用户和 Swarm 交互的主要根源
  • 创建服务时,可指定要使用的容器镜像以及在运行容器中执行的命令

任务

  • 是 Swarm 集群中最小的调度单位
  • 每个任务都包含一个容器和需要在容器中执行的指令
负载均衡

集群管理器

  • 使用负载均衡入口公开对外提供的服务
  • 可以自动为 PublishPort(对外发布的端口)分配服务,也可为服务配置 PublishPort
  • 部署服务时可指定任何未使用的端口为服务端口
  • 如果部署服务时未指定端口,Swarm 管理器会为服务自动分配 30000-32767 范围内的端口

外部组件(如:云负载均衡器)

  • 可访问集群中任何节点的 PublishPort 上的服务
  • 无论该节点当前是否运行服务,集群所有节点都将入口连接到正运行的任务实例

Swarm模式

  • 有一个内部的 DNS 组件,可自动为 Swarm 中每个服务分配一个 DNS 条目
  • 集群管理器使用内部负载均衡器根据服务的 DNS 名称在集群内服务之间分发请求
工作原理

微服务

  • 是一种软件架构风格,用于构建大型应用程序。
  • 它的核心理念是将应用程序拆分成一组小的、独立的服务,每个服务都负责实现特定的业务功能,并通过标准的网络协议(如HTTP/REST、gRPC、消息队列等)进行通信。
  • 每个微服务通常包括自己的业务逻辑、数据存储和管理能力
  • 可能是一个 HTTP 服务器、数据库、或者分布式环境中运行的任何其它可执行的程序
  • 创建服务时可指定使用的容器镜像以及容器中要运行的命令

服务还可定义选项

  • 集群要对外服务的端口
  • 在集群中用于服务之间相连的 Overlay 网络
  • 滚动更新策略
  • 集群总运行的副本数量
服务、任务与容器的具体工作方法

服务、任务与容器

  • 当服务部署到集群时,Swarm管理节点会将服务定义作为服务所需状态。然后将服务调度为一个或多个副本任务。这些任务在集群节点上彼此独立运行。
  • 容器是一个独立的进程。在 Swarm 集群中,每个任务都会调用一个容器。一旦容器运行,调度程序认为该任务处于运行状态。如果容器健康监测失败或者终止,那么任务也终止。

任务与调度

  • 任务是集群内调度的原子单位。当创建或者更新服务来声明所需的服务状态时,协调器通过调度任务来实现所需的状态。
  • 任务是单向的机制,它通过一系列状态单独进行:分配、准备、运行等操作。如果任务失败,协调器将删除任务与容器,然后根据服务指定的所需状态创建一个新的任务来代替它。

待处理的服务

  • 配置服务时,若集群中当前没有可用的节点。在这种情况下,也可以成功配置服务,但所配置服务会处于待处理状态(挂起状态)。
  • 如果在集群中所有节点被暂停或耗尽时,创建了一个服务,服务则被挂起,直到节点可用。实际上,当节点恢复时,第一个可用的节点将会获得所有的任务,这在生产环境中并不是一件好事。

服务可能处于待处理状态的几个示例

  • 配置服务时可以为服务预留特定数量的内存。如果集群中没有节点满足所需的内存量,服务则被挂起,直到有可用的节点运行其任务。如果指定了非常大的内存值(如500G),任务将永久挂起,除非确实有一个满足该有条件的节点
  • 配置服务时可对服务施加约束,并且可能无法再给定时间履行约束,服务则被挂起

副本服务和全局服务

副本服务

  • 指定要运行的相同任务的数量,每个副本都是相同的内容

全局服务

  • 在每个节点上运行一个任务的服务。不需要预先指定任务数量。

案例环境

实验环境表

主机操作系统主机名/IP地址主要软件
服务器CentOS 7.9manager/192.168.10.101Docker 19.03
服务器CentOS 7.9worker01/192.168.10.102Docker 19.03
服务器CentOS 7.9worker02/192.168.10.103Docker 19.03

实验环境网络拓扑图

案例需求

  • 部署 Docker Swarm 集群
  • 要求集群中包含一个管理节点(manager)和两个工作节点(worker01、worker02)

案例实现思路

  • 准备 Docker Swarm 部署环境
  • 部署 Docker Swarm 集群

案例一实施

配置 Docker Swarm 部署环境

  • 部署 Docker Swarm 之前需要先对服务器进行基础环境配置

将镜像通过 Xftp 上传至三个节点服务器

三个主机开启会话同步

进入镜像文件导入镜像

[root@localhost ~]# cd images/
[root@localhost images]# bash imp_docker_img.sh

退出镜像目录并修改三个主机名称

192.168.10.101

[root@localhost ~]# hostnamectl set-hostname manager
[root@localhost ~]# bash

192.168.10.102

[root@localhost ~]# hostnamectl set-hostname worker01
[root@localhost ~]# bash

192.168.10.103

[root@localhost ~]# hostnamectl set-hostname worker02
[root@localhost ~]# bash

修改主机名称注意三个名称不一样

修改所有主机的 hosts 文件

[root@manager ~]# vim /etc/hosts
192.168.10.101 manager
192.168.10.102 worker01
192.168.10.103 worker02

这里取消会话同步

部署 Docker Swarm 集群

在manager主机上创建 Docker Swarm 集群

[root@manager ~]# docker swarm init --advertise-addr 192.168.10.101
Swarm initialized: current node (x3v12rmfw9c0isq1nppaaoogh) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-6d54xvraob3ea6peasvp5pgrtqp2f83vlfm7ag9q8ra6x1jqz3-1r93r88x483n7ofx96qj0cvjk 192.168.10.201:2377

这个命令复制到两个 worker 节点

  • docker swarm join --token SWMTKN-1-6d54xvraob3ea6peasvp5pgrtqp2f83vlfm7ag9q8ra6x1jqz3-1r93r88x483n7ofx96qj0cvjk 192.168.10.201:2377

在所有 worker 节点加入集群

[root@worker01 ~]# docker swarm join --token SWMTKN-1-6d54xvraob3ea6peasvp5pgrtqp2f83vlfm7ag9q8ra6x1jqz3-1r93r88x483n7ofx96qj0cvjk 192.168.10.201:2377
This node joined a swarm as a worker.

[root@worker02 ~]# docker swarm join --token SWMTKN-1-6d54xvraob3ea6peasvp5pgrtqp2f83vlfm7ag9q8ra6x1jqz3-1r93r88x483n7ofx96qj0cvjk 192.168.10.201:2377
This node joined a swarm as a worker.

查看集群信息

[root@manager ~]# docker info

........
 Swarm: active
  NodeID: x3v12rmfw9c0isq1nppaaoogh
  Is Manager: true
  ClusterID: 0mps950k70s2oqphe75jzykqq
  Managers: 1
  Nodes: 3
........

查看 Swarm 集群中 Node 节点的详细状态信息

[root@manager ~]# docker node ls
ID                            HOSTNAME   STATUS AVAILABILITY MANAGER STATUS  ENGINE VERSION
x3v12rmfw9c0isq1nppaaoogh *   manager    Ready     Active         Leader           20.10.1
mripmqlv2rw84xzywaclvqolj     worker01   Ready     Active                          20.10.1
gxxa4apflvapwcygvdgy0mdvh     worker02   Ready     Active                          20.10.1
  • 查看 manager 节点详细信息:docker node inspect manager

  • 查看 worker01 节点详细信息:docker node inspect worker01 

  • 查看 worker02 节点详细信息:docker node inspect worker02

将管理节点的 AVAILABILITY 值修改为 Drain 状态,使其只具备管理功能

[root@manager ~]# docker node update --availability drain manager
manager

再次查看状态

[root@manager ~]# docker node ls
ID                           HOSTNAME   STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
rerfkmyfkbc74a04x22tpfo5j *   manager   Ready    Drain           Leader     19.03.9
irwxgrg6o8l69b6i024rkbury     worker01  Ready    Active                     19.03.9
j7yit1q52486uhonee8jmhwgo     worker02  Ready    Active                     19.03.9

节点的 AVAILABILITY 有三种状态:Active、 Pause、Drain。

  • Active:集群中该节点可以被指派任务。

  • Pause:集群中该节点不可以被指派新的任务,但是其他已经存在的任务保持运行。

  • Drain:集群中该节点不可以被指派新的任务,Swarm Scheduler 停掉已经存在的任务,并将它们调度到可用的节点上

添加标签元数据

  • 支持给每个节点添加标签元数据
  • 根据标签可选择性地调度某个服务部署到期望的一组节点上
[root@manager ~]# docker node update --label-add group=g2 worker01
worker01

指定节点的详细信息

[root@manager ~]# docker node inspect worker01

一组容器为其它进程提供完整的服务

[root@manager ~]# docker service create --name mynginx --constraint 'node.labels.group==g2' hub.atomgit.com/amd64/nginx:1.25.2-perl
......
possibly leading to different nodes running different
overall progress: 1 out of tasks
1/1: running
......
  • constraint 约束

使用国内几家互联网大厂联合推出的可信镜像中心

  • hub.atomgit.com/amd64/nginx:1.25.2-perl

查看 mynginx 容器所在的主机

[root@manager ~]# docker service ps mynginx

节点提权/降权

在 manager 节点将 worker01 worker02 都升级为管理节点

[root@manager ~]# docker node promote worker01 worker02

查看节点信息

[root@manager ~]# docker node promote worker01 worker02

退出 Swarm 集群

[root@manager ~]# docker swarm leave
Error response from daemon: You are attempting to leave the swarm on a node that is participating as a manager. Removing the last manager erases all current state of the swarm. Use `--force` to ignore this message.
  • 如果集群中还存在其它的工作节点,同时希望管理节点退出集群,则需要加上一个强制选项(一般情况下可忽略这一步)

Docker Swarm 服务管理

创建好swarm群集

创建服务

[root@manager ~]# docker service create --name mynginx --constraint 'node.labels.group==g2' hub.atomgit.com/amd64/nginx:1.25.2-perl
......
possibly leading to different nodes running different
overall progress: 1 out of 2 tasks
1/1: running
2/2: running
......
  • 使用 docker service create 命令创建 Docker 服务,从 Docker 镜像 nginx 创建一个名称为 web 的服务,指定服务副本数为 2

用浏览器访问三个地址 

指定查看 web 服务日志

[root@manager ~]# docker service logs -f web
  • 看到提示 Configuration complete; ready for start up后,可以Ctrl+C

查看当前已经部署启动的全部应用服务详细信息

[root@manager ~]# docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
zgxqdeu3dph2        web                 replicated          2/2                 nginx:latest

可以查询指定服务的详细信息

[root@manager ~]#  docker service ps web
ID             NAME           IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
nc0lvzyt6fv8   web.1          nginx:latest        worker01            Running             Running 4 minutes ago                       
rknekib3x3eg   web.2          nginx:latest        manager             Running             Running 4 minutes ago

查看状态

[root@manager ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
305d6fe1e1e4        nginx:latest        "/docker-entrypoint.…"   5 minutes ago       Up 5 minutes        80/tcp              web.2.rknekib3x3egb9atn4qxub8nj

查看服务详细信息

[root@manager ~]# docker service inspect web
  • 以 JSON 格式显示方法 Web 服务的详细信息

以易于阅读方式显示 Web 服务的详细信息

[root@manager ~]# docker service inspect --pretty web

服务的扩容缩容

[root@manager ~]# docker service scale web=3
  • 将前面已经部署的 2 个副本的 Web 服务,扩容到 3 个副本 

通过 docker service ps web 命令查看服务扩容结果

[root@manager ~]# docker service ps web
ID              NAME    IMAGE          NODE      DESIRED STATE  CURRENT STATE  ERROR PORTS
nc0lvzyt6fv8    web.1   nginx:latest   worker01  Running        Running 10 minutes ago
rknekib3x3eg    web.2   nginx:latest   manager   Running        Running 10 minutes ago
oxrqtrsuswcr    web.3   nginx:latest   worker02  Running        Running 13 seconds ago

 缩容

[root@manager ~]# docker service scale web=1
web scaled to 1
overall progress: 1 out of 1 tasks
1/1: running   
verify: Service converged
  • 进行服务缩容操作时只需要设置副本数小于当前应用服务拥有的副本数即可,大于指定缩容副本数的副本会被删除 

再次查看服务状态

[root@manager ~]#  docker service ps web
ID            NAME    IMAGE        NODE      DESIRED STATE  CURRENT STATE       ERROR PORTS
nc0lvzyt6fv8  web.1   nginx:latest worker01  Running        Running 11 minutes ago

删除服务

[root@manager ~]# docker service rm mynginx
mynginx
[root@manager ~]# docker service rm web
web

滚动更新

使用国内几家互联网大厂联合推出的可信镜像中心

[root@manager ~]# docker service create --replicas 3 --name redis --update-delay 10s hub.atomgit.com/amd64/redis:7.0.13
......
overall progress: 3 out of 3 tasks
1/3: running
2/3: running
3/3: running
......

查看服务状态   

[root@manager ~]#  docker service ps redis
ID            NAME     IMAGE         NODE     DESIRED STATE   CURRENT  STATE   ERROR PORTS
9dtcqqyptmbn  redis.1  redis:3.0.6   manager     Running      Running 3 minutes ago
p4agvfmprmgm  redis.2  redis:3.0.6   worker01    Running      Running 3 minutes ago
vqo6493g9cws  redis.3  redis:3.0.6   worker02    Running      Running 3 minutes ago

更新已经部署服务所在容器中使用的镜像版本

[root@manager ~]# docker service update --image hub.atomgit.com/library/redis:7.0-alpine
......
possibly leading to different nodes running different
versions of the image.

redis
overall progress: 1 out of 3 tasks
1/3: running
2/3: running
3/3: running
......

添加自定义 Overlay 网络

[root@manager ~]# docker network create --driver overlay my-network
  • 创建服务时,通过--network选项指定使用的网络为已存在的 Overlay 网络

创建服务并指定网络

[root@manager ~]# docker service create --replicas 3 --network my-network --name myweb hub.atomgit.com/amd64/nginx:1.25.2-perl
......
possibly leading to different nodes running differentversions of the image
vahojjw5ybv9gqatsp1bine88overall progress: 3 out of 3 tasks
1/3: running
2/3: running
3/3: running
......
  • 如果 Swarm 集群中其他节点上的 Docker 容器也使用 my-network 网络,那么处于该 Overlay 网络中的所有容器之间都可以进行通信

数据卷创建与应用

创建数据卷

[root@manager ~]# docker volume create product-kgc
product-kgc

将 nginx 容器连接到数据卷

[root@manager ~]# docker service create --mount type=volume,src=product-kgc,dst=/usr/share/nginx/html --replicas 1 --name kgc-web-01 hub.atomgit.com/amd64/nginx:1.25.2-perl
......
possibly leading to different nodes running differentversions of the image.
s50loepkzzmdelwi2pipilne3
overall progress: 2 out of 2 tasks
1/2: running2/2: running
......

查看对应的服务

[root@manager ~]# docker service ps kgc-web-01
ID            NAME          IMAGE NODE    DESIRED STATE      CURRENT STATE     ERROR PORTS
58g31r3ppwid  kgc-web-01.1  nginx:latest  worker01 Running   Running 24        seconds ago
  •   要确定好容器是在哪个节点运行的,可以看出,此案例中实在work01中运行的

查看数据卷

[root@manager ~]# docker volume inspect product-kgc
{
    {
        "CreatedAt": "2021-01-24T09:19:33+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/product-kgc/_data",
        "Name": "product-kgc",
        "Options": {},
        "Scope": "local"
    }
]

到 work01 中查看数据是否进行同步

[root@worker01 ~]# cd /var/lib/docker/volumes/product-kgc/_data/

创建两个测试文件

[root@worker01 _data]# mkdir test01 test02

查看服务状态 

[root@worker01 _data]# docker ps
CONTAINER ID  IMAGE          COMMAND     CREATED      STATUS      PORTS        NAMES
8875962fb67b  nginx:latest  "/docker-entrypoint.…"  16 minutes ago Up 16 minutes 80/tcp kgc-web-01.1.58g31r3ppwidwi7x4m8vdy14y
41fdf50c16c2  nginx:latest  "/docker-entrypoint.…"  17 minutes ago Up 17 minutes 80/tcp myweb.1.m89ipfy43w38n5f0qtckq55gb
4aa3abe80967  redis:3.0.7   "docker-entrypoint.s…"  18 minutes ago Up 18 minutes 6379/tcp redis.2.mczchtpy4uy7i52tyycwjd9uk

登录进去

[root@worker01 _data]# docker exec -it 8875962fb67b bash
root@8875962fb67b:/# ls /usr/share/nginx/html/
50x.html  index.html  test01  test02
使用 bind 类型挂载数据卷

创建测试目录

[root@manager ~]# mkdir -p /var/vhost/www/aa
[root@worker01 ~]# mkdir -p /var/vhost/www/aa
[root@worker02 ~]# mkdir -p /var/vhost/www/aa

在 manager 节点安装nfs-utils

[root@manager ~]# yum -y install nfs-utils

设置 nfs 共享

[root@manager ~]# vim /etc/exports
//添加配置
/var/vhost/www/aa *(rw,sync,no_root_squash)

启动 nfs 服务

[root@manager ~]# systemctl start nfs
[root@manager ~]# systemctl start rpcbind

其它两个 worker 节点也安装 nfs

yum -y install nfs-utils

在其他两个 work 节点挂载

[root@manager ~]# mount 192.168.10.101:/var/vhost/www/aa /var/vhost/www/aa/

创建 2 个 kgc-web-02 服务

[root@manager ~]# docker service create --replicas 2 --mount type=bind,src=/var/vhost/www/aa,dst=/usr/share/nginx/html/ --name kgc-web-02 hub.atomgit.com/amd64/nginx:1.25.2-perl

创建一个测试目录

[root@worker01 _data]# touch /var/vhost/www/aa/mytest

验证数据是否同步

[root@worker01 _data]# docker service ps kgc-web-02
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
toejwbvg8nau        kgc-web-02.1        nginx:latest        manager             Running             Running 2 minutes ago                       
kv04aj4vt84g        kgc-web-02.2        nginx:latest        worker02            Running             Running 2 minutes ago

查看服务状态 

[root@worker01 _data]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
d292452b1f39        nginx:latest        "/docker-entrypoint.…"   57 seconds ago      Up 56 seconds               80/tcp              kgc-web-02.1.toejwbvg8nau452rvexc0i1c9
6360a54d2bd1        nginx:latest        "/docker-entrypoint.…"   22 minutes ago      Up 22 minutes               80/tcp              myweb.3.51xngm6q6zj9jo4vllohbptqn
930b56c8671c        redis:3.0.7         "docker-entrypoint.s…"   23 minutes ago      Up 23 minutes               6379/tcp            redis.1.o2regcre7k626suqytpmqpidi
ada092f9959f        redis:3.0.6         "/entrypoint.sh redi…"   27 minutes ago      Exited (0) 23 minutes ago                       redis.1.9dtcqqyptmbnybz1ub3wfzuzj

登录进去查看结果

[root@worker01 _data]# docker exec -it d292452b1f39 bash
root@d292452b1f39:/# ls /usr/share/nginx/html/
mytest

小阿轩yx-Docker Swarm 管理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2050497.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基本数据统计分析上|集中位置统计量|分散程度统计量|分布形状统计量|常见概率分布

数据统计分析 现实生活中的许多数据都是随机产生的,如考试分数,月降雨量,灯泡寿命等。从统计角度来看,这些数据其实都是符合某种分布的,这种分布就是统计规律性 在数学建模过程中经常与数据打交道,需要进行…

【鸟哥的Linux私房菜(七)之文件IO】

文章目录 C语言文件IOC语言文件接口汇总什么是当前路径?默认打开的三个流 系统文件I/Oopenopen的第一个参数open的第二个参数open的第三个参数open的返回值 closewriteread 文件描述符fd文件描述符的分配规则重定向重定向的原理dup2添加重定向功能到minishell FILEF…

微乐校园pf

TOC springboot451微乐校园pf 绪论 1.1 研究背景 当前社会各行业领域竞争压力非常大,随着当前时代的信息化,科学化发展,让社会各行业领域都争相使用新的信息技术,对行业内的各种相关数据进行科学化,规范化管理。这…

vue3中引入插件报ts报错Could not find a declaration file for module

引入第三方组件时,下载了组件还是报ts错误Could not find a declaration file for module 解决办法 1. 下载这个插件的ts库(有的没有ts库就用下面这种方式) 2. 在src下创建一个shims-vue.d.ts文件(简单直接,我用的这种…

DNS域名解析服务理论详解(域名结构、递归查询和迭代查询、CDN)

文章目录 DNS域名解析服务1.DNS系统的概念2.DNS系统的主要作用3.DNS的分布式数据结构和域名的结构4.DNS服务器类型4.1三种类型4.2分布式数据库4.3名词解释 5.CDN技术5.1CDN的基本原理5.2CDN的主要功能 6.DNS查询类型及原理6.1查询方式6.2查询原理过程6.3本地主机的DNS映射文件 …

基于Hadoop的物品租赁系统的设计与实现 9349a--论文

TOC springboot344基于Hadoop的物品租赁系统的设计与实现 9349a--论文 绪 论 1.1开发背景 随着网络的飞速发展,网络技术的应用越来越广泛,而信息技术的飞速发展,计算机管理系统的优势也逐渐体现出来,大量的计算机电子信息已经…

Python | 数据处理中常用的数据分布介绍

数据分布是指数据在统计图中的形状和特征,即数据取值的统计规律。在统计学中,数据分布是描述数据集中数值分布情况和规律的重要工具。通过数据分布,可以了解数据的集中程度、分散程度、偏态和峰态等信息,进而对数据进行合理的分析…

95后医疗行业女性转型记:如何成功踏入人工智能项目管理领域

分享目录 一、自我介绍,给大家分享一下拿到offer的心情吧 二、在整个求职转型陪跑营里,你收获最大的三个点是什么? 三、求职转行过程中,你遇到了哪些困难?七芊老师和强哥是怎么帮助你的?你是怎么走过来的…

Bellman_ford算法

使用Dijikstra算法求最短路问题,要求图中不能存在负长度的边,也就是负权边 为什么Dijikstra算法不能用来求含有负权边的图中的最短路问题? Bellman_ford算法 mention(1): 没有挑选路径长度距离编号 1 结…

[Datawhale AI夏令营 2024 第四期] 从零入门大模型微调之旅的总结

0. 引言: 在人工智能飞速发展的今天,掌握大模型微调技能对于从事 AI 研究和开发的专业人士来说至关重要。因此,Datawhale AI夏令营 2024 第四期] 从零入门大模型微调之旅;顺便参加了星火大模型驱动阅读理解题库构建挑战赛。 1. …

XSS--DOM破坏案例与靶场

靶场连接https://xss.pwnfunction.com/challenges/ 目录 Ma SPaghet! Jeff Ugandan Knuckles Ricardo Milos Ah Thats Hawt Ligma Mafia Ok,Boomer Ma SPaghet! <!-- Challenge --> <h2 id"spaghet"></h2> <script>spaghet.innerHT…

【嵌入式开发 Linux 常用命令系列 4.5 -- 去除 git diff 时出现的 ^M】

请阅读【嵌入式及芯片开发学必备专栏】 文章目录 去除 git diff 时出现的 ^Mgit config --global core.whitespace cr-at-eol选项解释 为什么使用 cr-at-eol如何配置使用示例纠正行尾回车符Sumamry 去除 git diff 时出现的 ^M git config --global core.whitespace cr-at-eol …

day23 Java基础——数组详解

day23 Java基础——数组(array) 文章目录 day23 Java基础——数组(array)1. 数组的概述2. 数组的声明和创建2.1 声明数组2.2 创建数组2.3 内存分析2.4 数组的三种初始化静态初始化动态初始化数组的默认初始化 3. 数组的使用3.1 访问数组元素3.2 数组的遍历3.3 数组的复制3.4 数…

微服务通过nacos实现动态路由

♥️作者&#xff1a;小宋1021 &#x1f935;‍♂️个人主页&#xff1a;小宋1021主页 ♥️坚持分析平时学习到的项目以及学习到的软件开发知识&#xff0c;和大家一起努力呀&#xff01;&#xff01;&#xff01; &#x1f388;&#x1f388;加油&#xff01; 加油&#xff01…

08结构型设计模式——适配器模式

一、适配器模式简介 适配器模式&#xff08;Adapter Pattern&#xff09;是结构型设计模式之一&#xff0c;用于将一个类的接口转换成客户希望的另一个接口。这个模式使得原本接口不兼容的类可以在一起工作。适配器模式的核心目的是实现接口兼容性&#xff0c;使得系统能够使用…

C/C++软件逆向:IDA基本使用

这篇文章主要来说一下IDA的基本使用&#xff0c;那么在此之前先来准备一个简单的程序&#xff0c;作为IDA使用的实例。VS 创建一个C项目&#xff0c;并设置项目属性&#xff1a;设置运行库为MTd&#xff08;默认是MDd&#xff09; 运行库选项区别&#xff1a; 在Visual Studio…

Git使用速通

目录 一、Git相关配置系统配置文件存放处用户配置文件所在地用户名称和e-mail地址 二、初始化仓库git init——初始化仓库git status——查看仓库的状态git add——向暂存区中添加文件git commit——保存仓库的历史记录 三、版本回退与文件修改git log——查看提交日志git refl…

基于Java的线上售楼系统的设计与实现(论文+源码)_kaic

摘 要 现代化的线上售楼管理正在逐渐成为现代社会的重要需求&#xff0c;而目前的线上售楼由于存在管理不规范等缺点&#xff0c;严重制约了楼房和房地产公司的发展&#xff0c;建设一个更加规范化的线上售楼系统是十分迫切需要的。为此&#xff0c;使用Java语言&#xff0c;S…

leetCode - - - 双指针

目录 1.寻找重复数&#xff08;LeetCode 287&#xff09; 解法一&#xff1a;二分查找 解法二&#xff1a;快慢指针 2.验证回文串&#xff08;LeetCode 125&#xff09; 3.三数之和&#xff08;LeetCode 15&#xff09; 4.四数之和&#xff08;LeetCode 18&#xff09; …

Unity 麦扣 x 勇士传说 全解析 之 怪物基类与野猪(附各模块知识的链接,零基础也包学会的牢弟)(案例难度:★★☆☆☆)

通过一阵子的学习&#xff0c;我是这么认为的&#xff0c;因为该教程是难度两星的教程 &#xff0c;也就是适合学了一阵子基础组件以后的学习者 &#xff08;什么都不会的学习者要是学这套课程会困难重重&#xff0c;如果你什么都不会那么需要学习一星教程&#xff09; 所以该…