一.docker网络模式

1.docker有三种模式(bridge、host、none)

docker 使用wifi网络 docker网络设置_ubuntu

二.docker基本网络配置

bridge:

docker安装时会创建一个名为 docker0 的Linux bridge,新建的容器会自动桥接到这个接口。

docker 使用wifi网络 docker网络设置_自定义_02


默认选择的就是bridge

docker 使用wifi网络 docker网络设置_docker 使用wifi网络_03


查看宿主机网桥

root@server2 ~]# brctl show
bridge name	bridge id		STP enabled	interfaces
docker0		8000.02421e6ebdb5	no		veth128d595

docker 使用wifi网络 docker网络设置_自定义_04


没有brctl命令,可在真机查看

docker 使用wifi网络 docker网络设置_自定义_05


docker 使用wifi网络 docker网络设置_ubuntu_06


docker 使用wifi网络 docker网络设置_ubuntu_07


在宿主机上查看docker容器网络产生的进程

docker 使用wifi网络 docker网络设置_ubuntu_08

host:

host模式可以让容器共享宿主机网络栈,这样的好处是外部主机与容器直接通信,但是容器的网络缺少隔离性。

docker 使用wifi网络 docker网络设置_自定义_09


1.创建以网络类型为host的vm2

docker 使用wifi网络 docker网络设置_自定义_10


none:

none模式是指禁用网络功能,只有lo接口

docker 使用wifi网络 docker网络设置_ubuntu_11

container:

docker 使用wifi网络 docker网络设置_ubuntu_12


1.使用container模式运行容器并且查看网络

docker 使用wifi网络 docker网络设置_docker_13

2.运行新的容器与container的网络模式下的数据库进行连接

docker 使用wifi网络 docker网络设置_docker 使用wifi网络_14

三.高级网络配置

自定义网络模式,docker提供了三种自定义网络驱动:bridge、overlay、macvlan

1.创建自定义网桥

docker 使用wifi网络 docker网络设置_docker_15


查看详细信息

docker 使用wifi网络 docker网络设置_ubuntu_16

2.以自定义网桥运行容器

docker 使用wifi网络 docker网络设置_docker 使用wifi网络_17

3.以自定义网桥运行容器,并测试两个容器能否ping通

docker 使用wifi网络 docker网络设置_ubuntu_18


docker之间的互连

指定网段和网关:–subnet 、–gateway

1.创建自定义网络,指定网段及其网关

docker 使用wifi网络 docker网络设置_docker_19


2.使用自定义网络运行容器

docker 使用wifi网络 docker网络设置_自定义_20


使两个不同网段的容器通信

docker 使用wifi网络 docker网络设置_ubuntu_21


外网访问容器(通过端口影射)

docker 使用wifi网络 docker网络设置_ubuntu_22

docker 使用wifi网络 docker网络设置_自定义_23


docker 使用wifi网络 docker网络设置_自定义_24


外网访问容器用到了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

docker 使用wifi网络 docker网络设置_自定义_25

[root@server2 ~]# ip addr show | grep eth
[root@server2 ~]# ip link set eth1 promisc on
[root@server2 ~]# ip addr show | grep eth1

docker 使用wifi网络 docker网络设置_docker 使用wifi网络_26


注意:

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

docker 使用wifi网络 docker网络设置_docker 使用wifi网络_27


docker 使用wifi网络 docker网络设置_自定义_28