Creating a Docker network
Docker 网络介绍
默认提供 bridge、host、none、overlay、maclan 和 Network plugins 这几种网络模式,运行容器时可以通过–network 参数设置具体使用那一种模式
-
bridge:这是Docker默认的网络驱动,此模式会为每一个容器分配Network Namespace和设置IP等,并将容器连接到一个虚拟网桥上。如果未指定网络驱动,这默认使用此驱动
-
host: 此网络驱动直接使用宿主机的网络
-
none: 此驱动不构造网络环境。采用了none 网络驱动,那么就只能使用loopback网络设备,容器只能使用127.0.0.1的本机网络
-
overlay: 此网络驱动可以使多个Docker daemons连接在一起,并能够使用swarm服务之间进行通讯。也可以使用overlay网络进行swarm服务和容器之间、容器之间进行通讯
-
macvlan: 此网络允许为容器指定一个MAC地址,允许容器作为网络中的物理设备,这样Docker daemon就可以通过MAC地址进行访问的路由。对于希望直接连接网络网络的遗留应用,这种网络驱动有时可能是最好的选择
-
Network plugins: 可以安装和使用第三方的网络插件。可以在Docker Store或第三方供应商处获取这些插件
在默认情况,Docker 使用 bridge 网络模式,bridge 网络驱动的示意图如下,此文以bridge 模式对 Docker 的网络进行说明
- bridge网络的构建过程
安装Docker时,创建一个名为 docke0 的虚拟网桥,虚拟网桥使用“10.0.0.0 -10.255.255.255 “、”172.16.0.0-172.31.255.255″和“192.168.0.0——192.168.255.255”这三个私有网络的地址范围
通过 ifconfig 命令可以查看 docker0 网桥的信息:
通过 docker network inspect bridge 可以查看网桥的子网网络范围和网关:
- 运行容器时,在宿主机上创建虚拟网卡 veth pair 设备,veth pair 设备是成对出现的,从而组成一个数据通道,数据从一个设备进入,就会从另一个设备出来
将veth pair设备的一端放在新创建的容器中,命名为eth0;另一端放在宿主机的docker0中,以veth为前缀的名字命名。通过 brctl show 命令查看放在docker0中的veth pair设备
- 外部访问
bridge 的 docker0 是虚拟出来的网桥,因此无法被外部的网络访问。因此需要在运行容器时通过 -p 和 -P 参数对将容器的端口映射到宿主机的端口。实际上 Docker 是采用 NAT的方式,将容器内部的服务监听端口与宿主机的某一个端口 port 进行绑定,使得宿主机外部可以将网络报文发送至容器
创建 Docker 网络
Bridge networks
是docker中最常见的网络类型,
-
创建一个bridge网络
$ docker network create --driver bridge szer1
-
查看网络详情
$ docker network inspect szer1
-
将webserver容器运行在新创建的网络
--network
指定网络docker run -it --rm -p 80:80 --network szer1 --mount source=szer1,destination=/usr/share/nginx/html --name web webserver
-
查看szer1网络下运行的容器
$ docker network inspect szer1
发表评论 取消回复