网络是程序通信的媒介,是计算机的基石。docker以进程为基础,引入namespace隔离资源、依靠unionfs挂载镜像、调用cgroup限制资源,以此实现了应用的轻量性和隔离性。应用需要通信,通信便依赖网络,因此docker网络是docker提供正常服务的基础。
1.network namespace(命名空间):为了隔离网络资源(内核协议栈),引入network namespace隔离内核协议栈的全局变量。本质就是调用内核函数时,加入network namespace这个参数。
2.Veth: 为了两个内核协议栈之间通信,设计了veth 连接两个内核协议栈。veth设备是一对,一端直接(不会将数据封装成帧再发,而是封三层,传输效率高)将数据发送到另一端 ,并触发另一端的接收操作。
3.网桥:为了连接多个内核协议栈之间的通信,设计了虚拟网桥。一般使用veth设备,连接网桥,通过网桥中转到不同的内核协议栈。
4.Iptables设备:为了满足数据流转的用户可控,引入了iptables。通过netfilter控制数据包流转的网络接口。
1.host模式: 容器和宿主机共享一个内核协议栈,容器不会虚拟出自己的网卡、ip、端口。
2.container模式: 一些容器共享内核协议栈。k8s中的pod便是如此。
3.none模式: 有自己的内核协议栈,但不做网络设置
4.bridge模式: 通过Docker0连接开启了此模式的容器。
如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!
赞1
添加新评论0 条评论