• Docker Swarm(二)常用命令



    • # 管理配置文件
    • docker config
    •     # 查看已创建配置文件
    •     - docker config ls
    •     # 将已有配置文件添加到docker配置文件中
    •     - docker config create docker 配置文件名 本地配置文件

    •  # 管理swarm节点
    • docker node
    •     # 查看集群中的节点
    •     - docker node ls
    •     # 将manager角色降级为worker
    •     - docker node demote 主机名
    •     # 将worker角色升级为manager
    •     - docker node promote 主机名
    •     # 查看节点的详细信息,默认json格式
    •     - docker node inspect 主机名
    •           # 查看节点信息平铺格式
    •           - docker node inspect --pretty 主机名
    •     # 查看运行的一个或多个及节点任务数,默认当前节点
    •     - docker node ps
    •     # 从swarm中删除一个节点
    •     - docker node rm 主机名
    •     # 更新一个节点
    •     - docker node update
    •           # 对节点设置状态(“active”正常|“pause”暂停|“drain”排除自身work任务)
    •           - docker node update --availability

    •  # 管理敏感数据存储
    • docker secret

    • # 服务栈,栈的形式,一般作为编排使用,格式与docker compose相同。
    • docker stack
    •     # 通过.yml文件指令部署
    •     - docker stack deploy -c 文件名.yml 编排服务名
    •     # 查看编排服务
    •     - docker stack ls
    build
    cgroup_parent
    container_name
    devices
    dns
    dns_search
    tmpfs
    external_links
    links
    network_mode
    security_opt
    stop_signal
    sysctls
    userns_mode
    docker stack 不支持使用参数

    • # 作为集群的管理
    • docker swarm
    •     # 初始化一个swarm
    •     - docker swarm init
    •           # 指定初始化ip地址节点
    •           - docker swarm init --advertise-addr 管理端IP地址
    •           # 去除本地之外的所有管理器身份
    •           - docker swarm init --force-new-cluster
    •     # 将节点加入swarm集群,两种加入模式manager与worker
    •     - docker swarm join
    •           # 工作节点加入管理节点需要通过join-token认证
    •           - docker swarm join-token
    •           # 重新获取docker获取初始化命令
    •           - docker swarm join-token worker
    •     # 离开swarm
    •     - docker swarm leave
    •     # 对swarm集群更新配置
    •     - docker swarm update

    • # 服务管理
    • docker service
    •     # 创建一个服务
    •     - docker service create
    •           # 创建的副本数
    •           - docker service create --replicas 副本数
    •           # 指定容器名称
    •           - docker service create --name 名字
    •           # 每次容器与容器之间的更新时间间隔。
    •           - docker service create --update-delay s秒
    •           # 更新时同时并行更新数量,默认1
    •           - docker service create --update-parallelism 个数
    •           # 任务容器更新失败时的模式,(“pause”停止|”continue“继续),默认pause。
    •           - docker service create --update-failure-action 类型
    •           # 每次容器与容器之间的回滚时间间隔。
    •           - docker service create --rollback-monitor 20s
    •           # 回滚故障率如果小于百分比允许运行
    •           - docker service create --rollback-max-failure-ratio .数值(列“.2”为%20)
    •           # 添加网络
    •           - docker service create --network 网络名
    •           # 创建volume类型数据卷
    •           - docker service create --mount type=volume,src=volume名称,dst=容器目录
    •           # 创建bind读写目录挂载
    •           - docker service create --mount type=bind,src=宿主目录,dst=容器目录
    •           # 创建bind只读目录挂载
    •           - docker service create --mount type=bind,src=宿主目录,dst=容器目录,readonly
    •           # 创建dnsrr负载均衡模式
    •           - docker service create --endpoint-mode dnsrr 服务名
    •           # 创建docker配置文件到容器本地目录
    •           - docker service create --config source=docker配置文件,target=配置文件路径
    •           # 创建添加端口
    •           docker service create --publish 暴露端口:容器端口 服务名
    •     # 查看服务详细信息,默认json格式
    •     - docker service inspect
    •           # 查看服务信息平铺形式
    •           - docker service inspect --pretty 服务名
    •     # 查看服务内输出
    •     - docker service logs
    •     # 列出服务
    •     - docker service ls
    •     # 列出服务任务信息
    •     - docker service ps    
    •           # 查看服务启动信息
    •           - docker service ps 服务名
    •           # 过滤只运行的任务信息
    •           - docker service ps -f "desired-state=running" 服务名
    •     # 删除服务
    •     - docker service rm
    •     # 缩容扩容服务
    •     - docker service scale
    •           # 扩展服务容器副本数量
    •           - docker service scale 服务名=副本数
    •     # 更新服务相关配置
    •     - docker service update
    •           # 容器加入指令
    •           - docker service update --args “指令” 服务名
    •           # 更新服务容器版本
    •           - docker service update --image 更新版本 服务名         
    •          # 回滚服务容器版本
    •          - docker service update --rollback 回滚服务名
    •           # 添加容器网络
    •           - docker service update --network-add 网络名 服务名
    •           # 删除容器网络
    •           - docker service update --network-rm 网络名 服务名
    •           # 服务添加暴露端口
    •           - docker service update --publish-add 暴露端口:容器端口 服务名
    •           # 移除暴露端口
    •           - docker service update --publish-rm 暴露端口:容器端口 服务名
    •           # 修改负载均衡模式为dnsrr
    •           - docker service update --endpoint-mode dnsrr 服务名
    •           # 添加新的配置文件到容器内
    •           - docker service update --config-add 配置文件名称,target=/../容器内配置文件名 服务名
    ---更新配置文件----
    
    # 1创建配置文件
    docker config create nginx2_config nginx2.conf 
    # 2删除旧配置文件
    docker service update --config-rm ce_nginx_config 服务名
    # 3添加新配置文件到服务
    ocker service update --config-add src=nginx2_config,target=/etc/nginx/nginx.conf ce_nginx
    使用方法
    •           # 删除配置文件
    •           - docker service update --config-rm 配置文件名称 服务名
    •          # 强制重启服务
    •           - docker service update --force 服务名

    •    # 查看服务日志
    •    docker service ps --no-trunc {serviceName}

    ==========================下面简单梳理了一些日常运维中用到的Swarm相关命令=============================

    1) 初始化swarm manager并制定网卡地址
    # docker swarm init --advertise-addr 182.48.115.237
     
    2) 删除集群,强制退出需要加–force (针对manager节点). 到各个节点上执行退出集群的命令
    # docker node rm swarm-node1    
    # docker swarm leave --force      //manager节点退出集群,需要加--force
     
    3) 查看swarm worker的连接令牌
    # docker swarm join-token worker
     
    例如:
    [root@manager-node ~]# docker swarm init --advertise-addr 182.48.115.237
    Swarm initialized: current node (1gi8utvhu4rxy8oxar2g7h6gr) is now a manager.
      
    To add a worker to this swarm, run the following command:
      
        docker swarm join 
        --token SWMTKN-1-4roc8fx10cyfgj1w1td8m0pkyim08mve578wvl03eqcg5ll3ig-f0apd81qfdwv27rnx4a4y9jej 
        182.48.115.237:2377
      
    To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
     
    4) 加入docker swarm集群,作为worker节点
    利用上面执行结果中的命令放在其他节点上执行,则该节点加入到swarm集群中作为worker节点
    [root@node1 ~]# docker swarm join --token SWMTKN-1-4roc8fx10cyfgj1w1td8m0pkyim08mve578wvl03eqcg5ll3ig-f0apd81qfdwv27rnx4a4y9jej 182.48.115.237:2377
    This node joined a swarm as a worker.
     
    5) 查看swarm manager的连接令牌
    # docker swarm join-token manager
     
    例如:
    [root@swarm-manager-node ~]# docker swarm join-token manager
    To add a manager to this swarm, run the following command:
     
        docker swarm join 
        --token SWMTKN-1-075gaitl18z3v0p37sx7i5cmvzjjur0fbuixzp4tun0xh0cikd-0y8ttp5h0g54j10amn670w6su 
        172.16.60.220:2377
     
    6) 加入docker swarm集群,作为manager节点
    利用上面执行结果中的命令放在其他节点上执行,则该节点加入到swarm集群中作为manager管理节点,状态为reachable.
    [root@swarm-manager-node2 ~]# docker swarm join --token SWMTKN-1-075gaitl18z3v0p37sx7i5cmvzjjur0fbuixzp4tun0xh0cikd-0y8ttp5h0g54j10amn670w6su 172.16.60.220:2377
    This node joined a swarm as a manager.
     
    [root@swarm-manager-node2 ~]# docker node ls
    ID                                                HOSTNAME                  STATUS      AVAILABILITY  MANAGER STATUS
    rpbey5t1v14olke2mgtc430de     swarm-node2                 Ready        Active       
    u6gkfr4j19gq16ddyb76fxsl3       swarm-node1                 Ready        Active       
    vwbb0imil512a1le04bnkx98u *   swarm-manager-node    Ready       Active                      Leader
    ybjvaszg838upeqvvzswhq0tt       swarm-manager-node2  Ready       Active                      Reachable
     
    如果之前的leader状态的manager管理节点挂了后(假如systemctl stop docker, 然后再systemctl start docker),
    则新加入的manager节点状态由reachable变为leader, 之前的manager节点状态为unreachable.
    [root@swarm-manager-node2 ~]# docker node ls
    ID                                                HOSTNAME                  STATUS      AVAILABILITY  MANAGER STATUS
    rpbey5t1v14olke2mgtc430de     swarm-node2                 Ready        Active       
    u6gkfr4j19gq16ddyb76fxsl3       swarm-node1                 Ready        Active       
    vwbb0imil512a1le04bnkx98u *   swarm-manager-node    Ready       Active                      Unreachable
    ybjvaszg838upeqvvzswhq0tt       swarm-manager-node2  Ready       Active                      Leader
     
    7) 使旧令牌无效并生成新令牌
    # docker swarm join-token --rotate
     
    8) 查看集群中的节点
    # docker node ls
     
    9) 查看集群中节点信息
    # docker node inspect swarm-node1 --pretty
     
    10) 调度程序可以将任务分配给节点
    # docker node update --availability active swarm-node1
     
    11) 调度程序不向节点分配新任务,但是现有任务仍然保持运行
    # docker node update --availability pause swarm-node1
     
    12) 调度程序不会将新任务分配给节点。调度程序关闭任何现有任务并在可用节点上安排它们. 也就是线下节点,不参与任务分配.
    # docker node update --availability drain swarm-node1
     
    13) 添加节点标签
    # docker node update --label-add label1 --label-add bar=label2 swarm-node1
     
    14) 删除节点标签
    # docker node update --label-rm label1 swarm-node1
     
    15) 将worker节点升级为manager节点
    # docker node promote swarm-node1
     
    16) 将manager节点降级为worker节点
    # docker node demote swarm-manager-node
     
    17) 查看服务列表
    # docker service ls
     
    18) 查看服务的具体信息
    # docker service ps my-test
     
    19) 创建一个不定义name,不定义replicas的服务. (如下的nginx是docker的nginx镜像名称,不是服务名称)
    # docker service create nginx
     
    20) 创建一个指定name的服务
    # ocker service create --name my-nginx nginx
     
    21) 创建一个指定name、run cmd的服务
    # docker service create --name my-nginx nginx ping www.baidu.com
     
    22) 创建一个指定name、version、run cmd的服务
    # docker service create --name my-redis redis:3.0.6
    # docker service create --name my-nginx nginx:1.8 /bin/bash
     
    23) 创建一个指定name、port、replicas的服务
    # docker service create --name my-nginx --replicas 3 -p 80:80 nginx
     
    24) 为指定的服务更新一个端口
    # docker service update --publish-add 80:80 my-nginx
     
    25) 为指定的服务删除一个端口
    # docker service update --publish-rm 80:80 my-nginx
     
    26) 将redis:3.0.6更新至redis:3.0.7
    # docker service update --image redis:3.0.7 redis
     
    27) 配置运行环境,指定工作目录及环境变量
    # docker service create --name my-nginx --env MYVAR=myvalue --workdir /data/www --user my_user nginx ping www.baidu.com
     
    28) 创建一个my-nginx的服务
    # docker service create --name my-nginx nginx ping www.baidu.com
     
    29) 更新my-nginx服务的运行命令
    # docker service update --args "ping www.baidu.com" my-nginx
     
    30) 删除一个服务
    # docker service rm my-nginx
     
    31) 在每个群组节点上运行web服务
    # docker service create --name tomcat --mode global --publish mode=host,target=8080,published=8080 tomcat:latest
     
    32) 创建一个overlay网络
    # docker network create --driver overlay my-network
    # docker network create --driver overlay --subnet 10.10.10.0/24 --gateway 10.10.10.1 haha-network
     
    33) 创建服务并将网络添加至该服务
    # docker service create --name my-test --replicas 3 --network my-network redis
     
    34) 删除群组网络
    # docker service update --network-rm my-network my-test
     
    35) 更新群组网络
    # docker service update --network-add haha-network my-test
     
    36) 创建群组并配置cpu和内存
    # docker service create --name my_nginx --reserve-cpu 2 --reserve-memory 512m --replicas 3 nginx
     
    37) 更改所分配的cpu和内存
    # docker service update --reserve-cpu 1 --reserve-memory 256m my_nginx
     
    38) 创建服务时自定义的几个参数
    指定每次更新的容器数量
    --update-parallelism
     
    指定容器更新的间隔
    --update-delay
     
    定义容器启动后监控失败的持续时间
    --update-monitor
     
    定义容器失败的百分比
    --update-max-failure-ratio
     
    定义容器启动失败之后所执行的动作
    --update-failure-action
     
    比如:创建一个服务并运行3个副本,同步延迟10秒,10%任务失败则暂停
    # docker service create --name mysql_5_6_36 --replicas 3 --update-delay 10s --update-parallelism 1 --update-monitor 30s --update-failure-action pause --update-max-failure-ratio 0.1 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.36
     
    39) 回滚至之前版本
    # docker service update --rollback mysql
     
    自动回滚
    如果服务部署失败,则每次回滚2个任务,监控20秒,回滚可接受失败率20%
    # docker service create --name redis --replicas 6 --rollback-parallelism 2 --rollback-monitor 20s --rollback-max-failure-ratio .2 redis:latest
     
    40) 创建服务并将目录挂在至container中
    # docker service create --name mysql --publish 3306:3306 --mount type=bind,src=/data/mysql,dst=/var/lib/mysql --replicas 3 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.6.36
     
    需要注意使用bind绑定宿主机目录会带来的风险
    - 绑定的主机路径必须存在于每个集群节点上,否则会有问题;
    - 调度程序可能会在任何时候重新安排运行服务容器,如果目标节点主机变得不健康或无法访问;
    - 主机绑定数据不可移植,当你绑定安装时,不能保证你的应用程序开发方式与生产中的运行方式相同;
     
    41) 添加swarm配置
    # echo "this is a mysql config" | docker config create mysql -
     
    42) 查看配置
    # docker config ls
     
    查看配置详细信息
    # docker config inspect mysql
     
    43) 删除配置
    # docker config rm mysql
     
    44) 添加配置
    # docker service update --config-add mysql mysql
     
    45) 删除配置
    # docker service update --config-rm mysql mysql
     
    46) 添加配置
    # docker config create kevinpage index.html
     
    47) 启动容器的同时添加配置(target如果报错,就使用dst或destination)
    # docker service create --name nginx --publish 80:80 --replicas 3 --config src=kevinpage,target=/usr/share/nginx/html/index.html nginx

    引用:https://www.cnblogs.com/xiangsikai/p/9935814.html

  • 相关阅读:
    AI常用环境安装
    ubantu打开摄像头失败
    python 从ubantu环境迁移到windows环境
    mystar01 nodejs MVC 公共CSS,JS设置
    Golang数据类型之结构体-上篇
    Golang基准测试
    浅谈Prometheus的数据存储
    Golang单元测试
    Jenkins连接k8s的多种姿势
    Golang数据类型之指针
  • 原文地址:https://www.cnblogs.com/caoweixiong/p/12355736.html
Copyright © 2020-2023  润新知