文章目录
1.docker原生网络
docker在安装好时会有3种网络模型:bridge(默认),host,none
docker network ls
**docker在安装好后会自动新建一个docker0的接口,所有的容器都会自动桥接到docker0 上 **
1.1 桥接模式
桥接模式下容器没有公共ip,只有宿主机可以访问,外部主机不可见。
容器要访问外网必须通 过宿主机的NAT规则,所以在物理机上需要打开ip_forward路由转发功能。
容器启动时,默认会生成一个网络对,一头连接容器,一头连接docker0,类似于网线的两端,实现了容器和宿主机的数据互通。
docker run -d --name nginx nginx
brctl show
可以看到桥接到了docker0上
1.2 host模式
host模式可以让容器共享宿主机的网络栈,可以让外部直接与容器通信,但是少了容器网络的隔离性。
docker run -it --name vm1 --network host ubuntu
在容器内执行ipaddr,看到和宿主机一样的网卡信息
ip addr
##发现确实和容器内看到的一致
1.3 none模式(禁用网络模式)
有一些应用不需要连接外网,或者存放的数据是重要或秘密数据,可以使用none模式
docker run -it --name vm2 --network none ubuntu
在容器内执行ipaddr,可以看到只有一个lo接口
2.docker自定义网络
三种网络驱动:
1.bridge(自定义的bridge带dns解析功能,可以 直接使用vm1vm2这种名字去访问,不一定要使用ip)
2.overlay
3.macvlan,后面两种用 于跨主机的网络,也就是集群等)
2.1 创建自定义网络
docker network create --help
##可以看到如果不指定驱动,默认使用bridge
docker network create -d bridge my_net1
创建一个名为 my_net1的自定义网络
docker network ls
docker run -it --name vm1 --network my_net1 ubuntu
运行容器, 可以看到分配了一个172.18网段的ip,容器的ip是单调递增,网段也是
docker network inspect my_net1
2.2 自定义网段、网关
docker network create -d bridge --subnet 172.22.0.0/24 --gateway 172.22.0.1 my_net2
指定子网和网关
docker network ls
docker run -it --name vm2 --network my_