Docker笔记:Docker Swarm 结合 Docker Compose 来部署集群

Docker Swarm集群实践——部署篇 Swarm 简介 Swarm是Docker公司在2014年12月初新发布的容器管理工具。和Swarm一起发布的Docker管理工具还有Machine以及Compose。Swarm是一套较为简单的工具,用以管理Docker集群,使得Docker集群暴露给用户时相当于一个虚拟的整体。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client均可以直接 阅读详情

docker swarm 结合 docker-compose.yml 部署集群

1 )准备 docker-compose.yml的文件, 示例 demo 如下

version: "3"
services:
  mysql_c:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    restart: always
    ports:
      - 3306:3306
    volumes:
      - /root/mysql/conf.d:/etc/mysql/conf.d
      - /root/mysql/data:/var/lib/mysql
  goweb1:
    image: gowebimg
    restart: always
    deploy:
      replicas: 6 # 副本数量
      resources: # 资源
        limits: # 配置cpu
          cpus: "0.3" # 设置该容器最多只能使用 30% 的 CPU
          memory: 500M # 设置该容器最多只能使用 500M内存
      restart_policy: # 定义容器重启策略, 用于代替 restart 参数
        condition: on-failure # 只有当容器内部应用程序出现问题才会重启
    depends_on:
      - mysql_c
  nginx:
    image: nginx
    restart: always
    ports:
      - 80:80
    depends_on:
      - goweb1
    volumes:
      - /root/nginx/conf.d/:/etc/nginx/conf.d
    deploy:
      replicas: 6 #副本数量
      resources: #资源
        limits: #配置cpu
          cpus: "0.3" # 设置该容器最多只能使用 30% 的 CPU
          memory: 500M # 设置该容器最多只能使用 500M内存
      restart_policy: # 定义容器重启策略, 用于代替 restart 参数
        condition: on-failure #只有当容器内部应用程序出现问题才会重启
  • 基于 docker-compose可以在一台服务器上创建多个容器
  • 想在多台服务器上一次创建多个容器, 需要结合 Swarm
    • $ docker stack deploy --compose-file docker-compose.yml swarmName
      • swarmName是我们的swarm对应的名称,可以自行随意配置, 比如 goWebSwarm
  • 以上配置的问题是 mysql 没有进行集群
    • mysql 需要单独搭建集群,这里涉及到主从数据库
    • 为了方便起见,直接配置到了 yml 文件里
    • 这里mysql的副本数量不能配置多个
    • 如果多个,就会运行在多台服务器上,会出现数据异常和不一致的问题

2 )搭建集群

  • $ docker swarm init --advertise-addr 192.168.1.10 初始化集群并创建管理节点(当前指定的ip为管理节点)
    • 填入自己主机的ip
  • $ docker swarm join --token SWMTKN-1-52tr219htvsg1volky2tej7pj8bjs2j78q4b6wc9fnt72kkchd-29ohn4mgz191f6oznldvjiw47 192.168.1.10:2377
    • 其他主机加入集群
  • 根据 yml 文件,这里的集群是 nginx 和 goweb的集群,它们都有6个副本,mysql 服务只有一个副本

3 )部署和验证

  • $ docker stack deploy --compose-file docker-compose.yml goWebSwarm 开始部署服务
    • 调用这个命令的时候,首先创建了网络
    • 接着创建3个服务
    • 这3个服务使用了同一个网络,默认这三个服务可以直接连通
  • $ docker service ls 可查看当前运行起来的服务
  • $ docker service ps goWebSwarm 查看当前某个服务
  • 通过 docker-compose 部署,可见生成了3个服务,这三个服务,使用了同一个网络
  • 这里同样存在之前的,mysql服务启动了,接着goWeb服务也启动,但是mysql服务并没有完全可用的状态
    • 可以用之前的脚本解决
    • 可以重启 goWeb项目 (或扩容,缩容来重启)
    • 可以先单独部署 mysql的集群,之后再部署 goWeb 和 Nginx 服务
      • 这种就不属于这里的集群了,mysql集群作为一项单独的集群
      • goWeb应用的配置文件也要对应同步修改

4 )配置部署额外的一台Nginx服务器(非集群内)

  • 额外的NG服务器,用于做路由和转发到集群内的nginx服务器
  • 在集群内的各个主机磁盘上都有 /root/nginx/conf.d/ 目录中都有一个 default.conf 文件
    upstream backend {
      ip_hash;
      server goweb1:8080; # 这里是 goweb1 容器服务的host别名
    }
    
    server {
            listen       80;
            server_name  localhost; # 你的域名地址
            location / {
                  # 设置主机头和客户端真实地址,以便服务器获取客户端真实IP         
                  # 禁用缓存
                  proxy_buffering off; 
                  # 反向代理的地址
                  proxy_pass http://backend;     
            }
            #error_page  404              /404.html;
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root  html;
            }
    }
    
    • 当访问这个时,nginx将 80 转发到 8080
  • 现在,我们要配置nginx的主机,也就是转发到集群内,进行负载均衡的配置
    upstream backend {
      ip_hash;
      server 192.168.1.10 weight=1; # 集群内的服务 ip 这里有一台 nginx服务器
      server 192.168.1.11 weight=1;
      server 192.168.1.12 weight=1;
      server 192.168.1.13 weight=1;
    }
    
    server {
            listen       80;
            server_name  goweb.xxxx.com; # 你的域名地址 这里本机可以配置 host, 如果在服务器配置 域名解析
            add_header backendCode $upstream_status;
            add_header BackendIP "$upstream_addr;" always;
            location / {
                  # 设置主机头和客户端真实地址,以便服务器获取客户端真实 IP
                  proxy_set_header Host $host;
                  proxy_set_header X-Real-IP $remote_addr;
                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                  # nginx服务器与被代理服务连接超时时间,代理超时,请求一台超过1s就会转发到其他ip
                  proxy_connect_timeout 1s;
                  # 禁用缓存
                  proxy_buffering off;
                  # 反向代理的地址
                  proxy_pass http://backend;
            }
            #error_page  404              /404.html;
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root  html;
            }
    }
    
  • 上面用于查看nginx服务器转发节点的配置
    • proxy_set_header X-Real-IP $remote_addr;
    • proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    • 加上这个,在浏览器中可以看到转发的服务器,在响应表头,会有一个 BackendIP 的字段
  • 启动 nginx 主机
    • $ docker run -itd --name nginxweb -p 80:80 -v /root/nginx/conf.d:/etc/nginx/conf.d nginx

5 )整体架构如下

  • 第一层 )nginx 服务器接收到请求后转发到集群中的各台主机上

    • 这里是最外面的一层 nginx 作为负载均衡
    • 这台nginx服务器是一台高性能服务器,只负责转发,没有其他处理任务
  • 第二层 )集群里面有各类服务

    • nginx goWeb
      • goWeb 连接到 mysql 或 mysql集群服务
    • nginx goWeb
      • 同上
    • nginx goWeb
      • 同上
    • …
    • 这个集群内部的nginx服务会动态负载均衡到各个goWeb服务
  • 第三层 )mysql 或 mysql集群

    • 目前我们的mysql 只有一台服务,并且配置在compose文件里
  • 以上三个层,是我们服务端一般的设计方案,当然上面没用到 mysql 集群

  • 以上架构可支持 100W 的访问量 (使用mysql集群)

  • 如果需要负载更多, 可把这套架构复制到多个城市地区

    • 一般情况下,域名解析只能配置到一台服务器
    • 当然,有个动态域名解析,可以支持多台
    • 这样就可以根据请求判断转发到那些服务器

关于 Docker Swarm 的 Raft 一致性算法

  • Raft:一致性算法,在保证大多数管理节点存活的情况下,集群才能使用
  • 所以就要求如果集群的话,manager节点必须 >=3 台
    • manager: 管理节点,用于管理工作节点
  • 如果是两个台,其中一台宕机,剩余的一台也将不可用,以致整个集群不可用
  • 为了利用 swarm 模式的容错特性,Docker 建议您根据组织的高可用性要求实现奇数个节点
  • 当您有多个管理器时,您可以从管理器节点的故障中恢复而无需停机
    • 一个3管理器群最多可以容忍1名管理器的损失
    • 一个5管理器群最多可以同时丢失2个管理器节点
    • 一个N管理器集群最多可以容忍丢失 (N - 1) / 2 管理器
    • Docker 建议一个Swarm集群最多使用7个管理器节点
使用 Docker Swarm(集群) 和Docker Stack(堆栈)部署容器化应用 Docker Stack(堆栈) 是在 Swarm 上管理服务堆栈的工具。而在上面文章 中介绍的 Docker Swarm 只能实现对单个服务的简单部署,于是就引出了Docker Stack。上面我们介绍到docker-compose:可以在一台机器上使用docker-compose.yml轻松部署多个服务(如nginx,php,mysql)docker swarm:将一个服务部署至多台机器(如nginx,部署到机器1,机器2,机器3) 阅读详情

相关推荐

Docker技术swarm+compose部署服务

一、实验环境 选择三台主机运行swarm,依次为: Node1:manager   192.168.111.10 Node2:manager   192.168.111.11 Node3       192.168.111.12 1、基本环境配置   3台保持一致时间 ntp   3台关闭selinux,开启路由转发 3台主机根据上面环境修改主机名和IP地址 2、

LYK_lalalala的博客 3667

Docker Swarm

1、什么是docker swarm ? Swarm是Docker公司推出的用来管理docker集群的平台,几乎全部用GO语言来完成的开发的,代码开源在https://github.com/docker/swarm 简单理解就是多台服务器搭建一个docker集群,每个服务器就是集群中的一个节点。 参考:Docker三剑客之Docker Swarm - 一本正经的搞事情 - 博客园 2、docker swarm的几个关键概念 swarm :集群管理工具 node :节点,一个节点就是docker

Olivier0611的博客 2万+

Docker:Swarm + Stack 一站式部署容器集群

Docker:Swarm + Stack 一站式部署容器集群概述Docker将应用沙盒化,将程序的运行与主机的环境隔离开,本身是十分适合进行应用程序的堆砌、组合、互动的。新推出的(还算新吧)swarm功能将不同的docker容器集成为管理节点-工作节点的集群模式,建立联系的同时也可以分配计算资源,实现以docker容器为单元的并行任务。既然是集群式的协作,那一个个部署节点就显得太过笨拙了。所幸,do

Lunex的博客 1万+

【Docker】Swarm学习

主要介绍了docker swarm的用法

al6nlee的博客 1万+

docker——部署Docker swarm集群

一、Docker swarm简介 Docker swarm与docker-compose一样,都是docker官方推出的docker容器的编排工具。但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。 Docker swarm:其作用就是把若干个Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docke

看清所以看轻 1406

docker三剑客之 Docker Machine Docker Compose Docker Swarm

Docker 三剑客一、docker machine1.Docker Machine 简介2.Docker Machine实践二、docker-compose1.docker-compose简介2.docker-compose实践三、docker集群1.swarm简介2.Docker Swarm实践 Docker三大编排工具: Docker Compose:是用来组装多容器应用的工具,可以在 Swarm集群中部署分布式应用。 Docker Machine:是支持多平台安装Docker的工具,使用 Docke

weixin_44717560的博客 1547

Docker Swarm简介

一、什么是Docker Swarm Swarm是Docker公司推出的用来管理docker集群的平台,几乎全部用GO语言来完成的开发的,代码开源在https://github.com/docker/swarm,它是将一群Docker宿主机变成一个单一的虚拟主机,Swarm使用标准的Docker API接口作为其前端的访问入口,换言之,各种形式的DockerClient(compose,docker-py等)均可以直接与Swarm通信,甚至Docker本身都可以很容易的与Swarm集成,这大大方便了用户将.

GSON的博客 2万+

十六、Docker Swarm 借助docker-compose.yml部署集群

搭建详细过程,看如下链接,铁子:十五、Docker Swarm集群搭建及服务案例-优快云博客。

阿澈不吃蒜的博客 391

Docker-Swarm集群管理

Docker Swarm是Docker的集群管理工具,它提供了标准的Docker API,所有任何已经与Docker守护程序通信的工具都可以使用Swarm轻松地扩展到多个主机。支持的工具包括Dokku、Docker Compose、Docker Machine和Jenkins等。compose、machine 和 swarm 是docker 原生提供的三大编排工具,简称docker三剑客。其官网地址复制代码Docker Swarm 和 Docker Compose。

BASK2311的博客 5219

EEGLAB数据预处理基本流程GUI实操指南

按钮,会出现如上图所示的长条形对话框,方框里面是所有电极的名称,这时将需要的剔除的电极选择上,如上图,我选择了 VEOG这个电极(该电极表示是垂直眼电),然后点“OK”,在弹出的对话框中自行确定是否需要修改命名。坏导是指在数据采集时,由于各种原因(如,电极本身问题或阻抗不好等)导致数据记录有问题,但是在后期又特别想要该通道的数据,那么就可以利用插值的方法进行——利用该导联周边的几个电极点的均值作为该导的数据。上图的图是通过IClabel的工具箱进行自动判断的,可以帮助自动识别出哪些是Eye的成分。

fdgdf5535的博客 6397

Tushare Day2——了解stock_basic数据并根据行业和地区进行统计

了解stock_basic数据 1  stock_basic基础信息2  导入包和stock_basic数据、查看基本信息3  根据行业列进行统计3.1  1.先把不同行业列举出来,看一下一共有多少种行业3.2  2.统计每个行业分别有多少家公司3.3  3.把行业从array的二维数组形式变成list形式3.4  4.把行业从list形式转换成文本形式3.5&nbsp

绒绒的Routine 2798

Docker - Compose与Swarm的结合使用,编排集群

Docker Compose 与 Swarm 的结合,不是技术怀旧,而是一种务实的云原生演进哲学✅开发阶段快速验证多服务交互,零配置起步;✅测试阶段复现生产网络拓扑;✅生产阶段:同一份直接上线,配置即代码(GitOps 基石);✅未来扩展:当业务增长突破 Swarm 边界时,可将作为输入,用工具(如 Kompose)半自动转换为 Kubernetes 清单,平滑过渡。🌟最后赠言技术选型没有银弹,只有恰如其分。当你需要快速交付、团队熟悉 Docker、基础设施规模中等、运维资源有限。

千淘万漉虽辛苦,吹尽狂沙始到金 7353

物联网技术(AIR780E cat1-4G模块+小程序+腾讯云MQTT)驱动的智能井盖系统设计(连载01)

终端设备采用AIR780E模块作为主控器,电子模块有三轴加速度传感器、可燃气体传感器,AIR780E模块(4G模块)通过MQTT通信协议进行数据打包上传至EMQX服务器,在EMQX服务器中,用户可以自行订阅主题和发布主题,小程序通过MQTT通信协议订阅EMQX服务器的主题,服务器通过接收到硬件发布的数据,转发到微信小程序。

leida_3669的博客 2218

Docker Compose与Docker Swarm集成:集群部署

Docker Swarm 是 Docker 官方的容器编排工具,用于将多个 Docker 主机组成一个虚拟的“集群”,并在集群上统一管理容器。集群管理:将多个 Docker 主机组成一个集群。服务编排:以“服务”的形式定义容器的运行方式,支持自动扩展和负载均衡。高可用性:通过多管理节点实现高可用性,支持故障转移。弹性伸缩:根据负载动态调整服务的实例数量。通过本文的介绍,我们详细探讨了如何将 Docker Compose 项目部署到 Docker Swarm 集群中。通过。

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1517

OpenWrt国内镜像源一键切换脚本:清华/阿里/中科大源全搞定

本文介绍了OpenWrt国内镜像源一键切换脚本,支持清华、阿里和中科大三大源,自动识别设备架构和系统版本,显著提升软件包安装速度和成功率。脚本包含架构自动识别、版本适配、多源选择和配置备份等功能,适用于x86_64、ramips/mt7621等常见架构,帮助用户解决海外源访问缓慢的问题。

g5h6i的博客 1178

避坑指南:合宙Air780EG阿里云一型一密连接时,为什么你的HmacMD5加密总失败?

本文针对合宙Air780EG模组连接阿里云物联网平台时,HmacMD5签名失败的常见问题提供深度解决方案。详细剖析了签名拼接格式、密钥使用、随机数处理及编码大小写等关键陷阱,并结合STM32嵌入式开发环境,给出了串口调试、分步验证及AT指令链路的实用排错技巧,帮助开发者顺利完成一型一密动态注册。

kiwi8的博客 441

Docker03 - Docker Compose 和 Docker Swarm

Docker03 - Docker Compose 和 Docker Swarm

qq_43350524的博客 6354

【阿里云大模型高级工程师ACP习题集】2.3 优化提示词改善答疑机器人回答质量

【摘要】这是我精心整理出对应的习题集,里面足足有 30 道题目,从基础概念到深度拓展,全方位覆盖章节重点、难点。不管你是想检验自己的学习成果,还是想针对薄弱环节进行强化训练,它都能完美适配!

davidkorhenn的博客 1633

从零开始,使用Docker Swarm部署集群教程

本文首先从Dockerfile创建了一个简单web镜像 然后将web镜像推送到了远程仓库,以备后面集群中不同机器自动下载 之后使用docker-compose.yml配置了一个应用 而后新建了2台虚拟机作为swarm节点,并部署应用的5个实例在这两台虚拟机上 最后还讲了如何如果更改集群配置、如何扩容您的集群和如重新发布您的应用 一、创建一个简单web镜像,并推送到docker仓库 ...

程序员阿超的博客 2万+

重回童年的经典系列☀️| 【坦克大战3D版】游戏制作+解析

带你重回童年的经典系列——坦克大战3D版制作,感兴趣的可以看看呀~

努力前行,总会成为自己心中的那道光 5万+

QT Android开发之Android端usb调试模式设置与问题解决

QT Android开发之Android端usb调试模式设置与问题解决 一.QT android开发android端usb调试模式设置 QT android开发环境搭建完成后,android设备需要打开usb调试模式才能正常连接,下面以小米ipad为例进行设置(其他手机和ipad设置方法类似) 二.小米ipad打开usb调试模式 1.设置----我的设备-----全部参数信息-----OS版本---点击这里6次以上就进入开发者模式。

热土程序园,利他愉己~ 1132

Docker Compose和Docker Swarm简析与区别

文章目录一、背景二、Compose 简介三、Swarm 简介四、Compose 和 Swarm区别 一、背景 之前使用 Docker 的时候,定义 Dockerfile 文件,然后使用 docker build、docker run 等命令操作容器。然而微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例,如果每个微服务都要手动启停,那么效率之低,维护量之大可想而知。 使用 Docker Compose / Swarm可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker

一只黑猩猩 9863

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

手把手教你docker swarm集群部署

文章目录一、什么是docker swarm?二、docker swarm基本结构图三、准备工作1.准备三台cetnos8已安装docker的虚拟机,并且配置好ip地址。2.更改主机名3.配置hosts文件4.关闭防火墙和selinux四、docker swarm集群部署1.创建swarm集群2.添加节点主机到swarm集群3.创建一个服务4.swarm的动态缩容服务总结 一、什么是docker swarm? Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排

qq_42778369的博客 5290

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Docker Compose 和 Docker Swarm

Docker Swarm 和 Docker Compose 都是 Docker 官方提供的容器编排工具,但它们的应用场景和目标有所不同,它们的关系可以概括为:分工不同、可以结合使用。

yuguo_im的博客 1364

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Docker compose与swarm

Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。它通过 YML 文件配置应用程序所需的所有服务,只需一个命令即可创建并启动所有服务。主要步骤包括:使用 Dockerfile 定义环境,通过 docker-compose.yml 定义服务,最后执行 docker-compose up 启动应用。Docker Swarm 则是 Docker 的集群管理工具,支持多节点部署,通过管理节点和工作节点架构实现高可用性。两者结合可高效管理容器化应用的构建、编排和扩展。

cxbtdd的博客 1368

【Docker】docker compose和docker swarm区别

用于将多台 Docker 主机(物理机/虚拟机)组成一个统一的虚拟主机集群,实现容器化应用的。:让用户像管理单台主机一样管理多主机集群,简化容器化应用的规模化部署。:Docker 原生的。

m0_74282926的博客 1665
上一篇: Docker笔记:Docker Swarm 搭建集群与项目部署
下一篇: Docker笔记:Docker Swarm Web 管理工具之portainer及其汉化版
Wang's Blog
博客等级 码龄12年 7433粉丝 2421原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wang's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值