【docker】docker swarm常用命令以及电商平台构建案例

news/2024/12/21 10:41:28/

1. 初始化Swarm集群

用于初始化一个Swarm集群,并将当前节点设置为Manager节点。
docker swarm init
用法:

docker swarm init --advertise-addr <Manager节点IP>

示例:

docker swarm init --advertise-addr 192.168.1.100

这会将当前节点初始化为Swarm集群的管理节点,并向其他节点广播IP 192.168.1.100。

2. 将Worker节点加入Swarm集群

用于将一个Worker节点加入到Swarm集群。
docker swarm join
用法:

docker swarm join --token <token> <Manager节点IP>:2377

示例:

docker swarm join --token SWMTKN-1-3t23f5f-vvjqz9sdgxlb12 192.168.1.100:2377

3. 查看节点状态

查看当前Swarm集群中所有节点的状态。
docker node ls
用法:

docker node ls

输出示例:

ID                            HOSTNAME            STATUS  AVAILABILITY  MANAGER STATUS
9i16i5d2n7tpkmjre14b0trjp *   manager-node-1     Ready   Active        Leader
x30ox0l8y9tvpbrti6xvw4ffz     worker-node-1      Ready   Active
c81e88ph5soszfn8fg6nlax6l     worker-node-2      Ready   Active

4. 更新节点的状态

用来更新Swarm集群中节点的可用性状态。
docker node update
用法:

docker node update --availability <availability> <node-name>

示例:

docker node update --availability drain worker-node-1

worker-node-1节点设置为Drain状态,所有任务将被迁移到其他节点。

5. 创建Swarm服务

用于创建一个新的Swarm服务。
docker service create
用法:

docker service create --name <service-name> --replicas <replicas> -p <port> <image>

示例:

docker service create --name web-service --replicas 3 -p 8080:80 nginx

创建一个名为web-service的服务,使用nginx镜像,并将其副本数设置为3,映射容器的80端口到主机的8080端口。

6. 查看服务

docker service ls
列出当前Swarm集群中所有的服务。
用法:

docker service ls

输出示例:

ID             NAME          MODE         REPLICAS  IMAGE
8yht45d        web-service   replicated   3/3       nginx:latest

7. 查看服务的详细信息

用于查看特定服务的任务(容器)状态。
docker service ps
用法:

docker service ps <service-name>

示例:

docker service ps web-service

输出示例:

ID             NAME            IMAGE           NODE          DESIRED STATE  CURRENT STATE          ERROR  PORTS
8b1d8fda9bfc   web-service.1   nginx:latest    worker-node-1 Running        Running 2 minutes ago         
b3c12b0cbb97   web-service.2   nginx:latest    worker-node-2 Running        Running 2 minutes ago         

8. 更新服务

用于更新已有服务的配置,如镜像、端口、副本数等。
docker service update
用法:

docker service update --image <image> --replicas <replicas> <service-name>

示例:

docker service update --image nginx:latest --replicas 5 web-service

web-service服务的镜像更新为nginx:latest,并将副本数扩展为5。

9. 扩展或缩减服务副本数

用于动态调整服务的副本数。
docker service scale
用法:

docker service scale <service-name>=<replicas>

示例:

docker service scale web-service=10

web-service的副本数扩展到10。

10. 删除服务

用于删除Swarm中的服务。
docker service rm
用法:

docker service rm <service-name>

示例:

docker service rm web-service

删除名为web-service的服务。

11. 查看Swarm集群的状态

docker info
该命令提供有关Docker引擎的详细信息,包括Swarm集群的状态。
用法:

docker info

输出示例:

Swarm: activeNodeID: 7y8vkmmdx3tqIs Manager: trueClusterID: z9gkm36vzd6zManagers: 1Nodes: 2Orchestration:Task History Retention Limit: 5

12. 监控Swarm的日志

用于查看特定服务的日志。
docker service logs
用法:

docker service logs <service-name>

示例:

docker service logs web-service

显示web-service服务的容器日志。


企业级案例:E-Shop电商平台的Docker Swarm部署

假设有一家电商平台E-Shop,平台使用Docker Swarm进行服务容器编排。
该平台使用微服务架构,主要包括Web前端、订单服务、支付服务、用户管理服务等。
该案例将展示如何在Docker Swarm集群中管理这些服务。

步骤 1:初始化Swarm集群

在管理节点上初始化Swarm集群,并将当前节点作为管理节点。

docker swarm init --advertise-addr 192.168.1.100

在工作节点上加入Swarm集群。

docker swarm join --token <worker-token> 192.168.1.100:2377
dockercomposeyml_186">步骤 2:定义docker-compose.yml文件来管理服务

创建docker-compose.yml文件,定义服务及其属性(镜像、端口、副本数等)。

version: '3.8'services:web:image: nginx:latestdeploy:replicas: 3resources:limits:memory: 500Mrestart_policy:condition: on-failureports:- "8080:80"networks:- e-shop-netorder-service:image: order-service:latestdeploy:replicas: 5resources:limits:memory: 1Grestart_policy:condition: on-failureenvironment:- DB_HOST=dbnetworks:- e-shop-netpayment-service:image: payment-service:latestdeploy:replicas: 2resources:limits:memory: 1Grestart_policy:condition: on-failureenvironment:- DB_HOST=dbnetworks:- e-shop-netuser-service:image: user-service:latestdeploy:replicas: 3resources:limits:memory: 500Mrestart_policy:condition: on-failureenvironment:- DB_HOST=dbnetworks:- e-shop-netdb:image: mysql:5.7environment:MYSQL_ROOT_PASSWORD: rootpassworddeploy:replicas: 1networks:- e-shop-netnetworks:e-shop-net:driver: overlay
步骤 3:部署服务到Swarm集群

使用docker stack deploy命令将docker-compose.yml中的配置部署到Swarm集群。

docker stack deploy -c docker-compose.yml e-shop
步骤 4:扩展服务副本数

假设需求增加,需要扩展order-service的副本数。修改docker-compose.yml文件并重新部署。

order-service:image: order-service:latestdeploy:replicas: 10resources:limits:memory: 1Grestart_policy:condition: on-failureenvironment:- DB_HOST=dbnetworks:- e-shop-net

重新部署服务以扩展副本数。

docker stack deploy -c docker-compose.yml e-shop
步骤 5:添加健康检查

通过在docker-compose.yml中为order-service添加健康检查,确保容器健康状态。

order-service:image: order-service:latestdeploy:replicas: 10resources:limits:memory: 1Grestart_policy:condition: on-failurehealthcheck:test: ["CMD", "curl", "-f", "http://localhost:8081/health"]interval: 30sretries: 3environment:- DB_HOST=dbnetworks:- e-shop-net
步骤 6:服务滚动更新

在业务需求发生变化时,使用滚动更新来更新order-service

docker service update --image order-service:v2 e-shop_order-service
总结

在E-Shop案例中,我们通过Docker Swarm实现了一个高可用的微服务架构,具有以下特点:

  1. 集群管理:通过初始化Swarm集群来进行容器编排和管理。
  2. 动态扩展:根据需求调整服务副本数,确保系统高可用。
  3. 健康检查:使用健康检查保证容器状态良好,自动修复故障。
  4. 滚动更新:通过滚动更新确保系统在升级过程中无停机。
  5. 高可用:通过在Swarm集群中管理多个节点,保证服务的高可用性。
    这个案例展示了Docker Swarm如何在实际生产环境中支持高并发、大规模的微服务应用。

http://www.ppmy.cn/news/1556907.html

相关文章

C++ 发展历程全解析

引言 C 是一种静态类型的、编译式的、通用的、大小写敏感的、不仅支持面向过程的程序设计&#xff0c;还支持面向对象的程序设计&#xff08;OOP&#xff09;和泛型编程的程序设计语言。它由丹麦计算机科学家 Bjarne Stroustrup 于1979年在贝尔实验室开始设计开发。C 的发展经…

Pytorch | 利用BIM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用BIM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集BIM介绍基本原理算法流程特点应用场景 BIM代码实现BIM算法实现攻击效果 代码汇总bim.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器&#xff1a; Pytorch | 从零构建AlexNet对CIFAR10进行分…

HTTP接口报错详解与解决 200,500,403,408,404

前言&#xff1a; 仅做学习记录&#xff0c;侵删 背景 当后端编写接口时&#xff0c;经常需要对接口使用ApiFox或者PostMan进行测试&#xff0c;此时就会出现各种各样的报错&#xff0c;一般都会包括报错编码&#xff1a;200,400,401等。这个状态码一般是服务器所返回的包含…

c++ 找第一个只出现一次的字符

【题目描述】 给定一个只包含小写字母的字符串&#xff0c;请你找到第一个仅出现一次的字符。如果没有&#xff0c;输出no。 【输入】 一个字符串&#xff0c;长度小于100000。 【输出】 输出第一个仅出现一次的字符&#xff0c;若没有则输出no。 【输入样例】 abcabd【输出样…

小程序中使用 Vue2 + Vuex 实现数据存储与获取

在小程序开发中&#xff0c;数据的存储与获取是一个非常重要的环节。本文将介绍如何在小程序中使用 Vue2 和 Vuex 实现数据的存储与获取。我们将通过一个具体的例子来展示如何在 Vuex 中管理用户信息和机构信息&#xff0c;并在组件中使用这些数据。 项目结构 首先&#xff0…

scala中正则表达式的使用

正则表达式&#xff1a; 基本概念 在 Scala 中&#xff0c;正则表达式是用于处理文本模式匹配的强大工具。它通过java.util.regex.Pattern和java.util.regex.Matcher这两个 Java 类来实现&#xff08;因为 Scala 运行在 Java 虚拟机上&#xff0c;可以无缝使用 Java 类库&…

STM32-- keil -常用功能

1.修改整个工程名称&#xff08;keil-c51编辑器&#xff09; 要同时修改这三个文件&#xff0c;不然要重新设置。 uvoptx文件 uvoptx文件记录了工程的配置选项&#xff0c;如下载器的类型、变量跟踪配置、断点位置以及当前已打开的文件等等&#xff1b; uvguix文件 uvguix文…

前端TypeScript学习day01-TS介绍与TS部分常用类型

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 TypeScript 介绍 TypeScript 是什么 TypeScript 为什么要为 JS 添加类型支持&#xff1f;? TypeScript …