跨主机通信

JOIN容器:container(共享网络协议栈)

容器和容器之间。

[[email protected] ~]# docker pull busybox

[[email protected] ~]# docker run -itd --name web5 busybox:latest

把网卡指定web5:

[[email protected] ~]# docker run -itd --name web6 --network container:web5 busybox:latest

Web6:

[[email protected] ~]# docker exec -it web6 /bin/sh

/ # echo 123456 > /tmp/index.html

/ # httpd -h /tmp/

Web5:

[[email protected] ~]# docker exec -it web5 /bin/sh

/ # wget -O - -q 127.0.0.1

这时会发现,两个容器的ip地址一样。

PS:这种方法的使用场景:由于这种网络的特殊性,一般在运行同一个服务,并且合格服务需要做监控,以及日志收集,或者网络监控的时候,可以选择这种网络。

docker的跨主机网络解决方案

Overlay的解决方案(覆盖型解决方案)

实验环境:

Docker01:1.10

Docker02:1.20

Docker03:1.30

暂时不考虑防火墙和selinux安全问题。

将3台Dockerhost防火墙和selinux全部关闭,并且分别更改主机名称

[[email protected] ~]# hostnamectl set-hostname docker01

[[email protected] ~]# su -

[[email protected] ~]# systemctl stop firewalld

[[email protected] ~]# systemctl disable firewalld

[[email protected] ~]# setenforce 0

Docker01:

[[email protected] ~]# rz
导入镜像包:


[[email protected] ~]# docker load -i myprogrium-consul.tar

-h:hostname,主机名 -server -bootstrap:集群

启动consul服务:consul:分布式,数据库,数据中心,集群的方式存储东西

[[email protected] ~]#docker run -d -p 8500:8500 -h consul --name consul --restart always progrium/consul -server -bootstrap

报错重启服务:

[[email protected] ~]# systemctl restart docker

PS:容器生产之后,我们可以通过浏览器访问consul服务,验证consul服务是否正常。访问dockerHost加映射端口。

访问:

http://192.168.1.10:8500/

修改Docker02和Docker03的配置文件

Docker02:

[[email protected] ~]# vim /usr/lib/systemd/system/docker.service

13行:

ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 --cluster-store=consul://192.168.1.10:8500 --cluster-advertise=ens33:2376

[[email protected] ~]# systemctl daemon-reload

[[email protected] ~]# systemctl restart docker

Docker03同上

PS:返回浏览器consul服务界面没找到KEY/VALUE----->DOCKER------>NODES会看到刚刚加入的docker02的信息。

在docker02上创建自定义网络: global(全局)

在docker02上创建的网络,我们可以看到它的SCOPE定义的是global(全局),意味着加入到consul这个服务的docker服务,都可以看到我们自定义的网络。

同理如果是用此网络创建的容器,会有两张网卡。

默认这张网卡的网段是10.0.0.0网段,如果想要docker01也可以看到这个网络,那么也只需在docker01的配置文件添加相应内容即可。

同理,因为是自定义网络,符合组定义网络的特性,可以直接通过docker容器的名称相互通信,当然也可以在自定义网络的时候,指定它的网段,那么是用此网络

docker network create -d overlay ov_net1

在docker03上查看网卡:

在docker01上修改配置文件,重启docker查看:

[[email protected] ~]# vim /usr/lib/systemd/system/docker.service

13行:

ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -H tcp://0.0.0.0:2376 --cluster-store=consul://192.168.1.10:8500 --cluster-advertise=ens33:2376

[[email protected] ~]# systemctl daemon-reload

[[email protected] ~]# systemctl restart docker

[[email protected] ~]# docker network ls

Docker01:

[[email protected] ~]# docker run -itd --name t1 --network ov_net1 busybox

[[email protected] ~]# docker exec -it t1 /bin/sh

/ # ip a

Docker02:

[[email protected] ~]# docker run -itd --name t2 --network ov_net1 busybox

[[email protected] ~]# docker exec -it t1 /bin/sh

/ # ip a

Docker03:

[[email protected] ~]# docker run -itd --name t3 --network ov_net1 busybox

[[email protected] ~]# docker exec -it t1 /bin/sh

/ # ip a

原文地址:https://blog.51cto.com/13997536/2460487

时间: 2024-10-10 07:53:37

跨主机通信的相关文章

Docker跨主机通信:桥接方式和路由方式

1.直接路由 通过在主机中添加静态路由来实现跨主机通信.如果有两台主机host1和host2,两主机上的docker容器是两个独立的二层网络,将con1发往con2的数据流先转发到主机host2上,再由host2转发到其上的docker容器中,反之亦然. 由于使用容器的IP进行路由,就需要避免不同主机上的docker容器使用相同冲突的IP,所有应该为不同的主机分配不同的IP子网. #主机A上:192.168.187.143,主机B:192.168.187.144 #S1:添加网卡docker0,

overlay 如何实现跨主机通信?- 每天5分钟玩转 Docker 容器技术(52)

上一节我们在 host1 中运行了容器 bbox1,今天将详细讨论 overlay 网络跨主机通信的原理. 在 host2 中运行容器 bbox2: bbox2 IP 为 10.0.0.3,可以直接 ping bbox1: 可见 overlay 网络中的容器可以直接通信,同时 docker 也实现了 DNS 服务. 下面我们讨论一下 overlay 网络的具体实现: docker 会为每个 overlay 网络创建一个独立的 network namespace,其中会有一个 linux brid

Docker跨主机通信网络

Docker跨主机通信网络 跨主机网络方案包括: docker原生的 overlay 和 macvlan.第三方方案:常用的包括flannel.weave 和 calico. (1)准备 Overlay 网络实验环境 [[email protected] ~]# docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap [[email protected] ~]# netstat -

Docker:macvlan实现容器跨主机通信 [十四]

一.什么是macvlan 1.macvlan 本身是 linux kernel 模块,其功能是允许在同一个物理网卡上配置多个 MAC 地址, 2.即多个 interface,每个 interface 可以配置自己的 IP. 3.macvlan 本质上是一种网卡虚拟化技术 二.跨主机通信 1.创建macvlan 1.主机luoahong [[email protected] ~]# docker network create --driver macvlan --subnet 10.0.0.0/2

50-overlay 如何实现跨主机通信?

上一节我们在 host1 中运行了容器 bbox1,今天将详细讨论 overlay 网络跨主机通信的原理. 在 host2 中运行容器 bbox2: bbox2 IP 为 10.0.0.3,可以直接 ping bbox1: 可见 overlay 网络中的容器可以直接通信,同时 docker 也实现了 DNS 服务. 下面我们讨论一下 overlay 网络的具体实现: docker 会为每个 overlay 网络创建一个独立的 network namespace,其中会有一个 linux brid

Docker容器跨主机通信之:直接路由方式

概述 就目前Docker自身默认的网络来说,单台主机上的不同Docker容器可以借助docker0网桥直接通信,这没毛病,而不同主机上的Docker容器之间只能通过在主机上用映射端口的方法来进行通信,有时这种方式会很不方便,甚至达不到我们的要求,因此位于不同物理机上的Docker容器之间直接使用本身的IP地址进行通信很有必要.再者说,如果将Docker容器起在不同的物理主机上,我们不可避免的会遭遇到Docker容器的跨主机通信问题.本文就来尝试一下. 方案原理分析 由于使用容器的IP进行路由,就

docker之跨主机通信

本地workstations虚拟机server1和server2环境为centOS7.7,安装软件为docker-ce,docker版本为19.03.05docker安装就不介绍了,直接进主题.一.准备工作跨主机需要两个独立的网卡:server1和server2添加网卡 [[email protected] ~]# ip addr show 查看网卡是否添加成功 添加成功. macvlan本身是linxu kernel的模块,本质上是一种网卡虚拟化技术.其功能是允许在同一个物理网卡上虚拟出多个网

docker之docker容器flannel模式多网段跨主机通信

一.简介flannel是为实现多网段通信的第三方的解决方案, 是 CoreOS 开发的容器网络解决方案.flannel 为每个 host 分配一个 subnet,容器从此 subnet 中分配 IP,这些 IP 可以在 host 间路由,容器间无需 NAT 和 port mapping 就可以跨主机通信.每个 subnet 都是从一个更大的 IP 池中划分的,flannel 会在每个主机上运行一个叫 flanneld 的 agent,其职责就是从池子中分配 subnet.为了在各个主机间共享信息

vmIP地址无法跨主机通信

问题描述:突然间遇到vm无法获取dhcp的信息,手动指定也无法ping通同网段IP. 解决方法:经过测试发现,只能在同一主机上的vm通信,跨主机后就不行,后来经过询问得知,用户更改了网络配置导致的,最终通过在端口组加上vlan标签得以解决.

Docker容器跨主机通信之:OVS+GRE

一.概述 由于docker自身还未支持跨主机容器通信,需要借助docker网络开源解决方案 OVS OpenVSwich即开放式虚拟交换机实现,简称OVS,OVS在云计算领域应用广泛,值得我们去学习使用. OpenVSwich OpenVSwich是一种开源软件,通过软件的方式实现二层交换机功能,专门管理多租赁云计算网络环境,提供虚拟网络中的访问策略.网络隔离.流量监控等. 既然是虚拟交换机,自然与传统的物理交换机有着相同的特性,操作中可以按照理解物理交换机的方式去操作,有助于对虚拟交换机的认识