Docker的网络驱动模型
- bridge:::Docker中默认的网络驱动模型::,在启动容器时如果不指定则默认为此驱动类型。
- host:打破Docker容器与宿主机之间的网络隔离,直接使用宿主机的网络环境,该模型仅适用于Docker17.6及以上版本。
- overlay:可以连接多个docker守护进程或者满足集群服务之间的通信;适用于不同宿主机上的docker容器之间的通信。
- macvlan:可以为docker容器分配MAC地址,使其像真实的物理机一样运行。
- none:即禁用了网络驱动,需要自己手动自定义网络驱动配置。
- plugins:使用第三方网络驱动插件。
在主机上通过命令
docker network ls
可以查看docker中存在的网络
然后通过命令
docker network inspect bridge
查看bridge网络的详细配置
注意:
默认的 bridge 网桥连接,容器之间只能通过IP互相通信,无法通过容器名进行通信。
但是 Docker无法保证容器重启后的IP 地址不变,所以更好的方式是可以通过容器名进行通信,这样即时 Docker 容器重启,也不会影响原来的连接配置。
使用容器名进行通信
为了实现不同容器通过容器名或别名的互连,docker提供了以下几种:
- 在启动docker容器时加入—link参数,但是目前已经被废弃,废弃的主要原因是需要在连接的两个容器上都创建—link选项,当互连的容器数量较多时,操作的复杂度会显著增加。
- 启动docker容器后进入容器并修改/etc/host配置文件,缺点是手动配置较为繁杂。
- ::用户自定义bridge网桥::,这是目前解决此类问题的主要方法。
用户自定义网桥(bridge)
自定义bridge相对于使用默认的bridge的主要优势:
- 自定义bridge可以为容器化的应用程序提供更好的隔离效果和更好的互通性。其中,更好的隔离效果是针对外界网络,更好的互通性则是指同一bridge下的不同容器之间。
- 自定义bridge在容器之间提供了自动DNS解析,不同于默认bridge只能通过IP互连的限制,用户自定义的bridge自动提供了容器间的DNS解析功能,容器间可以通过容器名或别名进行通信。
自定义 bridge
- 创建一个名为 ’my-dnet‘ 的网络
1 |
# docker network create my-dnet |
创建之后,可以通过
docker network ls
查看刚刚创建的网络
- 将某个容器加入 ’my-dnet‘ 网络中
1 |
# docker network connect my-dnet container-name |
- 查看 ’my-dnet‘ 网络详情
1 |
# docker network inspect my-dnet |
到此,我们就可以在不同容器之间使用容器名或别名进行通信。
- 断开原来的 bridge 连接
1 |
# docker network disconnect bridge container-name |
本着互联网开源、开放的精神和宗旨,本站所有内容可以随便传播。如需转载或分享无需说明来源。
有任何疑问或烦恼,欢迎评论区讨论。
暂无回复数据