docker-swarm实战操练

Owen Jia 2019年04月01日 605次浏览

swarm 本质上就是:容器部署的集群方案。

swarm

swarm的体系中有一个主node,我们通过这个主节点可以自动分发app到各个子node上面运行,同时管理各个node的上线和下线。在swarm体系中node只分为manager和worker两种,只有一个node是manager的。

swarm-help

演示例子

  1. 创建两个 machine,dev-1和dev-2

docker-machine create --driver virtualbox dev-1

  1. 切换 default machine

docker-machine ssh default

  1. 创建default为swarm manager

docker swarm init -advertise-addr 192.168.99.100

swarm-init

  1. 分别添加dev-1和dev-2位从节点

docker-machine ssh dev-1 "docker swarm join --token SWMTKN-1-411qbt7obs3fmv0leqg2xrywd85uyt5thc6nrysx3m04mtxjc0-9et3kwcgaqup8w1a7qm0z1xpo 192.168.99.100:2377"

dev-1

docker-machine ssh dev-2 "docker swarm join --token SWMTKN-1-411qbt7obs3fmv0leqg2xrywd85uyt5thc6nrysx3m04mtxjc0-9et3kwcgaqup8w1a7qm0z1xpo 192.168.99.100:2377"

dev-2

  1. 可以查看当前swarm的所有节点

docker node ls

node-ls

使用training/webapp作为测试例子,这是一个web应用,http访问显示“hello world”

  1. 配置compose.yml文件,“replicas: 4”的意思是启动 4 个服务
version: '3'
services:
  training:
    image: training/webapp
    deploy:
      replicas: 4
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
      restart_policy:
        condition: on-failure
    ports: 
      - "5000:5000"
    networks:
      - webnet
networks:
  webnet:
  1. 运行docker stack deploy进行发布

deploy

  1. 查看运行状态,启动了4个服务

ps

  1. 我们去dev-2机器上验证是否服务是否正常

docker-ps

  1. 访问网页请求,如下“hello world!”

http

swarm 特点

断点分发,自启动

可以很清晰看到4个服务启动在不同的node上,当任意一个node出现意外离线,swarm会自动将该节点上的服务启动在同一个swarm的其他node上。

移除swarm中dev-1的worker测试:

docker-machine ssh dev-1 "docker swarm leave --force"

leave

节点请求路由,随机分发

swarm内部有一个随机的请求分发策略,官网看到是随机路由,可不可以配置这块还不能确定。

routing-mesh

收藏链接

docker swarm

docker stack deploy

作者:Owen Jia

关注他的博客 Owen Blog,有更多关于docker的文章。