Docker网络有四个不同的原生网络组成分别是none 网络,host网络、user-defined网络、bridge网络。
Docker安装的时候就会自动创建none host bridge网络,但是user-degined是不会自动创建的
none网络,其实就是相当于我们的一个没有连接到外网的网络,ta是一个封闭性网络,这个网络优点在于安全性高。
Host网络:容器如果连接到docker host 网络栈的话,那么ta和host是共享网络的。使用host网络的优点在于性能上比较好、传输速率也快,但是也有一些限制,就是如果使用过的端口就不能够重复使用了,不然会产生冲突的。
Bridge网络:在docker安装的时候会创建了一个名为docker0的bridge。在默认情况下容器时连接到这个docker0上。如果容器的使用bridge网络,会创建一对veth pair 的网卡,一端连接在容器上,另一端时会连接到dockr0上,这个有点像三层交换,连接到两个主机,这里不要开启路由功能,自带的路由功能。
User-defined网络。在这个里涉及一个很想dhcp的东西,就是需要设置subnet,这个相当于dhcp的地址池,如果不设置这个,就会给容器下发ip地址,还不能给容器设置静态的ip地址。两个容器连接到同一个bridge的时候是可以相互进行通信的 ,但是 如果涉及到跨bridge网络的时候就会出现报错。但是可以通过设置跟那个网络设备一样,加个路由器,然后启动转发功能,这样就能够实现跨bridge之间的通信了
容器之间的通信有三个方式:ip、docker dns server joined
1、Ip通信就是通过指定同一个网络的网卡就可以实现了,从上面的那个bridge的拓扑结构上看,我才应该是bridge网络。
Docker dns server:docker dns server就是建立在user-defined的基础上进行 使用这个网络有一个优点就是可以避免在进行部署的时候无法分配IP地址,等部署以后再部署的尴尬。流程就是,首先创建名为1并且一个带有地址池的容器,然后在创建连接到1容器的另外两个容器就可以了
Joined网络:joined网络可以让多个容器共享一个网卡。首先创建一个name=1的容器,然后将其他容器连接到这个1的容器上就可以了。(这使用的和docker dns server 有啥差距这里是共享网卡的)
容器和外部连接分为外部访问内部,容器访问外部网络。首先是外部访问内部是需要做个nat转换
外部访问内部。做一个端口映射就可以了。
领取专属 10元无门槛券
私享最新 技术干货