1.Docker网络模式

Docker默认有三种网络模式,生成容器时不指定网络模式默认使用bridge(桥接)模式。

使用命令查看当前Docker所有的网络模式

  1. [root@node1 ~]# docker network ls
  2. NETWORK ID NAME DRIVER SCOPE
  3. 9cfa7b1abd07 bridge bridge local
  4. 54f94840000c host host local
  5. 79d33826245f none null local

1.1host模式(和宿主机共享网络)

连接到host网络的容器共享Docker host的网络栈,容器的网络配置与host完全一样。**
**可以通过-network-host 指定使用host网络

  1. docker run -it --network=host busybox

Docker网络详解 - 图1

Docker网络详解 - 图2

在容器中可以看到host的所有网卡,并且连hostmame 也是host的。host网络的使用场景又是什么呢? 直接使用Docker host的网络最大的好处就是性能,如果容器对网络传输效率有较高要求,则可以选择host网络。当然不便之处就是牺牲一些灵活性,比如要考虑端口冲突问题,Docker host 上已经使用的端口就不能再用了。
Docker host的另一个用途是让容器可以直接配置host网路,比如某些跨host的网络解决方案,其本身也是以容器方式运行的,这些方案需要对网络进行配置,比如管理iptables ### 1.2none模式 none网络就是什么都没有的网络。挂在这个网络下的容器除了lo,没有其他网卡。**容器创建时,可以通过-network=none指定使用none网络。 shell docker run -it --network=none busybox 一些对安全性要求高并且不需要联网的应用可以使用none网络。 比如某个容器的唯一用途是生成随机密码,就可以放到none网络中避免密码被窃取。当然大部分容器是需要网络的。 ### 1.3bridge模式(默认方式)-网桥模式 Docker安装时会创建一个命名为docker0的Linux bridge。如果不指定-network,创建的容器默认都会挂到docker0上** 使用了 bride 创建的容器,其网络与主机以及其他容器隔离,以太网接口、端口、路由表以及 DNS配置 都是独立的。每个容器都好像是一个独立的主机 ,这便是 bridge(网桥)的作用。但是因为 docker0 的存在,对于容器来说,可以通过 ip 访问别的容器。 容器A 可以通过 172.17.0.3 访问容器B,同样,主机也可以使用这个 ip 访问容器B 中的服务。

Docker网络详解 - 图3

1.4 link

—link 就是我们在hosts配置中增加了一个172.18.0.3 tomcat02 3128….. 域名解析

目前docker已经不建议使用 —link了

docker0问题:他不支持容器名连接访问

2.自定义网络

2.1 我们可以自定义一个网络!

docker network create —driver bridge —subnet 192.168.0.1/16 —gateway 192.168.0.1 mynet(自定义网络名称)

创建网络 —driver 是网络模式,—subnet是子网掩码,后面的/16(还有/24)表示可以生成6万多个ip, —gateway是网关地址Docker网络详解 - 图4 Docker网络详解 - 图5 —- ### 2.2测试: 创建两台docker容器 docker run -d -P —name tomcat-net-01 -net mynet tomcat Docker网络详解 - 图6 再次查看我们自定义的网络,会发现两台容器都在里面 Docker网络详解 - 图7 测试能不能相互ping通(因为tomcat最小安装没有ping命令,所以用curl测试),发现是可以相互ping通的。

我们自定义网络docker是可以帮助我们维护好对应的关系,推荐我们平时使用这样的网络!

Docker网络详解 - 图8

Docker网络详解 - 图9

好处:

redis -不同的集群使用不同的网络,保证集群是安全健康的

mysql -不同的集群使用不同的网络,保证集群是安全健康的

画板