docker的网络模式
在使用docker run创建Docker容器时,可以用 --net 选项指定容器的网络模式,Docker可以有以下4种网络模式
- host模式:使用 --net=host 指定。
- none模式:使用 --net=none 指定。
- bridge模式:使用–net=bridge 指定,默认设置。
- container模式:使用 --net=container:NAME_or_ID 指定。
bridge
默认情况下,一个容器网络会是bridge模式
容器网络会和docker0这块网咖相连接
ping 所创建容器的网络会ping 通
再创建容器 再出现桥接和新的网卡
容器内网络和宿主机网络是连接的,比如1,2或 10,11这样
docker rm -f `docker ps -aq` 释放所有容器
host
docker run -d --name nginx --network host nginx 与宿主机共享网络
没有虚拟网络对和虚拟接口
注意:此模式容易造成资源哄抢
通过访问宿主机端口就可以访问容器
此时,通过postrouting会有一个伪装
如果一样的服务启动多次,因为与宿主机共享的缘故,会争抢端口,只有一个启动成功
总结:外部主机与容器直接通信,高效,但是没有隔离,网络安全性差
none
不配置网络,个别服务会有用到
容器是相对隔离
在默认桥接模式下,查看命名空间
这是一种相对隔离的方式,没有绝对的安全
自定义网络
bridge
自定义桥接网络有解析(DNS解析)
每多创建一个自定义网络+容器,都会多处一个网卡,连接着容器ip,这种方式创建的容器ip成单调递增
注意不要违背容器的隔离性
在这种模式下:
当用同一个自定义网络创建一个容器,ip为ip1然后不保存退出
创建第二个容器,ip就会是ip1,保存退出
再启动一个容器,ip就会是新的ip为ip2,相互可以ping通
删除自定义网络
docker network rm xxxx
==指定ip,gateway,subnet
- -ip只能使用在自定义网络上==
让不同网桥的容器通信
创建两个容器
给vm2加双网卡,ping通
Docker 容器通信
1.自定义网络下两个容器使用同一个网络
2.joined与其它容器共享
可以与宿主机通信
3.link链接
进入后台运行的容器
link链接之间可以共享资源
但是,一但别的服务占用此ip,在vm2端查看ip可以同步,但是变量不会同步
容器访问外网
外网访问容器
1.端口映射
2.host网络与宿主机共享端口
跨主机的容器网络
macvlan模式
两台物理机之间分别有2个网卡
eth1开机激活
打开混杂模式,开启多个子接口
在两台dokcer主机上创建macvlan网络
两台主机网络通畅
没有桥接
互通:
生产环境中网卡不够用
创建更多个子接口
docker network create -d macvlan --subnet 172.21.0.0/24 --gateway 172.21.0.1 -o parent=eth1.1 mynet2