Docker学习(13)——Docker容器通信(实现容器与外网通信)

前面学习了原生网络和自定义网络

前言

建议使用自定义的网桥来控制哪些容器可以相互通信,还可以自动DNS解析容器名称到IP地址
Docker提供了创建这些网络的默认网络驱动程序,你可以创建一个新的Bridge网络,Overlay或Macvlan网络
你还可以创建一个网络插件或远程网络进行完整的自定义和控制
你可以根据需要创建任意数量的网络,并且可以在任何给定时间将容器连接到这些网络中的零个或多个网络
此外,您可以连接并断开网络中的运行容器,而无需重新启动容器
当容器连接到多个网络时,其外部连接通过第一个非内部网络以词法顺序提供

1.容器如何访问外网是通过iptables的SNAT实现的?

Docker学习(13)——Docker容器通信(实现容器与外网通信)_第1张图片

2.外网如何访问容器?

端口映射,-p指定对应端口
外网访问容器用到了docker-proxy和iptables DNAT
宿主机访问本机容器使用的是iptables DNAT
外部主机访问容器或容器之间的访问是docker-proxy实现

Docker学习(13)——Docker容器通信(实现容器与外网通信)_第2张图片

3.演示过程

查看当前iptable的nat表火墙策略

[root@server1 ~]# iptables -t nat -nL

Docker学习(13)——Docker容器通信(实现容器与外网通信)_第3张图片

Docker学习(13)——Docker容器通信(实现容器与外网通信)_第4张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第5张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第6张图片
演示一下如何实现两个容器的ip一模一样,相当于原生网络的host模式
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第7张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第8张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第9张图片
演示完毕并且清空实验环境
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第10张图片

创建nginx的容器,配置端口映射。
[root@server1 ~]# docker run -d --name nginx -p 80:80 nginx
[root@server1 ~]# docker port  nginx 
80/tcp -> 0.0.0.0:80
[root@server1 ~]# netstat -ntpl | grep 80
tcp6       0      0 :::80                   :::*                    LISTEN      3901/docker-proxy   
[root@server1 ~]# iptables -t nat -nL
我们可以在nat表的最后一行看到使用了端口转发

在这里插入图片描述
在这里插入图片描述
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第11张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第12张图片
先以默认的网络运行一个容器vm1
然后使用link方法运行另外一个容器vm2
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第13张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第14张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第15张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第16张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第17张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第18张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第19张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第20张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第21张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第22张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第23张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第24张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第25张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第26张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第27张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第28张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第29张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第30张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第31张图片

Docker学习(13)——Docker容器通信(实现容器与外网通信)_第32张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第33张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第34张图片
在这里插入图片描述
在这里插入图片描述
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第35张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第36张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第37张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第38张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第39张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第40张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第41张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第42张图片
在这里插入图片描述
在这里插入图片描述
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第43张图片
在这里插入图片描述
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第44张图片
在这里插入图片描述
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第45张图片
实现了真机可以访问宿主机上的容器
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第46张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第47张图片

清除实验环境
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第48张图片
Docker学习(13)——Docker容器通信(实现容器与外网通信)_第49张图片

你可能感兴趣的:(linux运维——企业实战)