docker容器网络
在顶层设计中,Docker 网络架构由 3 个主要部分构成:CNM、Libnetwork 和驱动。
1)CNM 是设计标准。在 CNM 中,规定了 Docker 网络架构的基础组成要素。
2)Libnetwork 是 CNM 的具体实现,并且被 Docker 采用,Libnetwork 通过 Go 语言编写,并实现了 CNM 中列举的核心组件。
3)驱动通过实现特定网络拓扑的方式来拓展该模型的能力。
network namespace 是实现网络虚拟化的重要功能,它能创建多个隔离的网络空间,它们有独自的网络栈信息。不管是虚拟机还是容器,运行的时候仿佛自己就在独立的网络中。
有了不同 network namespace 之后,也就有了网络的隔离,但是如果它们之间没有办法通信,也没有实际用处。要把两个网络连接起来,linux 提供了 veth pair 。可以把 veth pair 当做是双向的 pipe(管道),从一个方向发送的网络数据,可以直接被另外一端接收到;或者也可以想象成两个 namespace 直接通过一个特殊的虚拟网卡连接起来,可以直接通信。
docker run -d --name test1 busybox /bin/sh -c "while true;do sleep 3600;done" docker exec -it test1 ip a docker run -d --name test2 busybox /bin/sh -c "while true;do sleep 3600;done" docker exec -it test2 ip a docker exec -it test1 /bin/sh ping 172.17.0.3 -c 3 exit ip a