Docker_02_网络
- Docker网络
- Docker0
- evth-pair
- 容器链接
- Docker Networking
Docker网络
Docker0
Docker安装时,默认在主机上安装Docker0网桥
1)只要安装了Docker,就会有Docker0网卡(桥接模式)
2)容器启动时若没有指定网络模式下,都默认挂载到Docker0网桥上
3)属于Docker0的容器被启动时,Docker0会给该容器分配一个IP地址和网卡
4)通过Docker0就可实现容器和主机、容器和容器之间的互通(evth-pair技术)
5)Docker0特点:默认模式,域名不能访问(必须通过IP地址)
//容器被删除,对应IP地址和网卡也会被自动删除
缺陷:使用容器的IP做硬编码,若容器重启,则无法连接
//重启后,Docker会改变容器的IP
如:查看Docker0网卡相关信息
如:创建两个Tomcat容器,观察网卡变换情况
1)ip addr查询主机网卡信息
2):启动一个Tomcat01容器,并查看其网卡信息
3)再次ip addr查询主机网卡信息
4)再启动一个Tomcat02容器,并查看主机网卡信息
5)再次ip addr查询主机网卡信息
//宿主机中网卡以eth0为前缀命名,容器中网卡以veth为前缀命名
如:Docker0通过evth-pair技术实现容器可访问外网
evth-pair
evth-pair:一对虚拟设备接口(总是成对出现)
1)一个连着协议,一个彼此相连(实现设备之间的桥梁)
如:续容器之间的通信就通过Docker0和evth-pair技术
如:容器Tomcat02通过Docker0去Ping容器Tomcat01的IP地址
如:新建容器Tomcat03去Ping容器Tomcat02
//容器之间互相Ping容器名是Ping不通的
容器链接
–link选项:实现容器之间的单向访问
格式:–link 被链接容器名:链接别名
1)本质:配置容器的hosts文件,使访问容器名时自动访问该地址(映射)
2)链接别名可省略,默认为被链接容器名
3)仅链接容器能主动访问被链接容器,且被链接容器不需向主机开放端口
4)仅能链接同一主机内的容器
如:新建容器Tomcat04去Ping容器Tomcat02
1)Tomcat04容器ping容器Tomcat02,并查看Tomcat04的/etc/hosts
2)Tomcat02容器ping容器Tomcat04,并查看Tomcat02的/etc/hosts
//反向是ping不通的(除非同时配置)容器tomcat02去ping容器tomcat04
Docker Networking
Docker Networking:用于容器之间连接的网络
1)容器可跨越宿主机通信
//由于用户可以自行创建网络,也称自定义网络
network命令:Docker网络操作
指令格式:docker network 选项
选项 | 含义 |
ls | 列出主机内所有网络信息 |
inspect | 列出指定网络的具体信息 |
create | 创建自定义网络(默认为bridge类型) |
connect | 将容器连接至指定网络 |
disconnect | 断开容器与网络的连接 |
prune | 删除未使用的网络 |
rm | 删除指定一个或多个网络 |
如:查看当前主机Docker所有网络信息
create选项:创建自定义网络
格式:create 选项 选项值
选项 | 含义 |
–driver | 指定网络模式(默认为:bridge) |
–subnet | 指定网络子网掩码 |
–gateway | 指定网关 |
如:创建自定义网络mynet
如:新建容器tomcat05和tomcat06分配在同一网络下,两个容器互相ping
1)新建容器,分配网络,并互相ping
2)查看mynet网络配置文件
//记录了两个容器网络相关信息,所以同一网络下的容器是可相互Ping通的
connect选项:将容器连接至指定网络
格式:connect 选项 选项值
选项 | 含义 |
–alias | 指定容器在该网络的别名 |
–ip | 指定容器在该网络的IP |
如:使用容器tomcat01去ping容器tomcat05
1)tomcat01容器ping容器tomcat05,在加入对方网络后,再ping一次
2)tomcat01属于Docker0网络,tomcat05属于mynet网络
//同一网络下的容器的/etc/hosts文件仅有该网络下的其他容器的域名和IP,且该文件会根据网络配置文件动态更新(即使容器重启,也仍可找到)