最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Docker Swarm概念与基本用法

    正文概述 转载于:掘金(PHP开源社区)   2021-03-23   730

    Docker Swarm是Docker公司开发的容器集群管理服务。从1.12.0版本开始,已经是Docker安装后自带的一部分(捆绑软件)了,又称为Swarm Mode,无需额外安装。
    Docker Swarm概念与基本用法与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端口,都可自动代理到真正的服务。大致原理如下图所示。
    Docker Swarm概念与基本用法
    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来手工创建。

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

    docker stack rm $stack_name
    

    更新已运行服务的镜像

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

    起源地下载网 » Docker Swarm概念与基本用法

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元