Skip to content

Latest commit

 

History

History
140 lines (108 loc) · 4.06 KB

20180218_02.md

File metadata and controls

140 lines (108 loc) · 4.06 KB

mastering docker#5 docker swarm详解

作者

jwh5566

日期

2018-02-18

标签

docker


dockerswarm 是用来在多个docker主机上分布式分发容器用的

docker 主机的两个角色

swarm manager

所有swarm主机的中心管理点,输入命令管理其他主机,切换节点,加入节点,删除节点等等 作为生产环境,推荐docker集群至少运行5个管理节点,这样可以容错最多两个管理节点down

swarm worker

就是docker 主机的别称

图解:

可以 右上图看到swam manager管理所有运行容器的主机

使用docker swarm

创建集群
$ docker-machine create -d virtualbox swarm-manager
创建docker host
$ eval $(docker-machine env swarm-manager)
切换docker machine

添加两个docker worker
docker-machine create -d virtualbox swarm-worker01
docker-machine create -d virtualbox swarm-worker02

创建docker manager
$ docker $(docker-machine config swarm-manager) swarm init \
  --advertise-addr $(docker-machine ip swarm-manager):2377 \
  --listen-addr $(docker-machine ip swarm-manager):2377
加入swarm worers
$docker $(docker-machine config swarm-worker01) swarm join \
  $(docker-machine ip swarm-manager):2377 \
  --token xxxx这里的token上面manager初始化之后得出的

$docker $(docker-machine config swarm-worker02) swarm join \
  $(docker-machine ip swarm-manager):2377 \
  --token xxxx这里的token上面manager初始化之后得出的
列出节点
$ docker-machine ls
查看docker client是否连接swarm manager(active是星号)
如果连接的是swarm manager,执行以下命令
$ docker node ls
列出集群节点

管理集群

$ docker info

获取集群信息(连接swarm manager的时候可以执行)

$ docker node inspect swarm-manager --pretty

可以在集群任一节点获取集群信息

$ docker node promote swarm-worker01

提升worker01节点为manager节点

$ docker node demote swarm-manager

给manager节点降级

$ docker node update --availability drain swarm-manager

临时排除一个节点(所有新容器的执行和创建都将会停止,所有已经运行的容器都将会迁移到其他active的节点上)

$ docker node update --availability active swarm-manager

修改节点可用性,加入集群

Docker Swarm services and stacks

$ docker service
$ docker stack

在swarm集群上,一次执行任务(运行,扩展,管理容器)

$ docker service create --name cluster --constraint "node.role == worker" -p:80:80/tcp russmckendrick/cluster
创建一个名叫cluster的service,只能运行在角色是worker的节点上
$ docker service inspect cluster --pretty

检查service的详细信息

$ docker service scale cluster=6

扩展services数量到6个

$ docker service rm cluster

移除service,将会删除所有的容器,留下下载好的image

version: "3"
services:
  cluster:
    image: russmckendrick/cluster
    ports:
      - "80:80"
    deploy:
      replicas: 6  # 6个instance
      restart_policy:
        condition: on-failure  # 当容器不响应的时候,重启容器
      placement:
        constraints:
          - node.role == worker  # 限制运行的节点
$ docker stack deploy --compose-file=docker-compose.yml cluster

运行stack

$ docker stack services cluster

查看service的详细信息

$ docker stack ps cluster

显示stack的容器都运行在那些节点上

$ docker stack rm cluster

移除stack(包括services和networks)

删除一个swarm集群

$ docker-machine rm swarm-manager swarm-worker01 swarm-worker02

Load balancing, overlays

内建的load balance使得流量分发到所有对公的容器上

白色框内的为overlay network,是一个隔离的网络,并且有自己内建的DNS 服务