一、简介

Swarm 是 Docker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源。

Docker Swarm 包含两方面:一个企业级的 Docker 安全集群,以及一个微服务应用编排引擎。

集群方面,Swarm 将一个或多个 Docker 节点组织起来,使得用户能够以集群方式管理它们,可以自如地添加或删除节点

编排方面,Swarm 提供了一套丰富的 API 使得部署和管理复杂的微服务应用变得易如反掌。通过将应用定义在声明式配置文件中,就可以使用原生的 Docker 命令完成部署。

此外,甚至还可以执行滚动升级、回滚以及扩缩容操作,同样基于简单的命令即可完成。

以往,Docker Swarm 是一个基于 Docker 引擎之上的独立产品。自 Docker 1.12 版本之后,它已经完全集成在 Docker 引擎中,执行一条命令即可启用。

到2018年,除了原生 Swarm 应用,它还可以部署和管理 Kubernetes 应用。Swarm 和 Kubernetes 比较类似,但是更加轻,具有的功能也较 kubernetes 更少一些。

集群管理:  docker swarm 子命令有 init, join, leave, update (docker swarm --help查看帮助)

节点管理:  docker node子 命令有 accept, promote, demote, inspect, update, tasks, ls, rm (docker node --help查看帮助)

配置管理:  docker config 子命令有 create, inspect, ls, rm (docker config--help查看帮助)

服务管理:  docker service 子命令有 create, inspect, update, remove, tasks, ls, rm, ps (docker service--help查看帮助)

堆栈管理:  docker stack 子命令有 deploy, services, ps, rm (docker stack--help查看帮助)


二、部署

  前期工作

  准备几台机器,安装docker v1.12+,添加私有镜像仓库源

/etc/docker/daemon.json

{ "insecure-registries":["xxx.xxx.xxx.xxx:5000"] }

   集群节点之间保证TCP 2377、TCP/UDP 7946和UDP 4789端口通信(或者直接关闭防火墙 systemctl stop firewalld)

firewall-cmd --zone=public --add-port=2377/tcp --permanent    # 集群管理端口

firewall-cmd --zone=public --add-port=7946/tcp --permanent    # 节点之间通讯端口
firewall-cmd --zone=public --add-port=7946/udp --permanent

firewall-cmd --zone=public --add-port=4789/tcp --permanent    # overlay网络通讯端口
firewall-cmd --zone=public --add-port=4789/udp --permanent

firewall-cmd --reload

  

  初始化swarm

docker swarm init \        # 默认初始化节点为manager

--advertise-addr 192.168.89.14 \   # 多网卡的情况下,指定需要使用的ip

--listen-addr 192.168.89.14:2377   # 指定监听的 ip 与 port

  

  添加工作节点

    --token 初始化时获取,或者通过命令获取(docker swarm join-token worker

docker swarm join \

--advertise-addr 192.168.89.15 \
--listen-addr 192.168.89.15:2377 \  # 可不加,根据实际需求

--token SWMTKN-1-29ynh5uyfiiospy4fsm4pd4xucyji2rn0oj4b4ak4s7a37syf9-ajkrv2ctjr5cmxzuij75tbrmz \  # 节点token

192.168.89.14:2377  # 管理节点

  

  管理节点

docker node ls   # 查看节点

docker node rm   # 移除节点

docker swarm leave   # 退出节点(对应节点上运行)

  更详细部署推荐>>> Docker Swarm集群部署实践


三、Docker config

17.06引入了群体服务配置,使您可以在服务映像之外或运行中的容器之外存储非敏感信息,例如配置文件。这使您可以保持映像尽可能通用,而无需将安装文件绑定安装到容器中或使用环境变量。

可以随时在服务中添加或删除配置,并且服务可以共享配置。您甚至可以将配置与环境变量或标签结合使用,以实现最大的灵活性。配置值可以是通用字符串或二进制内容(最大500 kb)。

注意:Docker配置仅适用于群集服务,不适用于独立容器。

将配置添加到群集时,Docker会通过双向TLS连接将配置发送到群集管理器。该配置存储在Raft日志中,该日志已加密。整个Raft日志会在其他管理器之间复制,以确保对配置的高可用性保证与其他集群管理数据一样。

当您授予对配置的新创建或正在运行的服务访问权限时,该配置将作为文件安装在容器中。容器中安装点的位置默认为/<config-name>Linux容器中的位置。

docker config create jmdiservice-application.properties ~/local/application.properties  # 为创建服务所引用


四、Docker service

服务是自 Docker 1.12 后新引入的概念,并且仅适用于 Swarm 模式。

使用服务仍能够配置大多数熟悉的容器属性,比如容器名、端口映射、接入网络和镜像。

此外还增加了额外的特性,比如可以声明应用服务的期望状态,将其告知 Docker 后,Docker 会负责进行服务的部署和管理。

更多概念推荐>>> Docker管理工具-Swarm

服务创建

docker service create \
--with-registry-auth \
--mode global \
--name jmdiservice \
--config source=jmdiservice-application.properties,target=/root/application.properties \
--mount type=bind,source=/opt/lib,destination=/root/lib \
--env JAVA_OPTS="-Xms1024m -Xmx1024m" \
--publish 20036:20036 \
-td xx.xx.xx.xx:5000/zwx/jmdiservice:1123    

命令详解:

--with-registry-auth:将registry身份验证详细信息发送给集群代理。

--mode global:全局模式,在这种模式下,每个节点上仅运行一个副本。
   另一种是复制模式(--replicas 3),这种模式会部署期望数量的服务副本,并尽可能均匀地将各个副本分布在整个集群中。

--name:服务名称。(避免使用符号,容易解析错误)

--config:指定要向服务公开的配置。(添加配置参考docker config create)

--mount:将文件系统挂载附加到服务。(需要保留/读取的容器外信息)

--env:设置环境变量。

--publish:将端口发布为节点端口。(默认把需要发布的端口映射到本地)

-td:分配伪TTY,并后台运行。

注意:镜像地址、名称、标签一定填写正确

  服务更新:

docker service update --args "ping www.baidu.com" redis    # 添加参数
docker service scale redis=4    # 为服务扩(缩)容scale
docker service update --image redis:3.0.7 redis  # 更新服务的镜像版本
docker service update --rollback redis  # 回滚服务


五、Docker stack

大规模场景下的多服务部署和管理是一件很难的事情,Docker Stack由此而生。

Stack 通过提供期望状态、滚动升级、简单易用、扩缩容、健康检查等特性简化了应用的管理,这些功能都封装在一个完美的声明式模型当中。

Stack 能够在单个声明文件中定义复杂的多服务应用,还提供了简单的方式来部署应用并管理其完整的生命周期:初始化部署 -> 健康检查 -> 扩容 -> 更新 -> 回滚

步骤很简单,在 Compose 文件中定义应用,然后通过 docker stack deploy 命令完成部署和管理。

export logpath=/home/jhmyPro/logs      
export tag=latest              # 使用环境变量,增强可用性
docker stack deploy --with-registry-auth -c docker-compose.yml QS    

# file: docker-compose.yml

version: "3.7"
services:
JmDiService: # 服务名
image: xx.xx.xx.xx:5000/zwx/jmdiservice:${tag} environment: # 环境变量
LOG_PATH: ${logpath}    
PKG_NAME: "JmDiService"
JAVA_OPTS: "-Xms512m -Xmx1024m" networks: # 网络设置
overlay: ports: # 端口映射 [宿主机:容器]
- 20036:20036 configs: # 读取配置 [配置名:容器]
- source: JmDiService-application.properties
target: /root/application.properties volumes: # 挂载数据卷 [宿主机:容器]
- ${logpath}:${logpath}
- /opt/lib:/root/lib
- /usr/local/nginx/html/clientexe:/usr/local/nginx/html/clientexe deploy: # 部署设置
mode: replicated
replicas: 3 restart_policy: # 重启策略 [条件,延时,最大次数,检测时间]
condition: on-failure
delay: 5s
max_attempts: 3
window: 30s update_config: # 升级配置 [并发数,延时,失败处理,监听时间,更新规则]
parallelism: 1
delay: 5s
failure_action: rollback
monitor: 5s
order: start-first resources: # 资源控制 [cpu,mem]
limits:
#cpus: '0.2'
memory: 1024M configs:      # 定义配置
JmDiService-application.properties:
external: true networks:     # 定义网络
overlay:

  更多参数定义推荐>>> docker-compose编排参数详解

作者:Leozhanggg

出处:https://www.cnblogs.com/leozhanggg/p/12061360.html

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Docker swarm实战总结的更多相关文章

  1. Docker swarm 实战-部署wordpress

    Docker swarm 实战-部署wordpress 创建一个overlay的网络 docker network create -d overlay demo 6imq8da3vcwvj2n499k ...

  2. 【09】循序渐进学 docker:docker swarm

    写在前面的话 至此,docker 的基础知识已经了解的差不多了,接下来就来谈谈对于 docker 容器,我们如何来管理它. docker swarm 在学习 docker swarm 之前,得先知道容 ...

  3. Docker Swarm从部署到基本操作

    关于Docker Swarm Docker Swarm由两部分组成: Docker集群:将一个或多个Docker节点组织起来,用户就能以集群的方式进行管理: 应用编排:有一套API用来部署和管理容器: ...

  4. Docker Swarm 集群环境搭建及弹性服务部署

    上一篇文章<Docker Swarm 集群管理利器核心概念扫盲>中我们把 Swarm 重要的概念性知识给大家讲解了一波,理论完事就该实战了,这篇文章带大家从零开始,搭建 Docker Sw ...

  5. 通过docker-machine和etcd部署docker swarm集群

    本片文章介绍一下 使用docker-machine 搭建docker swarm 集群:docker swarm是docker 官方搭建的容器集群编排工具:容器编排,就是可以使你像使用一太机器一样来使 ...

  6. Centos7的安装、Docker1.12.3的安装,以及Docker Swarm集群的简单实例

    目录 [TOC] 1.环境准备 ​ 本文中的案例会有四台机器,他们的Host和IP地址如下 c1 -> 10.0.0.31 c2 -> 10.0.0.32 c3 -> 10.0.0. ...

  7. (转) Docker swarm - 使用体验 1+2

    背景 凭借敏捷开发部署理念的推行,相信对于很多人来说docker这项容器技术已经并不陌生,Docker 1.12引擎发布了快两个月,新引擎中包含了许多特性.诸如: Swarm模式,容器集群的健康检查, ...

  8. (转) Docker swarm 之介绍与使用

    今天,在站内看到一篇关于Docker Swarm 的文章,非常好,在这里转过来,方便日后查阅 :) 原贴链接: http://www.cnblogs.com/rio2607/p/4445968.htm ...

  9. 从零开始搭建Docker Swarm集群

    从零开始搭建Docker Swarm集群 检查节点Docker配置 1. 打开Docker配置文件(示例是centos 7)vim /etc/sysconfig/docker2. 添加-H tcp:/ ...

随机推荐

  1. Flex实现web版图片查看器

    项目需求: 在web端实现图片浏览,具有放大.缩小.滚轴放大缩小.移动.旋转以及范围控制. 成果图:

  2. 2019-10-10:渗透测试,基础学习,mysql语法基础,笔记

    mysql常用命令mysql -u用户名 -p,登录方式也称为,二进制方式exit 退出mysql 查看mysql版本select version(); 查看mysql所有数据库show dateba ...

  3. Spring Boot2 系列教程(二十七)Nginx 极简扫盲入门

    上篇文章和大家聊了 Spring Session 实现 Session 共享的问题,有的小伙伴看了后表示对 Nginx 还是很懵,因此有了这篇文章,算是一个 Nginx 扫盲入门吧! 基本介绍 Ngi ...

  4. Spring security (一)架构框架-Component、Service、Filter分析

    “致"高级"工程师(BUG工程师) 一颗折腾的心

  5. 03_Matplotlib的基本使用

    python利用Matplotlib.pyplot库绘制不同的图形,但是在显示中文时存在部分问题,一般在导入库后,添加如下代码: # 设置中文正常显示 plt.rcParams['font.sans- ...

  6. 预分配——fallocate的前世今生

    最近比较懒,还是加班写点东西吧,不然过段时间又把这些整理的东西弄丢了. 写什么呢?写一些跟工作相关的吧!因为笔者从事多媒体录像相关的开发工作,因此常常涉及到优化写卡策略.提升写卡性能相关的方面的事情. ...

  7. MySQL8——源码安装

    一.环境 ubuntu18.10(CentOS7由于gcc版本过低已经无法通过编译) 二.准备工作 1.安装依赖 apt-get install -y gcc g++ cmake build-esse ...

  8. Objective-C (OC)

    1.OC  运行效率比较高,仅次于c.开发过程时,效率也比较高,不会次于java和C++: :表示继承 “{}”之间写字段或声明 }和@end之间写函数 import 相当于include 作用于和j ...

  9. 在Spring Boot中添加全局异常捕捉提示

    在一个项目中的异常我们我们都会统一进行处理的,那么如何进行统一进行处理呢? 全局异常捕捉: 新建一个类GlobalDefaultExceptionHandler, 在class注解上@Controll ...

  10. Bean中要使用配置文件中的值,使用set方法注入

    /** * Sensors Analytics Bean * @author Feng */ @Component public class SensorsAnalyticsBean { /*** * ...