Docker 网络-用户自定义网络-网络命令的使用

基于 Docker18.09.0

本文将和大家分享关于 Docker 用户自定义网络的基本命令的使用,有如下命令:

除了默认的名为 docker0 的 bridge 网络 , 还可以创建自己的 bridge 网络或 overlay 网络。

bridge 网络用于在本机内容器之间的互通

overlay 网络用于在不同主机内的容器之间的互通

本文主要针对 bridge 网络进行演示说明, overlay 网络会在以后单独进行讨论。

运行命令 docker network -d 指定要创建什么类型的网络。 假如不使用 -d 参数,会创建 bridge 网络

查看网络源数据

Doker 会为自定义的网络自动分配一个子网(”Subnet”: “172.18.0.0/16″)。

创建一个网络并指定子网为 172.20.0.0/16

在创建一个网络的时候使用 –label 为此网络指定一些元数据信息。 比如下面示例是创建 my-net_label ,并指定网络名称为 my-net_label,项目名为 LB_nginx。

查看元数据,部分数据已截断

更多的选项和参数请执行命令 docker network create –help

您可以将现有容器连接到一个或多个网络。 容器可以连接到使用不同网络驱动程序的网络,比如连接到 bridge 网络或者 overlay 网络。 连接后,容器可以使用其他容器的IP地址或名称进行通信。

说明:

下面在创建网络的时候,使用了 –subnet 为此网络指定了一个子网 172.20.0.0/16

注意现在 container1 和 container2 都被自动连接在默认的桥接网络 bridge 上

查看 my-net 网络,以验证

下面我们运行第三个容器 container3,并且同时使用 –network 指定其加入网络 my-net, 还使用了 –ip 来指定分配给容器的具体 IP 地址。

注意: 只要为容器指定的IP地址是网络子网中的一部分,连接到网络时就可以使用 –ip 或 –ip6 标记将IPv4或IPv6地址分配给容器。 在使用用户定义的网络时以这种方式指定IP地址时,配置将作为容器配置的一部分保留,并在重新加载容器时应用。 使用非用户定义的网络时,不会保留分配的IP地址,无法保证在Docker守护程序重新启动时容器的子网不会更改。

部分内容已截断

可以发现 container2 同时加入了两个网络 bridge 和 my-net ,并且有两个地址 172.17.0.3 和 172.20.0.2

container2 有两个网络接口卡,分别分配了 IP地址。 这是因为,我们一开始运行这个容器的时候,被连接到默认的网络上,后来我们又执行了 docker network connect 命令,把它连接到了 my-net 网络上了,所以这使其有两个网络,并且有两个网卡。

Docker嵌入式DNS服务器可以为连接到给定网络的容器启用名称解析。

也就是说目前在 container2 中可以使用容器名和 container3 进行通信。 但是由于默认的网络 bridge 只支持通过 IP 地址通信,所以当 container2 和 container3 互相通信时,只能通过彼此的 IP 地址了。

注意: container3 和 container1 并没有任何共同的网络,所以他们是无法通信的。

其实即使容器未运行,您也可以将容器连接到网络。但是,docker network inspect仅显示有关正在运行的容器的信息。

容器的别名只能在自定义网络中有效。 容器的别名只在其针对的网络中有效。

a. 创建另一个名为local_alias 的桥接网络

b. 运行一个新的容器 container4 , 并加入到网络 local_alias, 同时使用 –network-alias 指定这个容器在此网络中的别名为 auto_git。

c. 把容器 container4 加入到网络 my-net, 同时使用 –alias 指定容器在这个网络中的别名为 auto_ansible。

d. 分别进入容器 container3 和 container4 中进行连通性。

container3

可以看到同一个容器有多个别名时,每个别名只能在当时绑定到那个网络中有效。

从上图中也不难发现,同一个容器有多个别名时,每个别名会被解析为其对应网络中的地址。

a. 运行容器 container5 和 container6 且加入到网络 my-net , 并且使用 –network-alias 指定一样的容器别名为 multiapps。

b. 查看 my-net 网络的元数据

以下是部分内容

可以看到当前网络中 container5 的地址是 172.20.0.4/16 container6 的地址是 172.20.0.5/16

c. 进入到容器 container3 中持续 ping 容器的别名 multiapps。

d. 打开另一终端,断开容器 container6 到网络 my-net 的连接。

e. 再次会到原来在 container3 中持续 ping 的终端中

发现应无法 ping 通原来解析的地址的,因为下 container6 已经从 my-net 网络中断开了。

但是我们仍然可以再次使用 multiapps 这个别名和另外的容器 (cotainer5) 继续通信。

按 Ctrl + c 组合结束当前的 ping, 重新 ping multiapps

可以发现 multiapps 被解析为容器 container5 的 IP 地址 172.20.0.4 了

© 版权声明
THE END
喜欢就支持以下吧
点赞10
分享
相关推荐
  • 暂无相关文章
  • 评论 抢沙发
    源码客的头像-源码客

    昵称

    取消
    昵称表情图片