由于Docker的容器彼此之间是逻辑隔离的,所以,在安装Docker时会为在容器创建隔离的网络环境。在该隔离的网络模式环境下,运行在宿主机上的各个容器具有完全独立的网络栈,并且Docker容器的网络环境与宿主机相互隔离。通过配置使用Docker的不同网络模式,可以使容器共享宿主机的网络命名空间,也可以实现容器间的相互访问。
视频讲解如下:
Docker一共提供了4种网络模式:bridge、container、host和none。下表对比了这4种通信模式的特点。
Bridge网络模式是Docker容器默认的网络模式。利用Bridge模式,可以非常方便地实现容器与容器之间、容器与宿主机之间的网络隔离。并且通过使用宿主机上的docker0网桥,容器可以实现与宿主机乃至外部网络进行相互的网络通信。下图说明了bridge模式的工作机制。
下面通过示例演示如何使用bridge模式。
(1)使用busybox镜像创建容器
docker run -it --network=bridge busybox /bin/sh
提示:这里的--network=bridge可以不写,默认就是bridge模式。
busybox是一个集成了一百多个最常用Linux命令和工具的软件工具箱,如cat、echo等;它也包含了一些更大、更复杂的工具,如grep、find、mount及telnet等。
(2)在容器内部执行命令“ifconfig”查看容器的网络信息,如下图所示。
在默认情况下,Docker引擎会自动创建一个bridge网络。Docker引擎同时也为用户提供了自定义bridge网络的方式。利用该方式,用户可以自定义bridge的子网地址和网关等参数。
提示:用户自定义bridge网络是在生产环境中推荐到最佳方式。
(3)执行下面的命令自定义bridge网络
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网络的名称。
(4)查看Docker的网络。这时就可以看到新创建的bridge2,如下图所示。
docker network ls
(5)使用bridge2创建一个容器,这里通过参数--ip指定了容器的IP地址
docker run -it --network=bridge2 --ip=192.168.1.3 busybox
(6)在容器内执行命令“ifconfig”查看网络信息,如下图所示。