4.3 Docker的4种网络通信模式
由于Docker 容器彼此之间是逻辑隔离的,所以,在安装 Docker 时会在容器中创建隔 离的网络环境。在该隔离的网络模式环境中,运行在宿主机上的各个容器具有完全独立的网 络栈,并自Docker 容器的网络环境与宿主机相互隔离。通过使用 Docker 的不同网络模 式,可以使 Docke容器共享宿主机的网络命名空间,也可以实现Docker容器间的相互访 问。
Docker一共提供了4种网络通信模式:bridge、container、host和none。表对比了 这4种模式的特点。
网络通信模式 | 是否支持多主机 | 纵向通信机制 | 横向通信机制 |
bridge | 否 | 绑定宿主机端口 | 通过 Linux桥接进行通信 |
container | 否 | 绑定宿主机端口 | 通过Linux连接进行通信 |
host | 是 | 通过宿主机网络进行通信 | 通过宿主机网络进行通信 |
none | 否 | 无法通信 | 只能通过Linux 连接进行通信 |
4.3.1 bridge模式
bridge模式是Docker默认的网络通信模式,是开发者最常用的模式。 在bridge模式下,Docker引擎会创建独立的网络命名空间。这样就可以保证运行在每 一个命名空间中的容器具有独立的网卡等网络资源。
利用bridge 模式,可以非常方便地实现容器与容器之间、容器与宿主机之间的网络隔离。通过使用宿主机上的 docker0 网桥,可以实现 Docker 容器与宿主机(乃至外部网络)的 网络通信。下面通过示例演示如何使用bridge模式。
1. 使用bridge模式创建容器
(1)使用busybox的镜像创建容器。
[root@centos7 ~]# docker run -it --network=bridge busybox /bin/sh
(2)在容器内执行“ifconfig”命令查看容器的网络信息,如图所示
2. 实例:用户自定义bridge网络
在默认情况下,Docker 引擎会自动创建一个bridge 网络。Docker 引擎也为用户提供 了自定义bridge网络的方式。利用该方式,用户可以自定义 bridge 网络的子网地址和网关等参数。
(1)执行以下命令自定义bridge网络
[root@centos7 ~]# docker network create -d bridge --ip-range=192.168.1.0/24 \
> --gateway=192.168.1.1 --subnet=192.168.1.0/24 bridge2
其中的参数说明如下
-d:指定网络通信模式,默认是bridge。 -ip-range;指定子网IP地址的范围 -gateway:指定网关的IP地址。 --subnet:指定子网的IP地址。 bridge2:指定bridge网络的名称
(2)查看Docker的网络,可以看到新创建的bridge2,如图所示
[root@centos7 ~]# docker network ls
(3)使用 bridge2创建一个容器,这里通过参数--p 指定了容器的IP地址。
[root@centos7 ~]# docker run -it --network=bridge2 --ip=192.168.1.3 busybox
(4)在容器内执行“ifconfig”命令查看网络信息,如图所示。