一、本机出现的docker网桥问题
源于自己需要在一个linux中,使用容器搭建一个flink集群环境
【问题背景】
在已有的image上,运行3个不同的容器,然后对3个容器进行通信,需要了解docker网络的机制问题
【问题出现】
无意中看到了ip addr,看到有几个莫名的网络网桥出现

【概念】
虚拟网桥
bridge模式是Docker默认的网络配置,会为每一个容器分配Network命名空间、设置IP地址等。
Docker启动时,自动在主机上创建虚拟网桥docker0,并随机分配一个本地空闲私有网段的一个地址给docker0接口。
虚拟网桥docker0在内核层连通了其他的物理或虚拟网卡,将所有容器和本地主机都放到同一个网络。
docker0接口的默认配置包含了IP地址、子网掩码等,可以在docker服务启动的时候进行自定义配置。
【本机状态】查看docker 配置的网卡
【知识点】docker内部默认的网络配置机制
查看docker网络状态

Bridge是容器启动的默认网络模式。
当创建一个Docker容器时,容器会自动获得Bridge网段的一个空闲IP地址,并使用docker0接口的IP地址作为容器的默认网关,从而建立了主机和容器之间的一个虚拟共享网络。
主机可以跟容器通信,容器之间也可以相互通信。
容器通过docker0网桥以nat方式连接外网,外网通过端口映射(-p参数)连接到容器。
【参考链接】https://www.cnblogs.com/anliven/p/6804496.html
【验证猜想】
1、如果容器中是通过主机进行nat访问外界网络,那么我现在在容器内
exec –it bash
ping www.baidu.com
2、是不是可以访问?
如果可以:确实容器内可以访问外部
否则:容器内不能访问网络
【实践过程记录】
1、选择nginx的容器进行访问
2、ping www.baidu.com,没有ping命令
3、更新apt-get update
4、安装iputils-ping
5、ping www.baidu.com
【结论】:容器内部的镜像容器可以访问外部网络,借助的是linux101的网卡
路径:容器1(mysql)-> linux1 (hadoop101) -> 主机 -> 百度
nat -> 桥接 -> 外网访问
【说明】
其实docker内部是一个linux,ubuntu版本的,不是centos的
二、深入理解docker网络问题
2.1 问题
【回到本来的问题:docker内部的两个容器怎么通信呢?】
先看看外部访问docker内部的容器
docker的三种网络模式
2.3 docker实战网络部分
【继续】
【本次操作实战】
1、在容器没有启动时,是没有docker网卡的
2、查看虚拟机本机的网卡情况
发现也只有自己自带的3个网卡(2+1docker0)
2.3.1 安装部署docker容器
【准备条件】
安装docker
docker拥有mysql:least镜像
【命令】启动两个tomcat
docker run -d —name tomcat002 -p 8092:8080 tomcat
docker run -d —name tomcat001 -p 8091:8080 tomcat
docker ps
【查看网络情况】
【进入bridge模式进行查看】
查看刚刚启动的容器的ip
【分别进入到容器中查看网卡】
可见确实分配了网卡
【进入到两个内部进行互相通信】
tomcat1和tomcat2能够通信
2.3.2 桥接模式

由于容器是使用桥接模式,每个启动的容器都有一个网卡,而这个网卡连接到docker0中,对于宿主机中,也需要有两个对应的网卡进行对应
上面已经验证,桥接模式容器可以互相访问
【容器是否能够访问外网】
docker exec -it tomcat001 curl -I http://www.baidu.com
【查看单个容器的网卡】docker inspect tomcat001

2.3.3 host模式

【采用host方式创建新的容器】
docker run –d –name tomcat-host –network host tomcat
查看docker network inspect host

host模式没有分配网络ip和网关
【查看docker中tomcat-host容器的网卡】
显示和主机的网卡一模一样
host模式下只能启用一个主机,因为宿主机只有一个ip
2.3.4 none模式
创建none网络的容器
查看网络情况
2.3.5 自定义网络实现
自定义网络进行连接(默认为bridge)
查看网络状态
【创建新的网络】docker network create custom
【查看custom网络情况】分配给的是172.18.0.0子网网段
【基于自定义网络,运行一个tomcat服务器】
【查看tomcat服务器的网络情况】
【用自定义网络的tomcat服务器和之前的tomcat服务器进行通信】
通信失败,因为不在一个网段中
【将两个不同的网段的网络进行联通】
docker network connect custom tomcat001
【查看custom网络中的情况】加入了一个不同网段的网络
这个新加的是在custom中加入的
【对应的也在tomcat001中加了一个对应的网卡】
对应出现
【两者可以互相连通】
三、docker数据存储




