天天看点

初探docker swarm

了解Swarm集群

集群是一组运行Docker并加入集群的计算机。在此之后,您继续运行您习惯使用的Docker命令,但现在它们由集群管理器在集群上执行。群中的机器可以是物理的或虚拟的。加入群组后,它们被称为节点。

Swarm管理器可以使用多种策略来运行容器,例如“emptiest node” - 它使用容器填充利用率最低的机器。或“global”确保每台机器只获得指定容器的一个实例。您指示swarm管理器在Compose文件中使用这些策略,就像您已经使用的那样。

集群管理器是群中唯一可以执行命令的机器,或授权其他机器作为工作者加入集群。工人只是在那里提供能力,并且没有权力告诉任何其他机器它能做什么和不能做什么。

到目前为止,您一直在本地计算机上以单主机模式使用Docker。但是Docker也可以切换到swarm模式,这就是使用集群的能力。立即启用集群模式使当前计算机成为集群管理器。从那时起,Docker就会运行您在管理的swarm上执行的命令,而不仅仅是在当前机器上。

Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。

首先准备docker-composer.yml文件,例如:

version: "3"

services:

  web:

    image: 192.168.127.131:5000/friendlyhello

    deploy:

      replicas: 5

      resources:

        limits:

          cpus: "0.1"

          memory: 50M

      restart_policy:

        condition: on-failure

    ports:

      - "4000:80"

    networks:

      - webnet

networks:

  webnet:

再初始化swarm。 

[[email protected] docker]#docker swarm init

Swarm initialized: current node (xbw0ufz8ld238yvfyvynif4ho) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-3p4oxa51gl3n6fvgwcnsbmoh8l3brcepfclamg987mdkmxre5b-ch4r99ocogrvwazafnhiipzd5 192.168.127.131:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

根据提示,在需要加入这个swarm集群的节点上运行下面命令即可加入:

docker swarm join --token SWMTKN-1-3p4oxa51gl3n6fvgwcnsbmoh8l3brcepfclamg987mdkmxre5b-ch4r99ocogrvwazafnhiipzd5 192.168.127.131:2377

现在使用docker-compose.yml作为模板来启动app:

docker stack deploy -c docker-compose.yml getstartedlab

 查看服务列表:

docker service ls

查找Web服务的输出,以您的应用名称为前缀。 如果您将其命名为与此示例中显示的相同,则名称为getstartedlab_web。 还列出了服务ID,以及副本数,映像名称和公开端口。

在服务中运行的单个容器称为任务。 任务被赋予以数字递增的唯一ID,最多为您在docker-compose.yml中定义的副本数。 列出您的服务任务:

[[email protected] docker]#docker service ps getstartedlab_web

ID                  NAME                  IMAGE                                       NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS

61fkij121y3c        getstartedlab_web.1   192.168.127.131:5000/friendlyhello:latest   192.168.127.132     Running             Running 16 minutes ago                       

gfdhx4yi0dwf        getstartedlab_web.2   192.168.127.131:5000/friendlyhello:latest   192.168.127.133     Running             Running 16 minutes ago                       

21klyrcbbhfy        getstartedlab_web.3   192.168.127.131:5000/friendlyhello:latest   192.168.127.131     Running             Running 16 minutes ago                       

fmpm946ht130        getstartedlab_web.4   192.168.127.131:5000/friendlyhello:latest   192.168.127.132     Running             Running 16 minutes ago                       

u8dpt9vq637p        getstartedlab_web.5   192.168.127.131:5000/friendlyhello:latest   192.168.127.133     Running             Running 16 minutes ago 

伸缩应用程序

您可以通过更改docker-compose.yml中的副本值来保存更改,并重新运行docker stack deploy命令来伸缩应用程序;Docker就地更新,无需首先拆除堆栈或杀死任何容器。 

docker stack deploy -c docker-compose.yml getstartedlab

关闭刚刚创建的app服务

docker stack rm getstartedlab

集群节点可以用docker swarm leave脱离集群

docker swarm leave --force

总结:

docker stack ls                                            # List stacks or apps

docker stack deploy -c <composefile> <appname>  # Run the specified Compose file

docker service ls                 # List running services associated with an app

docker service ps <service>                  # List tasks associated with an app

docker inspect <task or container>                   # Inspect task or container

docker container ls -q                                      # List container IDs

docker stack rm <appname>                             # Tear down an application

docker swarm leave --force      # Take down a single node swarm from the manager

继续阅读