docker网络模式
1、bridge模式,--net=bridge(默认,可省略)
2、host模式,--net=host
3、container模式 使用--net =container:指定容器名
4、none模式,--net=none
5、overlay
overlay
Docker原生的跨主机多子网模型
底层需要etcd这样的KV存储系统进行消息同步,核心是通过linux网桥与vxlan隧道实现跨主机划分子网
每创建一个网桥,Docker会在主机上创建一个沙盒(实质是Network Namespace),在沙盒中创建名为br0的网桥,在网桥上增加vxlan接口。vxlan接口有一个ID号(256-1000),相同ID号的vxlan可以通信。当添加一个容器到某网络上时,Docker会创建一对veth pair,一端接br0网桥,一端接容器的Network Namespace,并将br0的IP设为容器的网关,实现容器加入网络的目的
Docker创建的沙盒保存在/var/run/docker/netns/46acfc9bbb77
ln -s /var/run/docker/netns/46acfc9bbb77 /var/run/netns/46acfc9bbb77
ip netns exec 46acfc9bbb77 ip addr show
bridge
Docker的NAT网络模型
Docker网络的默认模式,Docker daemon启动时,会创建docker0网桥
容器启动时,Docker会创建一对veth pair(虚拟网络接口)设备,它的特点是成对出现,从一端进入的数据会同时出现在另一端
Docker会将一端挂载到docker0网桥上,另一端放入容器的Network Namespace
默认子网 172.17.42.1/16
ip addr show docker0
route -n
brctl show
host
与主机共享Network Namespace,容器不会创建自己的网卡,配置IP等,而是使用宿主机的IP和端口。而文件系统和进程列表还是和宿主机隔离,不安全
docker run -it --net=host nginx:latest bash
容器的网络配置信息与所在的主机完全相同。容器可以操纵主机的网络配置。
如果重复运行一个容器,并使用相同端口,则不可行,因为端口被占用
container
与另一个运行中的容器共享network namespace,容器不会创建自己的网卡,配置IP等,而是使用指定容器的IP和端口。两个容器的文件系统和进程列表还是隔离的
将容器B运行在容器A的网络模式上,容器A使用briage网络模式
docker run --net=container:containerA -itd --name=containerB busybox
如果用docker network inspect bridge查看bridge网络,不会看到容器containerB运行在该网络
连上containerB看看网络信息,发现containerB和containerA的网络接口信息完全相同,说明两个容器共享一个网卡eth0
none
docker不会为容器配置网卡和IP,需要我们自行配置网卡和IP
docker run -it --net=none nginx ip addr show
此模式下创建的不会创建网络,容器里只有lo口
此模式的容器不能互相通信,或与外部通信
用户仍然可以手动配置网络,若想使用pipework手工配置指定docker容器的ip地址,必须要在none模式下才可以
创建网络模型,自定义名字
docker network create docker03 --subnet=172.30.0.0/16 -o com.docker.network.bridge.name=docker03
新建docker01网络模型
docker network create --subnet=172.30.0.0/16 docker01
docker network list
docker network inspect docker01
使用自定义网桥启动容器并映射端口
docker run -itd --network=docker01 -p 8080:80 nginx
docker network create --driver bridge docker02
标签:容器,network,--,网络,Docker07,docker,Docker
From: https://www.cnblogs.com/lixunblogs/p/18167363