Docker 有以下网络类型 官方文档
- bridge 多用于独立 container 之间的通信
- host 直接使用宿主机的网络,端口也使用宿主机的。
- overlay 当有多个 docker 主机时,跨主机的 container 通信
- macvlan 每个 container 都有一个虚拟的 mac 地址
- none 禁用网络
默认网络
Docker 在默认情况下,会自动建立一个 bridge, 一个 host 和一个 none的网络:
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
e5b9dbaf44ec bridge bridge local
2bb7ffed7411 host host local
cffd99fe62bc none null local
可以看到,driver类型为bridge的网络的名字也为bridge。在默认情况下,container都是使用的这个bridge的网络,此时container是可以访问外网和其他container的(需要通过IP地址)。
默认的名为bridge的网络是有很多限制的,为此,我们可以自行创建bridge类型的网络。默认的bridge网络与自建bridge网络有以下区别:
- 端口不会自行发布,必须使用-p参数才能为外界访问,而使用自建的bridge网络时,container的端口可直接被相同网络下的其他container访问。
- container之间的如果需要通过名字访问,需要--link参数,而如果使用自建的bridge网络,container之间可以通过名字互访。
- 更多用户自定义 bridge 与默认 bridge 网络区别请查看官方文档
查看网络详情
docker network inspect bridge
自建 bridge 网络
场景: 当多个独立的 container 之间需要彼此访问时,推荐使用自建的 bridge 网络,而不是使用 --link
,
创建如下:
$ docker network create --driver bridge my-network
30b752110d07e30d8facb6448e76033aa430b519a8b14ce1ffd34e65054547d3
启动若干 container 并加入 my-netowkr
docker run -it --rm --name alpine1 --network my-network alpine
docker run -it --rm --name alpine2 --network my-network alpine
其中:-it
提供人机交互;--rm
关闭 container 后,容器自动删除;--name
容器显示的名称;--network
要加入的网络名称。
container 之间相互 ping
$ docker run -it --rm --name alpine1 --network my-network alpine
/ # ping alpine2
PING alpine2 (172.19.0.3): 56 data bytes
64 bytes from 172.19.0.3: seq=0 ttl=64 time=0.321 ms
64 bytes from 172.19.0.3: seq=1 ttl=64 time=0.075 ms
64 bytes from 172.19.0.3: seq=2 ttl=64 time=0.133 ms
64 bytes from 172.19.0.3: seq=3 ttl=64 time=0.077 ms
$ docker run -it --rm --name alpine2 --network my-network alpine
/ # ping alpine1
PING alpine1 (172.19.0.2): 56 data bytes
64 bytes from 172.19.0.2: seq=0 ttl=64 time=0.081 ms
64 bytes from 172.19.0.2: seq=1 ttl=64 time=0.273 ms
64 bytes from 172.19.0.2: seq=2 ttl=64 time=0.116 ms
关于更多 docker network
使用方式请查看官方文档
来源:oschina
链接:https://my.oschina.net/u/2403168/blog/3065151