一、网络管理简介
容器的网络默认与宿主机,其他容器是相互隔离的。
为什么需要网络管理?总结有如下四点:
1. 容器中可以运行一些网络应用(如nginx,web应用,数据库等等),如果要让外部也可以访问这些容器内运行的网络应用,那么久需要胚子网络来实现。
2. 容器不想让它的网络和宿主机,其他容器相互隔离。
3. 容器根本不需要网络。
4. 容器需要更高的定制化网络(如定制特殊的集群网络、定制容器间的局域网)。
二、 四种网络模式
四中网络模式分别为 bridge模式 , host模式 , none模式 , container模式。
1. bridge 模式(docker默认的模式)
Docker daemon 会默认创建一个虚拟以太网网桥 docker0,在该模式下,每一个容器对应就有一对虚拟网络设备veth pair(一个叫eth0的接口在容器上,另一个叫veth1的接口在宿主机的命名空间中)。 容器之间,容器与宿主机之间的网络通信就是通过veth pair 进行通信的.
Docker daemon 还会从网桥的私有地址空间中分配一个IP地址给容器。也就是说每一个容器都具有IP地址。该模式类似于虚拟机的net模式。
需要注意的是: 外部网络无法直接访问容器, 需要建立端口映射才能访问。
在终端上输入brctl show: 可以查看到网桥docker0, 运行一个新容器就创建一个新的veth pair.
birdge 模式示意:
bridge 模式的端口映射:
外部网络无法直接访问容器, 需要建立端口映射才能访问。使用命令
2. host 模式
在该模式下, 容器与宿主机之间的网络无隔离,即容器直接使用宿主机网络,这个时候容器和主机上的应用所使用的端口不能重复。
外部可以直接访问容器,不需要端口映射。
容器的IP就是宿主机的IP。
3. none 模式
在该模式下, 容器没有网络, 如果需要使用网络,需要用户自行安装与配置。这种情况适用于需要高度定制网络的用户。
4. container 模式
在该模式下, 容器和现有的容器共用同一个网络
三、 Docker 网络管理命令
参考资料:
https://docs.docker.com/network/bridge/#connect-a-container-to-the-default-bridge-network