Docker网络中相关的命令非常少,但需要掌握的底层原理却又非常多。
1.Network Namespace
Docker网络底层原理是Linux的Network Namespace,所以说对于Linux Network Namespace的理解对Docker网络底层原理的理解就显得尤为重要了。
2.需求
通过手工的方式创建两个Network Namespace,并最终让它们相互互通,即可以通过ping命令测试成功。
3.创建两个命名空间
分别创建两个空间,命名为n1,和n2
因为每个网络空间都是独立的,所以每个Network Namespace都具有一个回环网络适配器io。
命令 ip netns exec ns1 ip a
是用于在指定的网络命名空间 “ns1” 中查看网络接口的配置信息。
ip a
:显示网络接口的配置信息。ip netns exec ns1
:在网络命名空间 “ns1” 中执行命令。- 结果中的每一行显示一个网络接口的信息,包括接口名称、接口类型、MAC 地址和 IP 地址等。
获取网络命名空间 “ns1” 中网络接口的详细信息,包括接口名称、IP 地址、子网掩码、广播地址、MAC 地址等。
4.创建网络接口veth pair
- 如果想要两个命名空间互通,则需要用到虚拟设备接口技术veth pair。 该技术需要一对网络接口分别置于两个命名空间中。
以下是具体的命令,用来创建veth-n1和veth-n2。
添加完成之后, 在通过ip link 命令查看当前网络的地址情况,可以看到新增了两个互通的veth pair。他们都具有mac地址,但是它们的状态都是DOWN,且都不具有IP。
5.命名空间添加veth接口
通过ip link set命令,将这两个网络接口分别分配给两个命名空间。
此时分别在两个命名空间中执行ip link命令,可以查看到,它们中分别新增了前面指定的一个网络接口。
此时在去看主机ip link , 就会发现之前的已经消失了~
·
6.为veth接口分配IP
前面创建的两个网络接口是没有IP的,需要通过命令,为每个指定的命名空间执行IP添加命令。
分配完之后再看~
== ip netns exec n1 ip a ==, 之后就能看到分配的ip地址了。
但是这个时候,状态还是为DOWN。
7.启动veth接口
使用命令开启ip link set dev 【接口】 up来启动指定的网络接口。
再去看的话就发现已经打开了。
8.相互ping
此时就可以完成我们当初提的需求了,互通~
9.总结
这个只是对Linux的Network Namespace的简单学习,Docker的网络知识不止于此。
仍需继续学习。
ok, 我已讲完。