Docker将网络和存储以插件化的形式剥离了出来,独立的容器网络项目即为libnetwork项目。
- 容器网络模型(CNM)
容器网络模型的三要素:- 沙盒(Sandbox):代表一个容器或者一个网络命名空间
- 接入点(Endpoint):代表网络上可以挂载容器的接口,会分配ip地址
-
网络(Network):可以连通多个接入点的一个子网
image.png
image.png
CNM的生命周期图,首先驱动注册到网络控制器,网络控制器使用驱动来创建网络,然后在创建的网络上创建接口,最后把容器连接到接口上,销毁过程正好相反。
CNM支持的驱动类型有5中:Null、Bridge、Host、Remote、Overlay- Null:不提供网络服务
- Bridge:默认Linux网桥和iptables实现的单机网络
- Overlay:用vxlan隧道实现的跨主机容器网络,一般还需要个配置存储服务,如etcd、consul等
- Remote:扩容类型,自定义网络驱动
- Host:容器共用宿主机的网络,避免了Bridge的NAT地址转换,但网络隔离不够好,无法进行各自网络资源管理
- Docker网络命令
在libnetwork的支持下,docker网络相关的操作都以network子命令的形式出现。- create,创建一个网络
- connect,将容器接入到网络
- disconnect,把容器从网络断开
- inspect,查看网络的详细信息
- ls,列出所有的网络
- prune,清理无用的网络资源
- rm,删除一个网络
- 构建跨主机的容器网络
启动网络信息存储的服务:
docker run -d -p 8500:8500 -h consul progrium/consul -server -bootstrap
配置Docker主机
cat >> /etc/default/docker << EOF
DOCKER_OPTS="$DOCKER_OPTS --cluster-store=consul://192.168.137.131:8500 --cluster-advertise=eth0:2376"
EOF
systemctl restart docker
- CNM网络示例
创建两个网络
➜ ~ docker network create backend
142088e2c04ad7970129ee45f4efe654efce3e1863613f8e908db55ff8460175
➜ ~ docker network create frontend
05259c7c52a37cbaee826d48423337dcb4009f42ac2c3434a90abbb614fea467
➜ ~ docker network ls
NETWORK ID NAME DRIVER SCOPE
142088e2c04a backend bridge local
1068a9ce1f8e bridge bridge local
b894b3ed5f83 fronted bridge local
05259c7c52a3 frontend bridge local
949d8fa1e475 host host local
f64daa1fb651 none null local
网友评论