简介
Docker的网络类型:
bridge:多由于独立container之间的通信
host: 直接使用宿主机的网络,端口也使用宿主机的
overlay:当有多个docker主机时,跨主机的container通信
macvlan:每个container都有一个虚拟的MAC地址
none: 禁用网络
默认网络
Docker在默认情况下,分别会建立一个bridge、一个host和一个none的网络:
查看docker的网络类型:
1
docker network ls
结果:
1
2
3
4NETWORK ID NAME DRIVER SCOPE
d07bd0f21b3e bridge bridge local
ee5ae905ef44 host host local
9621fff46513 none null local可以看到,driver类型为bridge的网络的名字也为bridge。在默认情况下,container都是使用的这个bridge的网络,此时container是可以访问外网和其他container的(需要通过IP地址)。
默认的名为bridge的网络是有很多限制的,为此,我们可以自行创建bridge类型的网络。默认的bridge网络与自建bridge网络有以下区别:
端口不会自行发布,必须使用-p参数才能为外界访问,而使用自建的bridge网络时,container的端口可直接被相同网络下的其他container访问。
container之间的如果需要通过名字访问,需要–link参数,而如果使用自建的bridge网络,container之间可以通过名字互访。
查看网络详情
1
docker network inspect bridge
创建网络
1
docker network create my-network
默认创建的网络是
bridge
类型启动两个container,同时加入my-network:
1
2docker run -dit --name alpine1 --network my-network alpine
docker run -dit --name alpine2 --network my-network alpinecontainer之间互访
1
2
3
4
5
6
7
8
9
10
11
12
13
14docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f3ff8569849a alpine "/bin/sh" 48 seconds ago Up 48 seconds alpine2
50093c07f9d0 alpine "/bin/sh" 2 minutes ago Up 2 minutes alpine1
docker exec -it alpine1 sh
cat /etc/hosts
172.18.0.2 50093c07f9d0 # 这是alpine1自己
ping alpine2
PING alpine2 (172.18.0.3): 56 data bytes
64 bytes from 172.18.0.3: seq=0 ttl=64 time=0.172 ms
64 bytes from 172.18.0.3: seq=1 ttl=64 time=0.154 ms
64 bytes from 172.18.0.3: seq=2 ttl=64 time=0.154 ms