docker0,Docker Bridge Driver和Containers之间的关系
我正在看Dockernetworking上的YouTubevideo ,看到这个幻灯片:
我正在试着去理解它。 从docker0
文档 :
“ 默认情况下,Docker服务器创build并configuration主机系统的
docker0
一个叫做docker0
的networking接口,它是一个以太网桥设备。如果在启动一个容器时没有指定不同的networking,那么容器连接到网桥,来自和去往容器的stream量通过网桥stream向Docker守护进程,Docker守护进程代表容器处理路由。
但是我对这里的交通stream量还是有点困惑。 比方说,我在一台新的主机上安装Docker。 我认为docker0
是在安装时创build和configuration的。 所以现在我的主机上有这个docker0
以太网桥。
现在让我们说我在我的新的Docker主机上启动一个容器:
docker run -it -p 9200:9200 -d --name myapp myapp
由于我没有指定networking驱动程序,因此默认情况下为我select了bridge
。 根据以上文档的介绍,集装箱现在应该通过docker0
桥发送/接收业务。 然而,在上面的图表中,显示的是没有任何stream量从docker0
的桥梁集装箱(C4,C5,C6)stream入/ docker0
, 我想知道:为什么? 有任何想法吗? 提前致谢!
你是对的,那个scheme不适合正在发生的事情。 我没有看到video,也许这个“图片”是一个具体时刻的快照。 也许我们应该看video来了解上下文。
无论如何,当Docker创builddocker0
接口时,有一些使用新链(DOCKER和DOCKER-ISOLATION)创build的iptables规则。 默认情况下,Docker容器只能从主机访问。 然后在docker run命令中使用-p
选项,您可以直接将主机上的端口映射到容器。 这样做,你可以达到你的主机上的确实在容器上的某个端口。 您可以使用iptables -t nat -L
在运行容器之前和之后检查NAT表。 你会看到映射的区别和规则。
是的,这些容器是在同一个networking上创build的,他们可以尝试在这个networking上进行通信。 默认情况下,用于docker的networking范围是172.17.0.0/16,所以你的第一个容器是172.17.0.2,第二个容器是172.17.0.3,依此类推。 (172.17.0.1是你的docker0 ip)。