host模式
共享主机资源(多个容器之间并不互同)
docker run -it --name host --network host ubuntu
none
只有本地回环接口
docker run -it --name noe --network none ubuntu
自定义网络
bridge(自带host解析能力):同一网段下可以互相通信
创建网络
指定网络 --subnet 172.19.0.0/24
指定网关 --gateway 172.19.0.1
指定IP --ip 172.19.0.100
默认为bridge
docker network create my_net1
在这个网络下创建两个容器
docker run -it --name vm1 --network my_net1 ubuntu ---172.18.0.2
docker run -it --name vm2 --network my_net1 ubuntu----172.18.0.3
再创建一个网络(指定网络)
docker network create --subnet 172.19.0.0/24 --gateway 172.19.0.1 my_net2
创建两个容器
docker run -it --name vm3 --network my_net2 ubuntu----172.19.0.2
docker run -it --name vm4 --network my_net2 ubuntu----172.19.0.3
此时两个网段的主机不能不同,于是添加网络my_net2至容器vm1
docker network connect my_net2 vm1
查看网卡
此时可以ping通
join容器(多个容器搭建服务时候,可以使用localhost进行通信)
docker run -it --name vm10 --network my_net1 ubuntu
docker run -it --name vm11 --network container:vm10 ubuntu
–link模式
link模式可以用来连接两个容器
--link <name or id>:别名
使用
docker run -d --name vm20 -p 80:80 nginx:1.16
docker run -d --name vm21 --link vm20:web nginx:1.16
发现访问vm20和vm21都能得到网页结果
通过SNAT访问外网
外网访问容器通过端口映射实现
macvlan(可以实现跨主机的容器的通信)
两台主机均添加一块网卡,设置网卡模式为混杂模式,并启动
ip link set eth1 promisc on
ip link set up eth1
添加一个新的网络,设置为macvlan模式
server1
docker network create -d macvlan --subnet 172.20.0.0/24 --gateway 172.20.0.1 -o parent=eth1 macvlan_net1
docker run -it --name server1 --network macvlan_net1 --ip 172.20.0.100 ubuntu
server2
docker network create -d macvlan --subnet 172.20.0.0/24 --gateway 172.20.0.1 -o parent=eth1 macvlan_net2
docker run -it --name server2 --network macvlan_net2 --ip 172.20.0.200 ubuntu
测试(使用容器server2去ping容器server1)
overlay /