Docker 多台宿主机多应用部署

实验目标

  先看一下实验目标是什么样的:

多台连接

  这里存在两台宿主机,55.955.11,把连个 Container 放在了两台宿主机上,这种方式该怎么进行通信呢,这里就用到了原来没有说到过的 Docker 的另一种网络方式:overlay

overlay

  我们在网络中进行通信,通常是需要在网络层(OSI 参考模型)携带自己的 ip 以及目标地址的 ip,如下:

网络模型

  按照实验环境的情况来说就是,从 10.211.55.9/24 发送信息到 10.211.55.11/24 时,会在网络层带有两个标识,src:10.211.55.9/24tar:10.211.55.11/24,这样就可以找到目的地址并且正确得到响应结果(实际情况更为复杂,这里只是便于理解)。这里说的都是针对两台宿主机进行通信的情况,再深入到宿主机里面的 Container,会发现他们的 ip 为:172.17.0.2/16172.17.0.3/16,假设这里的 172.17.0.3/16172.17.0.2/16 发起了通信,src:172.17.0.3/16tar:172.17.0.2/16,能找到吗?答案是肯定找不到的,因为首先要经过接口 10.211.55.9/24 做一步 NAT 地址转换,这里即使不做地址转换也是找不到的,因为在 10.211.55.9/24 所在的网段中并没有 172.17.0.2/16 ip 的信息,所以最终会以失败告终。

  overlay 的原理即使在网络层之上的数据传输层里面包装一些信息,这些信息就是例如:src:172.17.0.3/16tar:172.17.0.2/16 的信息,宿主机之间的路由还是按照:src:10.211.55.9/24tar:10.211.55.11/24 进行,等连接到宿主机 10.211.55.11/24 之后在进行解析数据进行进一步的路由。

开始试验

分布式存储系统

  这里需要在涉及通信的虚拟机上面装上分布式的存储系统,这里使用的事 etcd,etcd是一个开源的、分布式的键值对数据存储系统,提供共享配置、服务的注册和发现。为什么需要这么一个分布式存储系统呢?比如我们在 宿主机1 上启动了一个 Container,它的 ip 是 172.17.0.2/16,然后再在 宿主机2 上面启动一个 Container,那么它的 ip 亦有可能是 172.17.0.2/16,这样的话,在后面通信中就会出错。所以这里需要一个统一的配置服务存储系统,启动之前都先去存储系统问一下,看是不是已经被使用了。

安装

wget https://github.com/coreos/etcd/releases/download/v3.0.12/etcd-v3.0.12-linux-amd64.tar.gz
tar -xzvf etcd-v3.0.12-linux-amd64.tar.gz
cd etcd-v3.0.12-linux-amd64
nohup ./etcd --name docker-node1 --initial-advertise-peer-urls http://10.211.55.9:2380 \
--listen-peer-urls http://10.211.55.9:2380 \
--listen-client-urls http://10.211.55.9:2379,http://127.0.0.1:2379 \
--advertise-client-urls http://10.211.55.9:2379 \
--initial-cluster-token etcd-cluster \
--initial-cluster docker-node1=http://10.211.55.9:2380,docker-node2=http://10.211.55.11:2380 \
--initial-cluster-state new&

  每台宿主机都要有

  使用以下命令查看分布式存储集群情况:

[root@Docker1 etcd-v3.0.12-linux-amd64]# ./etcdctl cluster-health
member bd93686a68a54c2d is healthy: got healthy result from http://10.211.55.11:2379
member e5230093897f552c is healthy: got healthy result from http://10.211.55.9:2379
cluster is healthy

重启 Docker

  这里先手动停止 Docker 运行,手动启动并指定使用 etcd,如下:

systemctl stop docker
/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store=etcd://10.211.55.9:2379 --cluster-advertise=10.211.55.9:2375&

使用 overlay network

  新增一个 overlay network,在 10.211.55.11/24 宿主机上操作。

[root@Docker2 etcd-v3.0.12-linux-amd64]# sudo docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
275d6833838e        bridge              bridge              local
2596b17410cc        host                host                local
3accb13c9e4c        none                null                local
[root@Docker2 etcd-v3.0.12-linux-amd64]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
275d6833838e        bridge              bridge              local
2596b17410cc        host                host                local
3accb13c9e4c        none                null                local
[root@Docker2 etcd-v3.0.12-linux-amd64]# docker network create -d overlay my-overlay
7fdd419bcd691c1872f992ee18e73b21d24f0556cb0f7103ba35a907d6aa3477
[root@Docker2 etcd-v3.0.12-linux-amd64]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
275d6833838e        bridge              bridge              local
2596b17410cc        host                host                local
7fdd419bcd69        my-overlay          overlay             global
3accb13c9e4c        none                null                local
[root@Docker2 etcd-v3.0.12-linux-amd64]# docker network inspect my-overlay
[
    {
        "Name": "my-overlay",
        "Id": "7fdd419bcd691c1872f992ee18e73b21d24f0556cb0f7103ba35a907d6aa3477",
        "Created": "2018-11-09T23:35:31.733533818+08:00",
        "Scope": "global",
        "Driver": "overlay",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "10.0.0.0/24",
                    "Gateway": "10.0.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

  这里去 10.211.55.9/24 宿主机上会发现,已经创建好了。

[root@Docker1 etcd-v3.0.12-linux-amd64]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
1ce59752dc62        bridge              bridge              local
2596b17410cc        host                host                local
7fdd419bcd69        my-overlay          overlay             global
3accb13c9e4c        none                null                local

  通过 etcd 的键值对可以查看到 Docker 的信息

root@Docker1 etcd-v3.0.12-linux-amd64]# ./etcdctl ls /docker
/docker/network
/docker/nodes
[root@Docker1 etcd-v3.0.12-linux-amd64]# ./etcdctl ls /docker
/docker/network
/docker/nodes
[root@Docker1 etcd-v3.0.12-linux-amd64]# ./etcdctl ls /docker/nodes
/docker/nodes/10.211.55.9:2375
/docker/nodes/10.211.55.11:2375
[root@Docker1 etcd-v3.0.12-linux-amd64]# ./etcdctl ls /docker/network/v1.0/network
/docker/network/v1.0/network/7fdd419bcd691c1872f992ee18e73b21d24f0556cb0f7103ba35a907d6aa3477

启动 Container

  先把 10.211.55.11/24 上的 Redis 启动并指定到网络 my-overlay

docker run -it --name redis-test --rm --network my-overlay redis

  启动上一节中的 spring-boot-redis-demo 并指定到网络 my-overlay

docker run -d -it --name web1 --network my-overlay spring-boot-redis-demo:0.1

  访问测试:

测试

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Docker容器宿主机的销售是指销售用于部署和运行Docker容器的物理或虚拟服务器。随着Docker技术的发展和普及,容器化应用的需求不断增加,使得Docker容器宿主机的销售成为一个热门领域。 买家可以通过各种途径购买Docker容器宿主机。他们可以选择购买物理服务器,将其配置成Docker宿主机;或者选择使用云服务商提供的虚拟私有云(VPC)实例作为Docker容器宿主机。根据购买者的需求和预算,他们可以选择不同规格和配置的宿主机。一些供应商还提供了成套的容器化解决方案,包括硬件设备、软件平台和技术支持等。 对于直接购买物理服务器的买家来说,他们需要选择适合容器化部署的服务器。这些服务器通常具有高性能的CPU和内存,支持虚拟化技术,如Intel VT或AMD-V。此外,服务器上的存储系统也需要具备高速访问和可扩展性,以满足容器化应用对存储的需求。购买者还需要考虑容器化应用的规模和负载特性,以确定适合的服务器数量和规格。 云服务商提供的虚拟私有云实例通常更加灵活和易于管理。购买者可以根据需求选择不同规格和配置的虚拟机实例。云服务商还提供了自动化的容器编排和管理工具,如AWS的Elastic Container Service(ECS)或谷歌的Kubernetes,使得容器化应用部署和管理更加方便。 总之,Docker容器宿主机的销售是一个与容器化应用需求紧密相关的市场。购买者可以根据自己的需求选择合适的宿主机,无论是购买物理服务器还是使用云服务商提供的虚拟机实例。这些宿主机可以帮助他们快速部署和运行容器化应用,提高应用的灵活性和可扩展性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值