zoukankan      html  css  js  c++  java
  • Docker swarm 笔记

    防火墙开放端口:

    • TCP port 2377为集群管理通信
    • TCP and UDP port 7946 为节点间通信
    • UDP port 4789 为网络间流量

    创建attachable network

    docker network create --driver=overlay --attachable mynet-core

    查看网络

    docker network ls
    

      

    在manager1上创建swarm集群:

    $ docker swarm init --advertise-addr 192.168.0.251
    

    --advertise-addr选项表示管理节点公布它的IP是多少。其它节点必须能通过这个IP找到管理节点。

    运行docker info来查看当前swarm集群的状态:

    $ docker info 

    查看节点信息

    $  docker node ls
    

    查看加入节点指令 

    $ docker swarm join-token worker
    To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-3bxotwbwtvhtzawo548h738h2rjs4s8hgj8ah6cxfydb775grz-cjzodty09sti7eb5inmdg4err 192.168.0.251:2377

    加入节点

    ssh到worker2 ,使主机2 加信集群

    $ docker swarm join --token SWMTKN-1-3bxotwbwtvhtzawo548h738h2rjs4s8hgj8ah6cxfydb775grz-cjzodty09sti7eb5inmdg4err 192.168.0.251:2377

    在swarm集群上部署一个服务

    $ docker service create --network mynet-core --replicas 1 --name gpsserver -p 10111:10111 -p 15678:15678  --mode global --update-delay 10s gpsserver:1.0
    

    和运行容器一样,可绑定多个端口

    --name表明服务名字是gpsserver 

    --replicas 表示期望1个服务实例

    --mode 模式 replicated or global(默认replicated,如果设置为global,无需设置 --replicas ,每个节点下,都会运行一个task)

    --publish published=53,target=53,protocol=udp,mode=host (绑定端口不使用简写使用host模式,端口不转发,不使用swarm的负载均衡功能,配合nginx等第三方工具)

    --network mynet-core attachable network是一个非常重要的特性。你最好使用它,否则docker run创建的容器将无法接入Swarm集群的网络。

    gpsserver:1.0 镜像与标签

     

    在服务部署阶段就指定滚动升级策略

    • --update-delay配置了更新服务的时间间隔,你可以指定时间T为秒是Ts,分是Tm,或时是Th,所以10m30s就是10分30秒的延迟
    • 默认的调度器scheduler一次更新一个任务.你可以传入参数--update-parallelism来配置调度器同时更新的最大任务数量
    • 默认的当一个更新任务返回RUNNING状态后,调度器才调度另一个更新任务,直到所有任务都更新了。如果更新过程中任何任务返回了FAILED,调度器就会停止更新。你可以给命令docker service create or docker service update配置配置--update-failure-action,来配置这个行为。

     

    至此所有节点都可访问服务了

    查看运行的服务

     $ docker service ls
    

      

    查看优化显示的服务详情

    $ docker service inspect --pretty 060zo3u0g3mj

    060zo3u0g3mj是服务id

    查看到哪些节点在运行该服务实例

    $ docker service ps 060zo3u0g3mj

    缩放一个或多个复制服务

    $ docker service scale 060zo3u0g3mj=2

    删除服务

    $ docker service rm 060zo3u0g3mj
    

    动态更新服务

    $ docker service update --image gpsserver:2.0 gpsserver(或服务id)
    

    使用--mount-add--mount-rm选项可以添加或删除服务的bind-mount或卷

    回滚上个一个配置或版本

    $ docker service update --rollback gpsserver
    

      

    #创建nginx服务

    #docker pull hub.test.com:5000/almi/nginx:0.1 #下载私有仓库镜像
    docker service create --name nginx  --replicas 2 --publish 80:80 hub.test.com:5000/almi/nginx:0.1
    #--network=swarm_test
    #replicas 2 创建2个容器,hub.test.com为私有仓库

    #查看swarm集群中的服务

    docker service ls
    docker service ps nginx

    #kill其中一个容器

    docker kill 96e6bccc2209
    #等会自动启动一个新的容器

    #修改服务实例数量为3

    docker service scale nginx=3

    #删除nginx服务

    docker service rm nginx

    #删除swarm节点

    docker swarm leave --force  #node
    docker node rm -f <node>    #manager

    #docker swarm 常用命令

    docker swarm init               #初始化集群
    docker swarm join-token worker  #查看工作节点的 token
    docker swarm join-token manager #查看管理节点的 token
    docker swarm join               #加入集群中

        docker swarm update --task-history-limit 2  # 更改任务历史记录保留限制

      

    #docker node 常用命令

    docker node ls      #查看所有集群节点
    docker node rm      #删除某个节点(-f强制删除)
    docker node inspect ##查看节点详情
    docker node demote  #节点降级,由管理节点降级为工作节点
    docker node promote #节点升级,由工作节点升级为管理节点
    docker node update  #更新节点
    docker node ps      #查看节点中的 Task 任务
    

      

    #docker service 常用命令

    docker service create   #部署服务
    docker service inspect  #查看服务详情
    docker service logs     #产看某个服务日志
    docker service ls       #查看所有服务详情
    docker service rm       #删除某个服务(-f强制删除)
    docker service scale    #设置某个服务个数
    docker service update   #更新某个服务
    

      

    #++++++++++++++++++++++++++++++

    #Docker Stack 部署多个集群服务

    #docker stack使用编排文件docker-compose.yml批量部署服务

    #创建编排文件docker-compose.yml

    mkdir mydocker ; cd mydocker
    echo "#  docker stack
    version: '3'
    services:
    
      mynginx:
        image: hub.test.com:5000/almi/nginx:0.1
        ports:
         - "8081:80"
        deploy:
          replicas: 3
    
      busybox:
        image: hub.test.com:5000/busybox:latest
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock"
        deploy:
          replicas: 2
    #">docker-compose.yml

    #使用docker-compose.yml批量创建服务

    docker stack deploy -c docker-compose.yml deploy-test
    docker stack ps deploy-test
    #容器名称 deploy-test_<service名称>.随机后缀

    #docker stack 常用命令

    docker stack deploy   #部署新的堆栈或更新现有堆栈
    docker stack ls   #列出现有堆栈
    docker stack ps   #列出堆栈中的任务
    docker stack rm   #删除堆栈
    docker stack services   #列出堆栈中的服务
    docker stack down   #移除某个堆栈(不删数据)
    挂载目录, mount 

    docker service create --mount type=bind,target=/container_data/,source=/host_data/

    例 - 本地目录: target = 容器里面的路径, source = 本地硬盘路径

    # docker service create --name nginx --mount type=bind,target=/usr/share/nginx/html/,source=/opt/web/ --replicas 2 --publish 80:80/tcp nginx

    docker service create --mount type=volume,source=<VOLUME-NAME>,target=<CONTAINER-PATH>,volume-driver=<DRIVER>,

    例 - 挂载volume卷: source = volume 名称 , traget = 容器里面的路径

    # docker service create --name nginx --mount type=volume,source=myvolume,target=/usr/share/nginx/html,volume-driver=local --replicas 2 --publish 80:80/tcp nginx
    

      

  • 相关阅读:
    PHP文件上传代码和逻辑详解
    了解thinkphp(二)
    了解ThinkPHP(一)
    php关于static关键字
    php关于return的关键字
    会话控制
    PDO数据库
    PHP包含文件函数include、include_once、require、require_once区别总结
    jQuery事件
    一、MVC模式学习概述
  • 原文地址:https://www.cnblogs.com/lucoo/p/10147946.html
Copyright © 2011-2022 走看看