首先docker在安装时会在host上创建三个网络,我们用docker network ls可以看到,ip a可以看到host上多了一个docker0的网卡
ip a
使用docker network inspect bridge/host/none 可以看到每个网络的详细信息
创建container是可以通过--network=none来指定container使用none网络,这里我们用一个很小的镜像来实验。
进入容器 docker run -it --name test --hostname test --network=none busybox
看的出来none网络是什么都没有的,lo是本地的回环。
docker run -it --name test1 --hostname test --network=host busybox
host网络是和host上的网卡一样的。
docker run -it --name test2 --hostname test --network=bridge busybox
beidge网络,是我们启动container时默认的一个网桥,桥接到docker0上。
我们这里启动一个container,看看host上网卡有什么变化
docker run -dit busybox ip a
多了一个9: veth2a55a86@if8的网卡,仔细看看我们运行的container的网卡和这个网卡是相互对应的,并且是基于docker0的,
9: veth2a55a86@if8 对应 8: eth0@if9。原来bridge网络配置subnet就是172.17.0.0/16,网关172.17.0.1,就是docker0。
--————————————————————————————————————————————————————————————————————————————————————-
以上是docker自带的3个网络,下面我们来说一说自定义的网络,通过命令docker network create来实现
docker network create --driver brodge mynet 这里--driver是指定通过那个驱动来创建,默认是bridge
创建成功了可以去看看host上的网卡有什么变化,发现多了一个网卡,启动容器时指定这个自定义的网卡效果和beidge是一样的,下面我们来说点不一样的。
我们现在来基于beidge来自定义网卡。使用--subnet --gateway参数来设定自己的网段和网关
docker network create --driver bridge --subnet 10.0.0.0/24 --gateway 10.0.0.1 mynet2
再指定mynet2网卡来启动一个container
docker run -it --network=mynet2 busybox ip a来验证是否成功
—————————————————————————————————————————————————————————————————————————————————————
到现在为止docker的网络就差不多了,后面是一些container之间的通讯
我们指定上面的mynet2来启动多个container,如下图C1,C2,C3,C4他们之间是可以通讯的,但是别的网络C5想要通讯就不行了,这时怎么办,我们还有办法,
想让不同网卡的container之间通讯,我们需要为C5添加一块网卡,利用docker network connect命令实现
先运行一个container来看看
docker run -it --network=bridge busybox
可以看到这个只有一个eth0的网卡还是172.17.0.0网段想ping 10.0.0.0网段是不行的,我们来给他加一个网卡试试
现在就可以通信了。
今天就写这么多了。后面还有跨主机通讯,后面再说!!