- compose大杀器编排服务
- linux下安装:
a,在 Linux 64 位系统上直接下载对应的二进制包 sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose b,pip安装 sudo pip install -U docker-compose //bash 补全命令 curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
- linux下卸载
a,二进制卸载 sudo rm /usr/local/bin/docker-compose b,pip卸载 sudo pip uninstall docker-compose
- dock-swarm
-
Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。
-
swarm的特性
a, 与docker集成的集群管理工具
b, 去中心化设计,只使用docker引擎即可创建各类节点
c, 声明式服务模型。可以声明的方式来定义应用。
d, 动态伸缩。管理节点自动调整服务数量。
e, 高可用,对于服务期望状态做到动态调整,swarm的管理节点会持续监控集群状态,集群中有没有达到期望状态的服务,管理节点会自动调度来达到期望状态。
f, 自定义网络。可以为你的服务指定一个网络,容器创建的时候分配一个IP
g, 服务发现。管理节点给集群中每个服务一个特定的DNS名字,并给运行的容器提供负载均衡。
h, 负载均衡。你可以暴露服务端口给外部的负载均衡。内部swarm提供可配置的容器分配到节点的策略。
i, 默认的安全机制。swarm集群中各个节点强制TLS协议验证。连接加密,你可以自定义根证书。
j, 滚动更新。增量跟新,可以自定义更新下个节点的时间间隔,如果有问题,可以会滚到上个版本。 -
swarm集群节点必须开放的端口
a, TCP port 2377为集群管理通信
b, TCP and UDP port 7946 为节点间通信
c, UDP port 4789 为网络间流量 -
创建swarm集群操作,高版本默认自带swarm
1)在manager节点运行以下命令来创建一个新的swarm集群docker swarm init --advertise-addr 192.168.19.22 a,--advertise-addr选项表示管理节点公布它的IP是多少。其它节点必须能通过这个IP找到管理节点。 b,命令输出了加入swarm集群的命令。通过--token选项来判断是加入为管理节点还是工作节点
2)运行docker node ls来查看节点信息
a, nodeId旁边的*号表示你当前连接到的节点。 b, docker引擎的swarm模式自动使用宿主机的主机名作为节点名。
3)将节点加入到swarm集群中
a, 在manager节点查看加入swarm集群的命令:docker swarm join-token worker b, 在work节点执行命令加入:docker swarm join --token SWMTKN-1-2bgkinnbc0rmlj6kpotyrlj0uz51l2ikinttsk960dxro558x4-6zajfnahtv9ye39momd
4)到manage节点查询节点信息
a, 执行命令:docker node ls b, MANAGER列表明了集群中的管理节点。worker节点的空意味着它们是工作节点
5)使用命令的方式部署服务
a,在manager节点执行:docker service create --replicas 1 --name helloworld alpine (1)docker service create用来创建服务 (2)--name表明服务名字是helloworld (3)--replicas 表示期望1个服务实例 (4)alpine ping docker.com 表示运行镜像是alpine,命令是ping b,查看运行的服务:docker service ls c,查看优化显示的服务详情:docker service inspect --pretty <serviceID> d,在swarm集群中动态伸缩服务实例数:docker service scale 060zo3u0g3mj=3 e,从swarm集群上删除应用:docker service rm helloworld。尽管服务不存在了,任务容器还需要几秒钟来清理,可以在节点上docker ps查看任务什么时候被移除
6)使用yml文件里创建服务,以在3个节点运行guns项目为例,创建yml文件,内容如下:
version: "3" services: guns-admin: image: guns-admin:latest ports: - 8080:8080 networks: - myoverlay volumes: - /opt/logs/guns-admin:/opt/logs/guns-admin environment: - spring_datasource_url=jdbc:mysql://192.168.19.22:3306/guns?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false - spring_datasource_username=root - spring_datasource_password=root - logging_path=/opt/logs/guns-admin/ - JAVA_OPTS= -Duser.timezone=GMT+08 -Xms128m -Xmx1024m deploy: mode: replicated replicas: 3 labels: [APP=guns-admin] restart_policy: condition: any networks: myoverlay: external: name: myoverlay
7)以上一个例子为例创建overlay网络,方便容器之间通信
a,执行命令:docker network create --driver overlay myoverlay b,查看网络:docker network ls c,将现有服务连接到overlay网络: docker service update --network-add my-network hello d,删除正在运行的网络连接:docker service update --network-rm my-network hello e,如果使用overlay和swarm运行的容器无法ping通外网或局域网内的其他机器,可以使用systemctl docker restart 重启docker后重试
8)滚动更新
a,配置更新间隔:docker service create --replicas 2 --name ghost --update-delay 10s ghost:0.11.12 (1)在服务部署阶段就指定滚动升级策略 (2)--update-delay配置了更新服务的时间间隔,你可以指定时间T为秒是Ts,分是Tm,或时是Th,所以10m30s就是10分30秒的延迟 (3)默认的调度器scheduler一次更新一个任务.你可以传入参数--update-parallelism来配置调度器同时更新的最大任务数量 (4)默认的当一个更新任务返回RUNNING状态后,调度器才调度另一个更新任务,直到所有任务都更新了。如果更新过程中任何任务返回了FAILED,调度器就会停止更新。你可以给命令docker service create or docker service update配置配置--update-failure-action,来配置这个行为。 b,更新redis的容器镜像: docker service update --image ghost:1.21.3 ghost (1)停止第一个任务 (2)对停止的任务进行更新 (3)对更新的任务进行启动 (4)如果更新的任务返回RUNNING,等待特定间隔后启动下一个任务 (5)如果在任何更新的时间,任务返回了FAILED,则停止更新。 c,docker service ps 来查看本次滚动更新的过程:docker service ps ghost d,注意升级后老的容器只是停止了,并没有删除
9)运行docker node update --availability drain 来下线一个节点:docker node update --availability drain default
10)运行docker node update --availability active 来重新active该节点:docker node update --availability active default
11)当节点重新active的时候,在以下情况下它会重新接受任务:a,当一个服务缩容扩容时 b,在滚动更新的时候 c,当另一个节点Drain下线的时候 d,当一个任务在另一个active节点上运行失败的时候
12)为服务曝露端口:docker service update --publish-add published=8080,target=2368 ghost
-
网友评论