您当前的位置:首页 > 电脑百科 > 程序开发 > 容器

Docker swarm实战总结

时间:2019-12-25 11:35:13  来源:  作者:

Docker swarm实战总结

 

一、简介

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 swarm实战总结

 

前期工作

准备几台机器,安装 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 --permanentfirewall-cmd --zone=public --add-port=4789/tcp --permanent # overlay网络通讯端口 firewall-cmd --zone=public --add-port=4789/udp --permanentfirewall-cmd --reload

 

初始化swarm

docker swarm init  #默认初始化节点为manager--advertise-addr 192.168.89.14  # 多网卡的情况下,指定需要使用的ip--listen-addr 192.168.89.14:2377 # 指定监听的 ip 与 port
Docker swarm实战总结

 

添加工作节点

--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  # 节点token192.168.89.14:2377 # 管理节点

 

管理节点

docker node ls # 查看节点docker node rm # 移除节点docker swarm leave # 退出节点(对应节点上运行)
Docker swarm实战总结

 

更详细部署推荐>>> 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 swarm实战总结

 

四、Docker service

Docker swarm实战总结

 

服务是自 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 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

Docker swarm实战总结

 

# file: docker-compose.ymlversion: "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: 1024Mconfigs:      # 定义配置  JmDiService-application.properties:    external: true    networks:     # 定义网络  overlay:

作者: Leozhang gg

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



Tags:Docke swarm   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一、简介Swarm 是 Docker 官方提供的一款集群管理工具 ,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源...【详细内容】
2019-12-25  Tags: Docke swarm  点击:(85)  评论:(0)  加入收藏
▌简易百科推荐
一、前因闲来没事,想着升级下树莓派中的应用,没曾想,全是最新的,害我以为被黑客眷顾,帮我升级了。多方查证,才知道,是上次搭建的photoprism搞的鬼,不过也不全是它的锅,只是它的yml文...【详细内容】
2021-12-28  闲余悟道    Tags:Docker   点击:(2)  评论:(0)  加入收藏
一、为什么要搭建主从架构呢1.数据安全,可以进行数据的备份。2.读写分离,大部分的业务系统来说都是读数据多,写数据少,当访问压力过大时,可以把读请求给到从服务器。从而缓解数据...【详细内容】
2021-12-15  实战Java    Tags:Docker   点击:(12)  评论:(0)  加入收藏
在网页中渲染公式一直是泛学术工具绕不开的一个功能,最近更新产品功能,正巧遇到了这个需求,于是使用容器方式简单实现了一个相对靠谱的公式渲染服务。分享出来,希望能够帮到有类...【详细内容】
2021-12-01  编程菌zfn    Tags:Docker   点击:(11)  评论:(0)  加入收藏
1.1 docker命令直接部署1.1.1 拉取镜像docker pull wurstmeister/zookeeperdocker pull wurstmeister/kafka1.1.2 启动zookeeper容器docker run -d --name myzookeeper -p 2...【详细内容】
2021-11-15  无    Tags:docker   点击:(48)  评论:(0)  加入收藏
01 前言 顺着docker的发展,很多测试的同学也已经在测试工作上使用docker作为环境基础去进行一些自动化测试,这篇文章主要讲述我们在docker中使用浏览器进行自动化测试如果可以...【详细内容】
2021-10-29  小码哥聊软件测试    Tags:Docker   点击:(42)  评论:(0)  加入收藏
因为你懂得的原因,下载docker镜像速度非常喜感,故收集几个国内常用的docker镜像。Docker中国区官方镜像地址:https://registry.docker-cn.com网易163的镜像http://hub-mirror.c...【详细内容】
2021-10-28  抓蛙程序猿    Tags:docker   点击:(48)  评论:(0)  加入收藏
环境:Spring5.3.10通常,应用程序开发人员不需要对ApplicationContext实现类进行子类化。相反,SpringIOC容器可以通过插入特殊集成接口的实现来扩展。使用BeanPostProcessor自定...【详细内容】
2021-10-26  Java网络研发架构师    Tags:Spring   点击:(34)  评论:(0)  加入收藏
我们在很多场景下都需要做笔记,来对抗遗忘,一份好的笔记不仅能在需要的时候供我们查阅,也能帮助我们归纳整理知识提高做事效率。 目前市面上有很多云笔记软件,体验上各有不同,但...【详细内容】
2021-10-11  运维贼船    Tags:docker   点击:(62)  评论:(0)  加入收藏
1. Nacos官网Nacos Docker 快速开始2. Clone 项目git clone https://github.com/nacos-group/nacos-docker.git3. cd 到nacos-docker 路径下 直接启动即可cd nacos-dockerdo...【详细内容】
2021-09-16  程序狗爱化妆    Tags:Nacos   点击:(109)  评论:(0)  加入收藏
今天不做保姆级教程,分享奶爸常用、好用的Docker应用。有了这些Docker,Nas的可玩性会大幅提高,有时候奶爸也在想,刨去官方套件不考虑的话,Nas真的是差不多。如果小伙伴们有需要,后...【详细内容】
2021-09-03  晋升奶爸的垃圾佬    Tags:Docker   点击:(168)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条