网络分类
bridge网络
bridge是docker默认网络模式,docker安装后会选择一个私有网段作为bridge的子网,在我们创建容器时默认会将容器网络加入到这个子网中。
原理:Docker Daemon(后台进程) 利用 veth pair 技术,在宿主机上创建一对对等虚拟网络接口设备(veth pair)用于连接网桥(docker0)和容器, veth pair 技术的特性可以保证无论哪一个 veth 接收到网络报文,都会将报文传输给另一方。
注意:通过docker-compose构建的容器会自动创建一个名为文件夹名_default的桥接网络。
host网络
采用 host 网络模式的 Docker Container,可以直接使用宿主机的 IP 地址与外界进行通信,若宿主机的 eth0 是一个公有 IP,那么容器也拥有这个公有 IP。同时容器内服务的端口也可以使用宿主机的端口,无需额外进行 NAT 转换;
host 网络模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。
none 网络模式
none 网络模式即不为 Docker Container 创建任何的网络环境,容器内部就只能使用 loopback (本地回路)网络设备,不会再有其他的网络资源。
container 网络模式
Container 网络模式是 Docker 中一种较为特别的网络的模式。在创建容器时通过参数 --net container:已运行的容器名称|ID 或者 --network container:已运行的容器名称|ID 指定;
处于这个模式下的 Docker 容器会共享一个网络栈,这样两个容器之间可以使用 localhost 高效快速通信。
Container 网络模式即新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样两个容器除了网络方面相同之外,其他的如文件系统、进程列表等还是隔离的。
更多细节可以查看:https://zhuanlan.zhihu.com/p/212772001