docker - 关于network的一些理解

docker 提供给咱们多种(4种)网络模式,咱们能够根据本身的需求来使用。例如咱们在一台主机(host)或者同一个docker engine上面运行continer的时候,咱们就能够选择bridge网络模式;而当咱们须要在多台host上来运行多个container来协同工做的时候,overlay模式就是咱们的首选。html

 

当咱们完成docker engine的安装之后,docker会在每个engine上面生成一个3种网络,他们是:bridge, none 还有host。node

 

 

默认网络模式 - bridge

 

首先来侃一侃docker0. 之因此说它是默认的网络,是因为当咱们运行container的时候没有“显示”的指定网络时,咱们的运行起来的container都会加入到这个“默认” docker0 网络。他的模式是bridge。docker

 

 

无网络模式 - none

顾名思义,全部加入到这个网络模式中的container,都"不能”进行网络通讯。貌似有点鸡肋。。。网络

 

宿主网络模式 - host

这种网络模式将container与宿主机的网络相连通,虽然很直接,可是却破获了container的隔离性,所以也比较鸡肋。。。ide

 

自定义网络

因为以前介绍的3种自带的网络模式有各自的局限性,所以,docker推荐你们自定义网络。经过自定义网络,咱们能够实现“服务发现”与“DNS解析”。工具

docker 容许咱们建立3种类型的自定义网络,bridge,overlay,MACVLAN (目前我尚未用到)。post

 

自定义bridge网络

与docker0相似,咱们能够自定义bridge网络,经过使用自定义bridge网络,咱们就能够实如今一台host上的多个container之间的通讯。他的网络模型以下(图片来自docker官网):ui

 

docker_gwbridge

他在本质上仍是一个local的bridge网络,可是他是咱们实现多个host之间的container通讯的基础。一般状况下,当咱们在连接swarm nodes的时候,docker_gwbridge网络就会被在每个swarm节点上自动建立出来。url

 

自定义Overlay网络

docker提供给咱们两种方式来定义overlay网络,在docker1.12以前,咱们须要依靠第三方的工具( Consul, Etcd, and ZooKeeper (Distributed store))来经过注册于寄存统一的“key-value”来实现“服务发现”和“DNS解析”,从而达到多个container不一样host上的的通讯。 可是在docker1.12以后,咱们能够直接用“原生态”的swarm来实现“服务发现”和“DNS解析”。spa

 

swarm在设计之初是为了service(一组container)而服务的,所以经过swarm建立的overlay网络在一开始并不支持单独的container加入其中。可是在docker1.13, 咱们能够经过“--attach” 参数声明当前建立的overlay网络能够被container直接加入。

# docker network create --driver=overlay --attachable name=myOverlayNet 

在建立overlay网络以前,咱们须要先搭建swarm集群,详细内容能够参考我以前的随笔:

Docker - 运行 containers 使用在 swarm 模式下建立的 overlay 模式的 network

 

Docker 内置的DNS server

在这里,咱们会很好奇为何docker可以作到container之间的通讯呢? 答案就是 docker 内置的 DNS server.  关于他的详细介绍,请参考官网连接。

https://docs.docker.com/engine/userguide/networking/configure-dns/

相关文章
相关标签/搜索