企业版Docker<13>——Docker容器通信(实现容器与外网通信)


docker(12)和docker(11)已经介绍过原生网络和自定义网络

前言

建议使用自定义的网桥来控制那些容器可以相互通信,还可以自动DNS解析容器名称到IP地址
Docker提供了创建这些网络的默认网络驱动程序,你可以创建一个新的Bridge网络,Overlay或Macvlan网络

你还可以创建一个网络插件或远程网络进行完整的自定义和控制
你可以根据需要创建任意数量的网络,并且可以在任何给定时间将容器连接到这些网络中的零个或多个网络
此外,您可以连接并断开网络中的运行容器,而无需重新启动容器
当容器连接到多个网络时,其外部连接通过第一个非内部网络以词法顺序提供

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

在这里插入图片描述

二、外网如何访问容器?

端口映射,-p指定对应端口
外网访问容器用到了docker-proxy和iptables DNAT
宿主机访问本机容器使用的是iptables DNAT
外部主机访问容器或容器之间的访问是docker-proxy实现
外部主机-->宿主机(eth0)-->docker-proxy(外部主机访问容器时通过docker-proxy处理数据包,不是防火墙)-->docker0(172.17.0.1)-->容器在这里插入图片描述

三、实验过程:

实验环境:rhel7.3
首先查看当前的iptable的nat表火墙策略

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

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
演示一下如何实现两个容器的ip一模一样,相当于原生网络的host模式
在这里插入图片描述
在这里插入图片描述
演示完毕并且清空实验环境
在这里插入图片描述

创建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表的最后一行看到使用了端口转发

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
先以默认的网络运行一个容器vm1
然后使用link方法运行另外一个容器vm2
在这里插入图片描述在这里插入图片描述
env:环境变量
在这里插入图片描述在这里插入图片描述在这里插入图片描述
#外部主机访问容器
外部主机-->宿主机(eth0)(172.25.10.1:80)-->DNAT-> 172.17.0.2:80(容器地址)
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#外部主机访问容器 (宿主机)
外部主机–>宿主机(eth0)(172.25.10.1:80)–>DNAT-> 172.17.0.2:80(容器地址)

#外部主机访问容器 (物理机)
外部主机–>宿主机(eth0)–>docker-proxy(外部主机访问容器时通过docker-proxy处理数据包,不是防火墙)–>docker0(172.17.0.1)–>容器
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实现了真机可以访问宿主机上的容器
在这里插入图片描述
清理实验环境
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值