从docker-1.9版本后,docker本身支持overlay网络,本节就是在docker的nativeoverlay做的试验。首先,保证安装的docker的版本是1.9以上的版本信息,
这里的VM1: 10.10.185.95VM2:10.10.93.222
0) 在使用overlay网络需要key-value 键值对
所以在启用的时,启用etcd
在VM1:
#!/bin/bash
./etcd-name infra1 -initial-advertise-peer-urls http://10.10.185.95:2380-listen-peer-urls http://10.10.185.95:2380 \
-listen-client-urlshttp://10.10.185.95:2379,http://127.0.0.1:2379 -advertise-client-urlshttp://10.10.185.95:2379 \
-initial-cluster-tokenetcd-cluster-1 \
-initial-clusterinfra0=http://10.10.72.11:2380,infra1=http://10.10.185.95:2380,infra2=http://10.10.93.222:2380\
-initial-cluster-state new
启动docker daemon:
docker daemon --cluster-advertise=10.10.185.95:2376 --cluster-storeetcd://10.10.185.95:2379,10.10.93.222:2379
在VM2:启动etcd
#!/bin/bash
./etcd-name infra2 -initial-advertise-peer-urls http://10.10.93.222:2380-listen-peer-urls http://10.10.93.222:2380 \
-listen-client-urlshttp://10.10.93.222:2379,http://127.0.0.1:2379 -advertise-client-urlshttp://10.10.93.222:2379 \
-initial-cluster-tokenetcd-cluster-1 \
-initial-clusterinfra0=http://10.10.72.11:2380,infra1=http://10.10.185.95:2380,infra2=http://10.10.93.222:2380\
-initial-cluster-state new
启动docker:
docker daemon --cluster-advertise=10.10.93.222:2376 --cluster-storeetcd://10.10.185.95:2379,10.10.93.222:2379
1) docker-1.9版本中增加了network的命令,可以使用下面的命令创建一个overlay的网络,网络的命令是bar
docker network create -d overlay bar
9422b932b374c48621daeb2f9775c168f6062132003e5c570fc1a2338bcca0a3
使用docker networkls可以查看网络信息
2) 创建Container
使用下面的命令run一个container,这里指定了—net为我们刚才创建的网络名字。
docker run -it --net=bar --name=vm1frankzfz/centos6.3-base-v1 /bin/bash
在Container内部可以看到生成了两个网卡,eth0和eth1.
在Container内部可以看到eth1和eth0接口的IP地址,eth1: 172.18.0.3 eth0: 10.0.0.2,这里的eth1是Docker中数据走NAT,eth0是两个不同host的Container进行通信使用。
在宿主机上可以看到docker_gwbridge 桥接口地址,该地址的IP地址172.18.0.1,类似于Docker0,这可以通过iptables表可以看出。
3) Overlay网络创建了独立的net namespace
ls/var/run/docker/netns
1-9422b932b3 26f6ec5d9454 6ca34db04d26
其中1-9422b932b3 是使用overlay创建的net namespace
mkdir/var/run/netns
ln -s/var/run/docker/netns/1-9422b932b3 /var/run/netns/1-9422b932b3
ip net list
3) 在VM2上
docker run -ti --net=bar --name=vm2 frankzfz/centos6.3-base-v1/bin/bash
在Container内部,
可以直接Ping Vm1上的Container