一.docker网络模式
1.docker有三种模式(bridge、host、none)
二.docker基本网络配置
bridge:
docker安装时会创建一个名为 docker0 的Linux bridge,新建的容器会自动桥接到这个接口。
默认选择的就是bridge
查看宿主机网桥
root@server2 ~]# brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.02421e6ebdb5 no veth128d595
没有brctl命令,可在真机查看
在宿主机上查看docker容器网络产生的进程
host:
host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。
1.创建以网络类型为host的vm2
none:
none模式是指禁用网络功能,只有lo接口
container:
1.使用container模式运行容器并且查看网络
2.运行新的容器与container的网络模式下的数据库进行连接
三.高级网络配置
自定义网络模式,docker提供了三种自定义网络驱动:bridge、overlay、macvlan
1.创建自定义网桥
查看详细信息
2.以自定义网桥运行容器
3.以自定义网桥运行容器,并测试两个容器能否ping通
docker之间的互连
指定网段和网关:–subnet 、–gateway
1.创建自定义网络,指定网段及其网关
2.使用自定义网络运行容器
使两个不同网段的容器通信
外网访问容器(通过端口影射)
外网访问容器用到了docker-proxy和iptables DNAT
宿主机访问本机容器使用的是iptables DNAT
外部主机访问容器或容器之间的访问是docker-proxy实现
使用macvlan解决docker跨主机网络
1.为server1、server2两个虚拟机添加网卡,并打开混杂模式
[root@server1 ~]# ip addr show | grep eth
[root@server1 ~]# ip link set eth1 promisc on
[root@server1 ~]# ip addr show | grep eth1
[root@server2 ~]# ip addr show | grep eth
[root@server2 ~]# ip link set eth1 promisc on
[root@server2 ~]# ip addr show | grep eth1
注意:
1.因为多个MAC地址的网络数据包都是从同一块网卡上传输,所以需要打开网卡的混杂模式
2.如果不开启混杂模式,会导致macvlan网络无法访问外界,具体在不使用vlan时,表现为无法ping通路由以及同一网络内他其他主机
2.在两个虚拟机创建以macvlan模式为网络的容器
server1:
[root@server1 ~]# docker network create -d macvlan --subnet 172.25.0.0/24 --gateway 172.25.0.1 -o parent=eth1 macvlan1
[root@server1 ~]# docker run -it --name vm1 --network=macvlan1 --ip=172.25.0.11 ubuntu
[root@server1 ~]# docker run -it --name vm2 --network=macvlan1 --ip=172.25.0.12 ubuntu
server2:
[root@server2 ~]# docker network create -d macvlan --subnet 172.25.0.0/24 --gateway 172.25.0.1 -o parent=eth1 macvlan1
[root@server2 ~]# docker run -it --name vm1 --network=macvlan1 --ip=172.25.0.10 ubuntu
此时发现server1内部两个容器不能ping通,server1、2之间也不能ping通
原因:为开启eth1网卡
ip link set eth1 up