docker network 使用

巧了我就是萌 提交于 2019-12-09 19:37:25

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 使用方式请查看官方文档

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!