详解Docker Swarm概念与用法

 更新时间:2020年09月03日 11:43:34   作者:匿蟒  
这篇文章主要介绍了Docker Swarm概念与用法,帮助大家更好的理解和使用docker容器,感兴趣的朋友可以了解下

Docker Swarm是Docker公司开发的容器集群管理服务。从1.12.0版本开始,已经是Docker安装后自带的一部分(捆绑软件)了,又称为Swarm Mode,无需额外安装。

与Kubernetes相比,Docker Swarm是一个简单的软件,似乎不堪大用。但是它与docker-compose兼容的优点,可以弥补一切。对于没有集群使用经验的小白,用Docker Swarm起步,是一个很好的选择。

概念

Docker Swarm,主要包含以下概念:

  • Swarm
  • Node
  • Stack
  • Service
  • Task
  • Load balancing

Swarm本身就是“群”的意思,人群、蜂群。这里就是指计算机集群(cluster)在用Docker连接后的状态。docker swarm命令可以创建、加入、离开一个集群。

Node就是计算机节点,也可以认为是一个Docker节点。Node分为两类:Manager和Worker。一个Swarm至少要有一个Manager,部分管理命令只有在Manager上才能使用。两类Node都可以运行Service,但只有Manager上才能执行运行命令。比如,在Manager才能使用docker node命令可以查看、配置、删除Node。

Stack是一组Service,和docker-compose类似。默认情况下,一个Stack共用一个Network,相互可访问,与其它Stack网络隔绝。这个概念只是为了编排的方便。docker stack命令可以方便地操作一个Stack,而不用一个一个地操作Service。

Service是一类容器。对用户来说,Service就是与Swarm交互的最核心内容。Service有两种运行模式,一是replicated,指定一个Service运行容器的数量;二是global,在所有符合运行条件的Node上,都运行一个这类容器。docker service命令可以操作Swarm中的Service。

Task就是指运行一个容器的任务,是Swarm执行命令的最小单元。要成功运行一个Service,需要执行一个或多个Task(取决于一个Service的容器数量),确保每一个容器都顺利启动。通常用户操作的是Service,而非Task。

Load balancing即负载均衡,也包含反向代理。Swarm使用的是Ingress形式的负载均衡,即访问每个节点的某个Published端口,都可自动代理到真正的服务。大致原理如下图所示。

Replicated Mode

services: 
 some-serivce: 
  ... 
  deploy: 
   mode: replicated 
   replicas: 3 

默认情况下,mode就是replicated,所以这行可以省略。默认replicas数目为1,代表这个Service只启动1个容器。这个模式,可以按需启动多个服务,Swarm会自动调节,有时一个Node会启动多个容器。

Global Mode

services: 
 some-serivce: 
  ... 
  deploy: 
   mode: global 
   placement: 
    ... 

所有可部署的Node,都部署一个。通过placement,可以限定满足条件的Node,而避免在不合适的Node进行部署。

操作

这里列出一些常用的具体操作。

创建第一个Node

docker swarm init --advertise-addr $IP 

$IP是当前Node的外部可访问IP,便于其它Node寻址。

这样,一个Swarm就被初始化完成了,它仅有一个Manager节点。

添加新的Node到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-2zspelk468gb6wgw5adea4wlbw4kfy3q1uhr86zpafl9m5a3ho-ezs4fylj526e801b3cl0pojr5 10.174.28.52:2377 
$ docker swarm join-token worker 
To add a worker to this swarm, run the following command: 
  docker swarm join --token SWMTKN-1-2zspelk468gb6wgw5adea4wlbw4kfy3q1uhr86zpafl9m5a3ho-164iqklrfv8o3t55g088hylyk 10.174.28.52:2377

在一个未加入任何Swarm的机器上,执行以上显示的命令docker swarm join --token ..., 即可成为这个Swarm的Manage或Worker节点。

设置节点Label

在Manager节点,可以对任意节点设置标签:

docker node update $node_name --label-add main=true 

$node_name就是要设置节点的ID或HOSTNAME。Label是键值对形式,main=true中的main就是键、true就是值。

设置了Label以后,在Compose文件中就可以用placement中的constraints来对可用节点作出限制。

services: 
 some-serivce: 
  ... 
  deploy: 
   placement: 
    constraints: 
     - node.labels.main == true 
   ... 

以上配置,让some-service仅在Label被设置为main=true的节点,才能使用。

启动、停止服务

docker stack deploy $stack_name -c docker-compose.yaml -c other.yaml ... 

$stack_name是Stack名称。可以用-c指定多个docker-compose文件,也可在相同Stack下分批次deploy多个文件。这些YAML文件的写法,和原先用docker-compose命令执行的没有本质区别,只是多加了以下独特配置,并且会忽略一些Swarm场景下不支持的配置。

推荐使用docker-compose文件来编排Stack,而非直接用docker service create来手工创建。详细配置项,可参考《Compose file version 3 reference | Docker Documentation》。

需要停止Stack的所有服务时,可以执行以下命令。

docker stack rm $stack_name 

更新已运行服务的镜像

docker service update --image $image:$tag $service_name 

以上就是详解Docker Swarm概念与用法的详细内容,更多关于Docker Swarm的资料请关注脚本之家其它相关文章!

相关文章

  • Docker安装RabbitMQ并安装延时队列插件

    Docker安装RabbitMQ并安装延时队列插件

    本文主要介绍了Docker安装RabbitMQ并安装延时队列插件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • 详解Docker 修改已有镜像(commit )

    详解Docker 修改已有镜像(commit )

    本篇文章主要介绍了详解Docker 修改已有镜像(commit ),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Docker Kill/Pause/Unpause命令使用与区别小结

    Docker Kill/Pause/Unpause命令使用与区别小结

    本文详细介绍了Docker中的三个重要命令,kill、pause和unpause,这些命令在管理和操作运行中的容器时非常有用,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Docker图文详解

    Docker图文详解

    今天小编就为大家分享一篇关于Docker图文详解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-01-01
  • Docker系列compose ymal文件解析学习

    Docker系列compose ymal文件解析学习

    这篇文章主要介绍了Docker系列之compose ymal文件解析学习,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • docker和docker-compose一键安装教程(支持在线和离线)

    docker和docker-compose一键安装教程(支持在线和离线)

    这篇文章主要介绍了docker和docker-compose一键安装(支持在线和离线),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • docker-compose安装redis的方法步骤

    docker-compose安装redis的方法步骤

    本文主要介绍了docker-compose安装redis的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • Dockerfile文件详细介绍

    Dockerfile文件详细介绍

    Dockerfile 是一个文本文件,里面包含组装新镜像时用到的基础镜像和各种指令。使用dockerfile 文件来定义镜像,然后运行镜像,启动容器。本文详细介绍了Dockerfile文件,感兴趣的小伙伴可以参考一下
    2023-04-04
  • 查看docker中运行的JVM参数问题及解决方法

    查看docker中运行的JVM参数问题及解决方法

    这篇文章主要介绍了查看docker中运行的JVM参数,方法一使用的是jcmd命令,方法二是jinfo命令,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2022-04-04
  • docker运行nginx容器并挂载数据卷

    docker运行nginx容器并挂载数据卷

    本文主要介绍了docker运行nginx容器,并通过挂载目录将容器与宿主机的数据进行共享和统一管理,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03

最新评论