单个host上的容器的网络:通过本章的学习,我们知道docker默认有三种网络,可以通过docker network ls查看;
none:封闭的网络,通过--network=none来指定;
host:将host主机上面的网络完全映射到容器中;
bridge:桥接网络,默认情况下容器使用的是bridge,并将容器网络桥接到docker0上;可以通过brctl show查看桥接情况
我们可以创建user-defined网络,user-defined也分为三种:bridge,overlay,macvlan,本节重点讨论的是bridge,其他两个主要用来实现跨主机的网络;
通过docker network create --driver bridge <网络名>来创建bridge网络,通过docker network inspect查看bridge的subnet以及gateway;
我们新建bridge网络的时候可以通过--subnet和--gateway来指定bridge的网段和网关;
运行容器的时候我们通过--network=<新建的网络名>指定容器使用的网段,通过--ip指定容器的ip;
通过docker network rm<网络ID>来删除不用的网络,前提是这个网络没有被使用。
我们还学习了容器与容器之间的通信:证明了在同一个网络下的容器之间可以互相通信;在不同网络的容器可以设置iptables来实现,也可以通过docker network connect <网络名> <容器名> 来给容器增加一个不同网段的新网卡来实现不同网段的容器之间的通信;
容器间的通信方式有三种:IP通信,DNS通信,joined方式通信
最后学习了容器如何与外部进行通信:通过NAT的方式来实现容器访问外网:容器发送请求先到桥接网卡(docker0),桥接网卡发现是访问外网的通过NAT进行网络地址转换,将容器的地址转换成host的地址,通过host的地址访问外部;
通过端口映射的方式实现了外部访问容器:首先启动容器的时候要通过-p设置容器映射的端口,每映射一个端口,host都会启动一个docker-proxy的进程;当外部有请求过来时,先访问host对应的端口,然后通过docker-proxy将请求转发到容器对应的端口,容器在将结果返回。
本节的命令总结:
brctl show:桥接情况
docker network ls:查看docker网络
docker network create --driver bridge --subnet --gateway docker1:创建一个docker1的bridge网络
--driver bridge:驱动类型为bridge ;--subnet指定网段;--gateway指定网关
docker run -d --network=none/host/docker1 --ip 192.168.2.2 busybox :运行一个容器指定他使用的网络和ip
--network=none/host/docker1 指定使用的网络 --ip指定容器的ip
docker network inspect <网络ID>查看bridge网络的信息
docker network connect <网络名> --ip <容器名> 给容器增加一块网卡
docker network rm <网络ID>删除网络