Docker 安装时,默认会创建三个网络,可使用“docker network ls”查看:
$ docker network ls
NETWORK ID NAME DRIVER
7fca4eb8c647 bridge bridge
9f904ee27bf5 none null
cf03ee007fb4 host host
运行容器时,可通过“--network”标记来指定想要连接的网络,不然默认使用的是 bridge 网络。容器中的网络接口 docker0 代表的就是 bridge 网络。
none 网络可将容器添加到特定于容器的网络堆栈中。那个容器缺少网络接口。使用“docker attach”命令绑定到这样的一个容器,然后查看它的堆栈,就会发现类似下面的情况:
# 没指定使用 none 网络时的情况
$ docker run -itd --name normalcontainer busybox
$ docker attach normalcontainer
/ # cat /etc/hosts
127.0.0.localhost ip6-localhost ip6-loopback
fe00::0 ip6-mcastprefix
ff02::1 ip6-allrouters
172.17.0.2 ad7c6453bb9d
/ #
/ # ifconfig
eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02
inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1296 (1.2 KiB) TX bytes:648 (648.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
/ # exit
# 指定 none 网络时的情况
$ docker run -itd --network none --name nonenetcontainer busybox
$ docker attach nonenetcontainer
/ # cat /etc/hosts
localhost::1.0.0.ip6-localnet6-localhost ip6-loopback
ff00::0 ip6-allnodesfix
ff02::2 ip6-allrouters
/ #
/ # ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
/ #
/ # ^p ^q # 这里按下“Ctrl-p Ctrl-q”可让容器回到后台运行。
$
而 host 网络是将容器添加到主机的网络堆栈上,也就是让容器与主机之间的网络不再隔离。比如,容器的 80 端口上运行的 Web 服务此时在主机的 80 端口上也能直接访问到。
none 和 host 网络是不可直接配置的,而 bridge 可以。
要查看一个或多个网络的详细信息,可以使用“docker network inspect”命令。
使用默认的 bridge 网络连接的容器之间可以根据 IP 互相通信。由于 Docker 并不支持在默认的 bridge 网络上进行“自动服务发现(Automatic Service Discovery)”,所以若要容器可根据容器名解析出 IP 地址,就应该使用自定义的网络代替(虽然也可使用“docker run --link”选项关联多个容器到 docker0 网络上,但并不推荐)。
要创建网络,可以使用“docker network create”命令,比如:
docker network create --driver bridge isolated_nw
自定义的网络不支持“--link”,但可以在此网络中的容器上发布和公开容器端口。这在想将 bridge 网络的一部分用于外部网络时尤其有用。下图显示了这种关系。
创建 bridge 网络适用于想在单个主机上运行相对较小的网络时的情况。不过还可以通过创建 overlay 等网络来创建更大的网络。
Docker 会在下面两种情形下自动创建一个名为 docker_gwbridge 的本地 bridge 网络:
1、初始化或加入 swarm 时,可用来在不同主机的 swarm 节点之间进行通信。
2、当没有一个容器网络可以提供对外连接时,除了当前的网络之外,Docker 还会把这个容器连接到 docker_gwbridge 网络,以便该容器能连接到外部网络或其他 swarm 节点。
但是你也可以提前创建一个自定义的 docker_gwbridge 网络,如下例所示:
$ docker network create --subnet 172.30.0.0/16 \
--opt com.docker.network.bridge.name=docker_gwbridge \
--opt com.docker.network.bridge.enable_icc=false \
docker_gwbridge
注意:使用 overlay 网络时,docker_gwbridgw 网络始终存在。
你还可以在没有外部键值存储区的以 swarm 模式运行的管理器节点上创建一个 overlay 网络。swarm 使得 overlay 网络只对 swarm 中需要服务的节点可用。当使用 overlay 网络创建一个服务时,管理器节点会自动将该网络扩展到运行服务任务的节点。
下面的示例演示如何创建网络并在 swarm 中的管理器节点中为服务使用它:
$ docker network create --driver overlay \
--subnet 10.0.9.0/24 \
my-multi-host-network
400g6bwzd68jizzdx5pgyoe95
$ docker service create --replicas 2 --network my-multi-host-network --name my-web nginx
716thylsndqma81j6kkkb5aus
注意:只有 swarm 服务可以连接到 overlay 网络,而不是单独的容器。
- 大小: 20.8 KB
分享到:
相关推荐
思科ACI CNI容器网络解决方案.pdf
思科ACI CNI容器网络解决方案.pptx
vSphere 7云原生容器网络架构概述.pdf
基于深度学习的容器网络异常检测.pdf
一个简单的程序来对各种容器网络(CNI)插件进行基准测试
1. 通过Flannel的网络模型可以实现容器与容器直接跨主机的互相访问,那你知道如果容器内部访问外部的服务应该怎么融合到这个网络模型中吗 2. 基于Overl
在基于容器的虚拟化环境中,容器网络是重要的组件。 为了评估容器之间不同联网方法对仿真性能的影响,分析了典型的容器联网方法(无,桥接,macvlan),并根据吞吐量和延迟指标评估了不同联网方法的性能。 实验表明...
本集主要讲Docker容器网络,如何和外界其他容器通信,叠加网络搭建等
libnetwork 的目标是定义一个健壮的容器网络模型(Container Network Model),提供一个一致的编程接口和应用程序的网络抽象。Libnetwork一开始的代码只是 libcontainer 和 Docker Engine 中网络部分代码的合并,...
利用DPDK加速容器网络.pdf
容器网络介绍
005 Docker容器网络.mp4
FabEdge是一款基于kubernetes构建,专注于边缘计算场景的容器网络方案,支持KubeEdge/SuperEdge/Openyurt等主流边缘计算框架。 FabEdge旨在解决边缘计算场景下网络管理复杂,跨集群通信困难,缺少能自动感知网络拓扑...
容器网络实验手册1
刘梦馨:多租户容器网络.pdf
容器网络最佳实践.docx
摘要⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯⋯i图目录⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯ ⋯
CNI(容器网络接口),一个开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目。clibcni 是 iSulad 用来在容器中配置网络接口的库,遵循开放原子开源基金会 CNI(容器网络接口)的规范。
容器网络架构设计指南.pptx
容器网络架构设计指南.pdf