docker(九)—docker swarm使用

1:什么是Docker Swarm

   Swarm是Docker公司推出的用来管理docker集群的平台,Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是,Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合

2:Docker Swarm的几个概念

     2.1:Swarm

           是用来管理docker机器集群的管理和编排,可以在docker初始化时启动swarm模式或者加入已存在的swarm

      2.2:Node:

          一个节点是docker引擎集群的一个实例。您还可以将其视为Docker节点。您可以在单个物理计算机或云服务器上运行一个或多个节点,
但生产群集部署通常包括分布在多个物理和云计算机上的Docker节点。
要将应用程序部署到swarm,请将服务定义提交给 管理器节点。管理器节点将称为任务的工作单元分派 给工作节点。
Manager节点还执行维护所需群集状态所需的编排和集群管理功能。Manager节点选择单个领导者来执行编排任务。
工作节点接收并执行从管理器节点分派的任务。默认情况下,管理器节点还将服务作为工作节点运行,
但您可以将它们配置为仅运行管理器任务并且是仅管理器节点。
代理程序在每个工作程序节点上运行,并报告分配给它的任务。工作节点向管理器节点通知其分配的任务的当前状态,
以便管理器可以维持每个工作者的期望状态。

       2.3:Service

             一个服务是任务的定义,管理机或工作节点上执行。它是群体系统的中心结构,是用户与群体交互的主要根源。创建服务时,你需要指定要使用的容器镜像。

     2.4:Task
            任务是在docekr容器中执行的命令,Manager节点根据指定数量的任务副本分配任务给worker节点.

 3:集群的创建

      3.1:准备3台虚拟机

               node1:192.168.195.10 master

               node2:192.168.195.11 worker

               node3:192.168.195.12 worker

              以上3台机器实现一主二从的集群模式

    3.2:关闭三台虚拟机的防火墙或者开放 

             关闭三台机器上的防火墙。如果开启防火墙,则需要在所有节点的防火墙上依次放行2377/tcp(管理端口)、7946/udp(节点间通信端口)、4789/udp(overlay 网络端口)端口。

     关闭防火墙的命令:

systemctl disable firewalld.service
systemctl stop firewalld.service

    3.3:在192.168.195.10 虚拟机上使用如下命令创建集群

docker swarm init --advertise-addr 192.168.195.10

  执行完成后得到如下图所示的加入集群的命令行 分别 在192.168.195.11,192.168.195.12

  机器上执行如图所示红线部分的命令 即可加入集群

docker(九)—docker swarm使用

 4:通过docker node ls 来查看集群是否成功 如出现如下图所示则表示创建集群成功

docker(九)—docker swarm使用

 5:docker-swarm 常用命令

  5.1: 初始化集群环境 

         docker swarm init --advertise-addr 192.168.31.43

  5.2:这里的leave就是在集群中删除节点,-f参数强制删除,执行完在重新执行O

         docker swarm leave -f

  5.3:查看集群的相关信息

         docker info

  5.4:上面的命令是查看集群中的机器(注意上面node ID旁边那个*号表示现在连接到这个节点上)

         docker node ls

  5.5:加入集群节点 作为工作节点

        docker swarm join --token SWMTKN-1-2lefzq18zohy9yr1vskutf1sfb2a590xz9d0mjj2m15zu9eprw-2938j5f50t35ycut0vbj2sx0s 192.168.195.10:2377

   5.6:查看加入集群节点的ml

         docker swarm join-token manager

   5.7:上线某个节点

         docker node update --availability active node1

   5.8:active 和drain状态的区别

         swarm集群中node的availability状态可以为 active或者drain,其中:
active状态下,node可以接受来自manager节点的任务分派;
drain状态下,node节点会结束task,且不再接受来自manager节点的任务分派(也就是下线节点)

    6:部署服务(部署nginx)

          6.1:创建网络服务命令

docker network create -d overlay nginx_net

                   注 :在docker-swarm的模式下是基于overlay的网络模式组成的节点互通

                            如果不创建网络,则docker-swarm会使用自己默认的overlay网络模式

          6.2:查看网络命令:          

# 查看网络
docker network ls

# 查看某个网络信息
docker network ls | grep nginx_net

          6.3:部署服务命令:

# 部署服务 --replicas 1 表示部署一个nginx实例
docker service create --replicas 1 --network nginx_net --name my_nginx -p 80:80 nginx

# 查看正在运行服务的列表
docker service ls

# 查询Swarm中服务的信息
docker service inspect --pretty my_nginx

# 查询到哪个节点正在运行该服务。如下该容器被调度到manager-node节点上启动了
docker service ps my_nginx

# 修改服务运行参数命令
docker service update --replicas 3 my_nginx

# 升级镜像
docker service update --image nginx:new my_nginx

# 删除镜像
docker service rm my_nginx

# 目录挂载 创建挂载目录
docker volume create --name testvolume

# 查看创建挂在卷
docker volume ls

# 查看volume详情
docker volume inspect testvolume

7:docker-swarm 多服务

     3个服务(tomcat服务,nginx服务,web应用)三个服务

     1)创建工作目录

           mkdir /home/docker

      2)进入到docker目录下创建docker-compose.yml

           vi  docker-compose.yml

      内容如下:

version: "3.8"
services:
  nginx:
    image: nginx
    ports:
      - 8888:80
    deploy:
      mode: replicated
      replocas: 3
  tomcat:
     image: tomcat:8
     ports:
       8080:8080
     deploy:
       mode: replicated
       replocas: 2      
         

通过这个yml文件部署服务

docker stack deploy -c docker-compose.yml deploy_deamon

执行完上面结果如下所示:

Creating network deploy_deamon_default

Creating service deploy_deamon_nginx

Creating service deploy_deamon_tomcat

    
                  

                  

上一篇:Docker swarm 常用命令


下一篇:A Modified Particle Swarm Optimizer