Docker网络管理

446 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Docker默认使用bridge(单主机互联)和overlay(可跨主机互联)两种网络驱动来进行容器的网络管理,用户还可以自定义网络驱动插件进行Docker容器的网络管理。

Docker默认网络管理

查看Docker现有网络

docker network ls

202208220916922.png

  • bridge: 默认的bridge驱动网络,也是容器创建时默认的网络管理方式,配置后可以与宿主机通信从而实现互联网通信
  • host、null: 无网络,容器添加到这两个网络时不能与外界网络通信

创建并启动容器

docker run -itd --name networktest ubuntu

查看网络详情

docker network inspect bridge

image-20220818132810357

需要注意的是:bridge、host、none 这三种网络是在非集群环境下Docker提供的默认网络,在Docker Swarm集群环境下,除了这三种网络,Docker还提供了 docker_gwbridgeingress 两种默认网络。

自定义网络

在Docker中,可以自定义bridg、overlay网络,也可以创建network plugin(网络插件)或者远程网络以实现容器网络的完全定制和控制。

Bridge networks(桥接网络)

为了保证容器的安全性,可以基于bridge的驱动创建新的bridge网络,可以较好的实现容器隔离。但这种自定义的bridge网络只适用于单主机的小型网络环境管理

创建自定义网络

在Docker主机上可以使用 docker network create 命令创建网络:

docker network create --driver bridge isolated_nw
  • --driver: 可简写为-d。用于指定网络驱动类型
  • isolated_nw: 新创建的网络名称

使用自定义网络启动容器

docker run -itd --network isolated_nw --name nwteat ubuntu

通过如下命令查看启动后的容器网络详情:

docker inspect nwteat

202208220919622.png 可以看到,新启动的容器使用的网络是自定义的网络isolated_nw。

为容器添加网络管理

名为nwteat的容器只有自定义的isolated_nw一种网络管理,我们可以为该容器添加其他网络管理方式:

docker network connect bridge nwteat

202208220920521.png

断开容器网络连接

可以为容器连接网络,也可以断开网络:

docker network disconnect isolated_nw nwteat

移除自定义网络

docker network rm isolated_nw

Overlay network in swarm mode(Swarm集群中的覆盖网络)

在Swarm集群环境下可以创建基于overlay驱动的自定义网络。为了保证安全性,Swarm集群使自定义的overlay网络只适用于需要服务的群集中的节点,而不会对外部其他服务或者Docker主机开放。

Custom network plugins(定制网络插件)

如果前两种自定义网络无法满足需求,可以使用Docker提供的插件来自定义网络驱动插件。自定义网络插件会在Docker进程所在主机上作为另一个进程运行。

容器之间的网络通信

创建容器

创建两个使用默认的bridge网络的容器:

docker run -itd --name test1 ubuntu
docker run -itd --name test2 ubuntu

创建一个使用自定义的test-net网络(预先创建)的容器:

docker run -itd --name test --network test-net ubuntu

为test2容器添加一个自定义的test-net网络连接:

docker network connect test-net test2

上述操作完成后,test1和test2使用默认的bridge网络管理进行通信,test2和test3使用自定义的test-net网络管理进行通信,而test1和test3之间不可通信。

容器地址查看

查看容器的地址可以进入容器内部使用ifconfig命令查看,也可以使用以下命令查看指定容器的网络信息:

docker inspect test

容器连通性

不同容器想要相互通信必须在同一个网络环境下

使用默认bridge网络管理的容器可以使用容器IP进行通信,但无法使用容器名进行通信

使用自定义网络管理的容器既可以使用容器IP通信也可以使用容器名称通信