本次分析的libnetwork版本0.7.0-rc.6,对比的是docker1.10.0使用的libnetwork版本0.6.0-rc7。
下图是Docker官方定义的容器网络模型(Container Network Model)。其中包括三个组件,分别是Sandbox、Endpoint和Network。
在Docker1.11中,Sandbox是一个GO语言接口,GO语言不是一种典型的面向对象语言,它在语法上没有类和继承的概念,没有继承是否就无法拥有面向对象中的“多态”行为,但是GO语言引入了一种新类型“接口”,它在效果上实现了面向对象中“多态”的概念。Sandbox接口结构体如下:
typeSandbox interface {
ID() string
Key() string
ContainerID() string
Labels() map[string]interface{}
Statistics()(map[string]*types.InterfaceStatistics, error)
Refresh(options ...SandboxOption) error
SetKey(key string) error
Rename(name string) error
Delete() error
ResolveName(name string, iplen int)([]net.IP, bool)
ResolveIP(name string) string
Endpoints() []Endpoint
}
相比Docker1.10,ResolveName方法增加了对IPv6地址的支持。
在Docker1.11中,Endpoint接口结构体同