简介
Docker网络是docker对容器网络隔离的一项技术,提供了多种不同的模式,选择不同的网络模式来实现对容器的隔离和互通。主要实现以下功能:
- 容器间网络隔离
- 实现部分容器间网络共享
- 管理多个子网下容器的ip
网络模式
Bridge(桥接)模式
默认在主机中创建一个docker0的网桥,专门实现容器内与主机互通的,在docker0创建一对虚拟网卡,有一半在主机上vethxxx,还有一半在容器内eth0。如下图所示。
Host模式
容器不再有自己的网络空间,而是直接与主机共享网络空间,基于该模式创建的容器对应的ip实际就是与主机同一个子网和网段。缺点是容器的安全性较低。
None模式
Docker会拥有自己的网络空间,不与主机共享,在这个网络模式下的容器不会被分配网卡、ip、路由信息。
特点:完全隔离,与外部任何机器都无网络访问,只有自己的lo,本地网络127.0.0.1
Container模式
与Host模式不同,Container模式是容器间互相共享网络,而不是与主机共享。共享其中一个容器的ip、端口。
自定义网络模式
不使用docker自带的网络模式,而是自己去定制化网络模式。通过以下命令来自定义:
docker network COMMAND
创建一个名为wolfcode的子网
docker network create --driver bridge --subnet 172.25.202.0/24 --gateway 172.25.202.1 wolfcode
现在想要基于wolfcode去创建容器,使用以下命令:
docker run --rm -d -P --name nginx_network1 --net wolfcode centos ping 127.0.0.1
docker run --rm -d -P --name nginx_network2 --net wolfcode centos ping 127.0.0.1
进入该容器查看ip
发现该容器已在该子网中。用nginx_network1去ping nginx_network2,发现可以ping通。
桥接模式的容器互联
创建name=docker_net1
的主机
docker run --rm -d --name docker_net1 -P centos ping 127.0.0.1
然后创建name=docker_net2
的主机,使用--link
的参数将它与net1的主机连接起来
docker run --rm -d -P --name docker_net2 --link docker_net1 centos ping 127.0.0.1
这样在用net2主机去ping net1时,发现可以ping通,但是net1无法ping通net2
跨容器网络通信
当一个容器桥接,另一个容器在wolfcode网络中时,这两个容器是无法进行网络通信的,需要用以下命令
docker network connect wolfcode docker_net1
原理是在执行上述命令后,容器1中又加入了另一个网卡eth1,该网卡和wolfcode关联,这样就能实现互联。