rewrite the advanced network chapter

This commit is contained in:
Baohua Yang
2014-09-18 17:38:20 +08:00
parent 424e07993e
commit 23d4e36c64
11 changed files with 130 additions and 163 deletions

View File

@@ -1,7 +1,11 @@
##创建一个点到点连接
默认Docker会将所有容器连接到由docker0提供的虚拟子网你也可以使用自己创建的网桥。但如果你想要2个特殊的容器之间可以直连通信而不用去配置复杂的主机网卡桥接
##示例:创建一个点到点连接
默认情况下,Docker会将所有容器连接到由`docker0`提供的虚拟子网
解决办法很简单创建一对接口把2个容器放到这对接口中配置成点到点链路类型。这2个容器可以直通信了。首先启动2个容器
用户有时候需要2个容器之间可以直通信,而不用通过主机网桥进行桥接。
解决办法很简单创建一对“peer”接口分别放到2个容器中配置成点到点链路类型即可。
首先启动2个容器
```
$ sudo docker run -i -t --rm --net=none base /bin/bash
root@1f1f4c1f931a:/#
@@ -9,7 +13,7 @@ $ sudo docker run -i -t --rm --net=none base /bin/bash
root@12e343489d2f:/#
```
找到他们的进程号,然后创建他们的 namespace entries
找到进程号,然后创建网络名字空间的跟踪文件。
```
$ sudo docker inspect -f '{{.State.Pid}}' 1f1f4c1f931a
2989
@@ -20,7 +24,7 @@ $ sudo ln -s /proc/2989/ns/net /var/run/netns/2989
$ sudo ln -s /proc/3004/ns/net /var/run/netns/3004
```
创建"peer"接口,然后配置路由
创建一对“peer接口,然后配置路由
```
$ sudo ip link add A type veth peer name B
@@ -34,7 +38,8 @@ $ sudo ip netns exec 3004 ip addr add 10.1.1.2/32 dev B
$ sudo ip netns exec 3004 ip link set B up
$ sudo ip netns exec 3004 ip route add 10.1.1.1/32 dev B
```
现在这2个容器就可以相互ping通并成功建立连接。点到点链路不需要子网和子网掩码,使用`ip route`来连接单个ip地址到指定的网络接口
如果没有特殊需要你不需要指定`--net=none`来创建点到点链路。
现在这2个容器就可以相互ping通并成功建立连接。点到点链路不需要子网和子网掩码。
还有一个办法就是创建一个只跟主机通信的容器,除非有特殊需求,你可以仅用`--icc=false`来限制主机间的通信。
此外,也可以不指定`--net=none`来创建点到点链路。这样容器还可以通过原先的网络来通信。
利用类似的办法,可以创建一个只跟主机通信的容器。但是一般情况下,更推荐使用`--icc=false`来关闭容器之间的通信。