从docker-1.9版本后,docker本身支持overlay网络,本节就是在docker的native overlay做的试验。首先,保证安装的docker的版本是1.9以上的版本信息,
这里的VM1: 10.10.185.95 VM2:10.10.93.222
0) 在使用overlay网络需要key-value 键值对
所以在启用的时,启用etcd
在VM1:
#!/bin/bash
./etcd -name infra1 -initial-advertise-peer-urls -listen-peer-urls \
-listen-client-urls -advertise-client-urls \
-initial-cluster-token etcd-cluster-1 \
-initial-cluster infra0=http://10.10.72.11:2380,infra1=,infra2= \
-initial-cluster-state new
启动docker daemon:
docker daemon --cluster-advertise=10.10.185.95:2376 --cluster-store etcd://10.10.185.95:2379,10.10.93.222:2379
在VM2:启动etcd
#!/bin/bash
./etcd -name infra2 -initial-advertise-peer-urls -listen-peer-urls \
-listen-client-urls -advertise-client-urls \
-initial-cluster-token etcd-cluster-1 \
-initial-cluster infra0=http://10.10.72.11:2380,infra1=,infra2= \
-initial-cluster-state new
启动docker:
docker daemon
--cluster-advertise=10.10.93.222:2376 --cluster-store
etcd://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 network ls可以查看网络信息
2) 创建Container
使用下面的命令run一个container,这里指定了—net为我们刚才创建的网络名字。
docker run -it --net=bar --name=vm1 frankzfz/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