环境限制
- 必须安装key-value存储服务,如consul
- 宿主机已经安装docker engine
- 宿主机的hostname必须不同
- 内核大于3.16
环境准备及角色分配
- 两台ubuntu的server
server1 | 192.168.1.75 | 4.2.0-27-generic | server1(centOS7) | 1.10.2 | server |
server2 | 192.168.1.76 | 4.2.0-27-generic | server2(centOS7) | 1.10.2 | client |
- 实验目标:两个CentOS7容器server1,server2网络互通, 注意本文中的hanxt@server1和hanxt@server2
下载分布式发现服务协调软件:consul
- 下载consul软件并解压,实际就是一个二进制文件放到$PATH下面即可
hanxt@server1:~$ wget https://releases.hashicorp.com/consul/0.6.3/consul_0.6.3_linux_amd64.zip
hanxt@server1:~$ unzip consul_0.6.3_linux_amd64.zip;
hanxt@server1:~$ sudo mv consul /bin
- 启动consul
hanxt@server1:~$ nohup sudo consul agent -server -bootstrap -data-dir /home/hanxt/workspace/data/consul -bind=192.168.1.75 &
hanxt@server2:~$ nohup sudo consul agent -data-dir /home/hanxt/workspace/data/consul -bind=192.168.1.76 &
hanxt@server2:~$ consul join 192.168.1.75
可以启动一个server和多个agent(此处是一个),然后让agent,join到consul集群中
配置Docker并重启
- 在每一台docker宿主机上做如下配置,并重启docker
sudo vi /etc/default/docker
DOCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock --cluster-store consul://localhost:8500 --cluster-advertise eth0:2375"
sudo service docker restart
- 集群配置
–cluster-store= 参数指向docker daemon所使用key value service的地址(本例中即consul的服务地址)–cluster-advertise= 参数决定了所使用网卡以及docker daemon端口信息
- 宿主机配置
上面的-H 的参数分别指定了docker demon服务的地址和协议
创建overlay网络
- 创建
hanxt@server1:~$ sudo docker network create -d overlay multihost
- 验证
在server1上创建的multihost网络,会通过consul服务同步到server2上面
hanxt@server2:~$ docker network ls
NETWORK ID NAME DRIVER
4956314037af multihost overlay
e17295058b38 bridge bridge
e4ef9ba16838 none null
f3312e582310 host host
创建容器
docker run -d --net=multihost --name=host1 hanxt/centos:7
docker run -d --net=multihost --name=host2 hanxt/centos:7
验证网络互通
hanxt@server2:~$ docker exec -it host2 bash
[root@2516560c337f /]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1450
inet 10.0.0.3 netmask 255.255.255.0 broadcast 0.0.0.0
inet6 fe80::42:aff:fe00:3 prefixlen 64 scopeid 0x20<link>
ether 02:42:0a:00:00:03 txqueuelen 0 (Ethernet)
RX packets 29 bytes 2522 (2.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 22 bytes 1964 (1.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@2516560c337f /]#
[root@2516560c337f /]# ping 192.168.1.75
PING 192.168.1.75 (192.168.1.75) 56(84) bytes of data.
64 bytes from 192.168.1.75: icmp_seq=1 ttl=63 time=0.790 ms
64 bytes from 192.168.1.75: icmp_seq=2 ttl=63 time=0.825 ms
64 bytes from 192.168.1.75: icmp_seq=3 ttl=63 time=0.907 ms
^C
--- 192.168.1.75 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.790/0.840/0.907/0.059 ms
[root@2516560c337f /]#
[root@2516560c337f /]# ping 10.0.0.2
PING 10.0.0.2 (10.0.0.2) 56(84) bytes of data.
64 bytes from 10.0.0.2: icmp_seq=1 ttl=64 time=1.13 ms
64 bytes from 10.0.0.2: icmp_seq=2 ttl=64 time=1.03 ms
64 bytes from 10.0.0.2: icmp_seq=3 ttl=64 time=1.06 ms
64 bytes from 10.0.0.2: icmp_seq=4 ttl=64 time=1.09 ms
^C
--- 10.0.0.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 1.031/1.080/1.130/0.043 ms
[root@2516560c337f /]#
- 验证结论,server2容器host2的ip=10.0.0.3,可以ping通server1,可以ping通server1上的容器host1的ip=10.0.0.2
如何使用静态ip
- 以上的实验步骤。container的ip都是自动分配的,如果需要静态的固定ip,怎么办?
- 在创建网络的过程中有区别
sudo docker network create -d overlay --ip-range=192.168.2.0/24 --gateway=192.168.2.1 --subnet=192.168.2.0/24 multihost
docker run -d --name host1 --net=multihost --ip=192.168.2.2 hanxt/centos:7
docker run-d --name host2 --net=multihost --ip=192.168.2.3 hanxt/centos:7
http://www.tuicool.com/articles/AVZB32v
相关推荐
在Docker环境中,overlay网络是一种高级的网络模式,它允许跨多台主机的容器进行通信。这个场景描述了如何在三台机器上设置一个overlay网络,以实现容器间的互联互通。以下是对这一过程的详细解释: 首先,环境设置...
在多主机场景下,我们通常会使用 overlay 网络,配合 Flannel 来实现跨主机通信。Flannel 可以作为 Docker 的网络插件,当 Docker 创建新的容器时,Flannel 会自动为容器分配 IP 并设置相应的路由规则,从而实现在...
在多主机环境下,Docker使用overlay网络来实现跨主机间的通信,这使得容器可以在不同的主机上运行而互相通信。以下是对“基于overlay的跨主机通信”这一主题的详细解释。 首先,我们要了解容器网络的分类。Docker...
总结,Docker的Overlay网络是实现跨主机容器通信的有效手段,通过Consul等服务发现工具,可以轻松地管理和扩展分布式系统。正确配置和使用Overlay网络,对于构建可扩展、高可用的容器化应用至关重要。
在Docker世界中,网络是实现容器间通信的关键。本篇将深入探讨Docker网络的基础,特别是如何配置两个网络命名空间进行通信的过程。通过理解Docker的网络模型,我们可以更好地管理和优化我们的容器化应用程序。 首先...
基于alpine系统构建docker镜像,实现可配置和易于管理的docker镜像。 项目简介 提供非常小的docker镜像。 提供易于配置的docker镜像。 提供非常稳定的docker镜像。 使用docker镜像快速启用微服务架构。 使用docker...
随着 Docker 网络的发展,现在推荐使用自定义网络(如 `bridge`、`host`、`overlay` 等)和服务发现工具(如 Consul 或 etcd)来替代链接模式。这种方式提供了更强大、更灵活的网络控制,支持容器之间的双向通信、...
Docker通过驱动程序来提供网络功能,其中overlay网络驱动允许用户创建跨多个Docker守护进程的网络,即容器可以在不同主机上运行,但仍能像在同一主机上一样彼此通信。 Overlay网络基于VxLAN(Virtual Extensible ...
Docker跨主机网络方案 docker 原生 overlay macvlan 第三方方案 flannel weave calico 之前介绍了Consul搭建集群,所以在此直接选用docker自带的overlay方案来做,和Consul完美结合。 环境准备 参考之前的一...
Docker默认提供了多种网络模式,包括桥接网络(Bridge)、主机网络(Host)、overlay网络(用于多主机集群)以及自定义网络。桥接网络是Docker最常用的网络模式,它创建一个虚拟网络接口,使容器能够通过宿主机与...
Docker网络支持容器间的通信,包括桥接网络和overlay网络,确保服务之间的连接。Docker存储机制允许数据卷持久化,同时保持容器的轻量化。在安全性方面,Docker利用SELinux、命名空间和控制组(Cgroup)来隔离容器,...
综上所述,构建基于微服务的电商中台涵盖了容器化、服务治理、日志分析、网络优化、存储管理、自动化部署和多活数据中心等多个方面,这些技术与实践相结合,为电商平台提供了强大且弹性的基础设施,支撑着业务的快速...