基于swarm实现跨主机docker通信

本文详细介绍了如何使用Docker Swarm创建和管理集群,包括节点管理、服务部署、任务调度以及如何在Swarm中自定义网络实现跨主机通信。通过创建自定义的attachable网络并分配容器,成功实现在不同主机间的通信。
摘要由CSDN通过智能技术生成

概述

使用Docker的swarm模式,需要安装Docker的1.12.0或者更新的版本。

swarm的特点包括:

  1. 集成进Docker引擎;
  2. 去中心化设计;
  3. 可缩放扩展;
  4. 状态监控;
  5. 跨主机通信;
  6. 负载均衡;
  7. 安全;
  8. 滚动升级。

基本概念

节点

运行Docker的主机可以主动初始化一个swarm集群,或者加入一个已经存在的swarm集群,这样这个运行Docker的主机就成为一个swarm集群的节点(node)。

节点可以分为管理节点和工作节点:

  1. 管理节点:用于swarm集群管理的节点,一个swarm集群可以有多个管理节点,但是只有一个管理节点可以成为leader,leader通过raft协议实现。
  2. 工作节点:任务执行的节点,管理节点将服务(service)下发至工作节点执行。管理节点默认也可以为工作节点。

在这里插入图片描述

服务和任务

任务(task)是swarm中最小的调度单位,目前来说是单一的容器。

服务(services)是指一组任务的集合,服务定义了任务的属性。服务包括两种模式:

  1. replicated services,按照一定的规则在各个工作节点上运行指定数量的任务;
  2. global services,每个工作节点上运行一个任务。

在这里插入图片描述

create a swarm

创建一个新的swarm:

[root@jamza_vm_master_litepaas ~]# docker swarm init --advertise-addr 192.168.83.83
Swarm initialized: current node (8g9b2wnb82wno5gkx60fdli9h) is now a manager.

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

    docker swarm join \
    --token SWMTKN-1-5a8t5fz2rqel51bdvvcjq3oemeg1bcdk1ry85f27abft4lomyo-cn9kucfudl1rlqf4wrqrx00gh \
    192.168.83.83:2377

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

[root@jamza_vm_master_litepaas ~]#

指令中的–advertise-addr选项配置管理节点的公开IP地址,在swarm中的其他节点需要能够访问到该地址。

通过指令docker info来查看当前swarm的状态:

[root@jamza_vm_master_litepaas ~]# docker info
......
Swarm: active
 NodeID: 8g9b2wnb82wno5gkx60fdli9h
 Is Manager: true
 ClusterID: 29eo1av9nwk38a4dsx8dg6vao
 Managers: 1
 Nodes: 1
......

查看node节点信息的指令:

[root@jamza_vm_master_litepaas ~]# docker node ls
ID                           HOSTNAME                  STATUS  AVAILABILITY  MANAGER STATUS
8g9b2wnb82wno5gkx60fdli9h *  jamza_vm_master_litepaas  Ready   Active        Leader
[root@jamza_vm_master_litepaas ~]#

Add nodes to the swarm

在工作节点上运行docker swarm init的输出指令,将工作节点加入到之前创建的的swarm。可以在管理节点执行以下的命令,以查看加入指令的内容:

[root@jamza_vm_master_litepaas ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-5a8t5fz2rqel51bdvvcjq3oemeg1bcdk1ry85f27abft4lomyo-cn9kucfudl1rlqf4wrqrx00gh \
    192.168.83.83:2377

[root@jamza_vm_master_litepaas ~]#
[root@jamza_vm_master_litepaas ~]# docker swarm join-token manager
To add a manager to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-5a8t5fz2rqel51bdvvcjq3oemeg1bcdk1ry85f27abft4lomyo-c5d1vz4lkhwvkiqr5uii6ezlo \
    192.168.83.83:2377

[root@jamza_vm_master_litepaas ~]#

在工作节点执行docker swarm join指令,将工作节点加入到swarm中:

[root@jamza_vm_slave_litepaas ~]#  docker swarm join --token SWMTKN-1-5a8t5fz2rqel51bdvvcjq3oemeg1bcdk1ry85f27abft4lomyo-cn9kucfudl1rlqf4wrqrx00gh 192.168.83.83:237
This node joined a swarm as a worker.
[root@jamza_vm_slave_litepaas ~]#

[root@jamza_vm_lp0_litepaas ~]# docker swarm join     --token SWMTKN-1-5a8t5fz2rqel51bdvvcjq3oemeg1bcdk1ry85f27abft4lomyo-cn9kucfudl1rlqf4wrqrx00gh 192.168.83.83:2377
This node joined a swarm as a worker.
[root@jamza_vm_lp0_litepaas ~]#

在管理节点执行docker node ls命令,查看当前swarm集群中的节点信息:

[root@jamza_vm_master_litepaas ~]# docker node ls
ID                           HOSTNAME                  STATUS  AVAILABILITY  MANAGER STATUS
223cec79gjydf7pxqts9gn098    jamza_vm_lp0_litepaas     Ready   Active
3d1i3ammfohefre5fvtma90en    jamza_vm_slave_litepaas   Ready   Active
8g9b2wnb82wno5gkx60fdli9h *  jamza_vm_master_litepaas  Ready   Active        Leader
[root@jamza_vm_master_litepaas ~]#

Deploy a service to the swarm

部署服务到swarm中,使用命令docker service来在管理节点进行部署:

[root@jamza_vm_master_litepaas ~]# docker service create --replicas 1 --name test busybox/x86_64:latest ping www.zte.com.cn
9oa3y95hyi4n82sypqyx414wx
[root@jamza_vm_master_litepaas ~]#

命令docker service ls来查看当前运行的服务列表:

[root@jamza_vm_master_litepaas ~]# docker service ls
ID            NAME  REPLICAS  IMAGE                  COMMAND
9oa3y95hyi4n  test  1/1       busybox/x86_64:latest  ping www.zte.com.cn
[root@jamza_vm_master_litepaas ~]#

Inspect a service on the swarm

运行命令docker service inspect --pretty <SERVICE-ID>以易读的方式显示服务的细节信息:

[root@jamza_vm_master_litepaas ~]# docker service inspect --pretty test
ID:             9oa3y95hyi4n82sypqyx414wx
Name:           test
Mode:           Replicated
 Replicas:      1
Placement:
UpdateConfig:
 Parallelism:   1
 On failure:    pause
ContainerSpec:
 Image:         busybox/x86_64:latest
 Args:          ping www.zte.com.cn
Resources:
[root@jamza_vm_master_litepaas ~]#

命令若没有–pretty选项,则命令输出json格式的服务细节数据:

[root@jamza_vm_master_litepaas ~]# docker service inspect test
[
    {
   
        "ID"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值