Docker网络一览

本文讲的是Docker网络一览,【编者的话】本文是Nuage Networks公司Filip Verloy的一篇博文,简单介绍了一下Docker网络情况,单主机的四种模式及多主机的Libnetwork模式,大家可以试用了。同时本文讲的是,Nuage Networks公司在鼓捣的SDN方案,我觉得大家也可以去了解一下。

介绍

无疑外面已经有很多关于Docker网络的博客,我也不想再去重复那些了,恰恰相反,通过展示下面一些不同设置的例子,我想为现在Docker网络到底能做什么而提供一个清晰的描述。

总之,Docker的网络方面,也可以说Docker自己,还是非常年轻的,所以事情进展的很快并且会随着时间变化。去年通过SocketPlane有了很大的进展和后来的可插入模型,而且随后会更详细。

Docker容器在设计上就是短暂的(宠物VS奶牛),这导致了一些潜在的问题,其中最重要的一个是由于困难的IP地址管理而不能保证你的防火墙配置更新到最新,也很难连接到可能随时消失的服务,使用DNS作为权宜之计也不是一个很好的解决方案(DNS存在单点故障,不要用它)。当然还是有几个选项和方法来克服这些困难的。

单主机Docker网络

单主机Docker网络你有4个选择:Bridge模式、Host模式、Container模式和None模式。

桥接模式(默认Docker网络模式)

Docker deamon创建一个虚拟以太网桥“docker0”,用于在连接到它的所有接口之间转发数据包。主机上的所有容器都连接到该内部网桥,它分配一个接口作为容器的“eth0”接口,在主机的命名空间分配(想象VRF)另一个接口。容器被分配一个私有IP地址。为了防止在本地网络上的ARP冲突,Docker daemon从所分配的IP地址随机生成MAC地址。在下面的例子中,Docker分配私有IP 172.17.0.1到容器中。

Host 模式

在这种模式下,容器共享主机的网络空间,它直接暴露到外部。这意味着你需要使用端口映射访问容器内的服务,在桥接模式,Docker会自动分配端口从而使得它们可路由。在下面的例子中,Docker主机的IP 10.0.0.4,正如你可以看到的,容器共享这个IP地址。

Container模式

这种模式强制Docker重用另一个容器的网络命名空间。在你希望从所述容器提供自定义网络的时候使用,这也是Kubernetes为多个容器提供网络的模型。在下面这个例子中,容器IP为172.17.0.2,我们把后面的容器链接到这个容器,正如你可以看到的,启动的容器具有相同的IP地址。

None模式

这种模式不配置网络,对于不要求网络访问的容器有用,不过也可以用于设置自定义网络。 

这也是Nuage网络模式在Docker 1.9预览版本的实现(更多信息在这里 )。 

在下面的例子中,你可以看到我们新的容器没有分配IP地址。

默认情况下Docker会启用容器间通信(-icc=true),这意味着在主机上的容器都是可以自由通信的没有任何限制,这可能成为一个安全问题。通过iptablesip_forwarding与外部通信。

多主机Docker网络

在现实场景中,由于你的Docker应用你很有可能需要跨多个主机使用Docker容器。所以,为了你的分布式应用程序进行内部和外部通信,现在你需要在这些主机上构建容器网络。正如上面所提到的,在2015年3月Docker公司收购了SDN创业公司SocketPlane,并且带来了Libnetwork和容器网络模型,意味着向默认的多主机网络设置前进。

Libnetwork

Libnetwork为连接容器提供原生Go语言实现。Libnetwork的目标是提供一个坚固的容器网络模型,提供一个一致的编程接口和应用所需的网络抽象。

Libnetwork的一个好处是,它采用了驱动/插件模式,支持多种底层网络技术,同时还是暴露一个简单而一致的网络模式到最终用户(通用API),Nuage网络通过已有远程插件实现这个模型。

Libnetwork还引入容器网络模型(CNM)来为网络和容器提供互操作。

CNM定义了网络沙盒、端点和网络。网络沙盒是Docker容器网络配置所在的一个隔离环境。端点是一个可以在特定网络用于通信的网络接口。端点只能加入一个网络而且多个端点可以在单个网络沙盒中存在。网络是能够与彼此通信的端点的唯一可识别组。您可以创建“前端”和“后端”网络,他们将完全隔离。

原文链接:Docker networking overview(翻译:朱高校)

===========================================================
译者介绍
朱高校@H3C,云计算工程师,专注Kubernetes、Docker。

原文发布时间为:2016-03-20 

本文作者:zhugaoxiao

本文来自合作伙伴DockerOne,了解相关信息可以关注DockerOne。

原文标题:Docker网络一览

时间: 2024-08-21 13:58:46

Docker网络一览的相关文章

Docker生态系统一览

本文讲的是Docker生态系统一览,[编者的话]本文旨在介绍当前可用的Docker生态系统存在哪些部分,包括:Docker Hub.Docker Engine.Kitematic.Docker Machine.Swarm.Docker Compose.Dokcer Cloud以及Data Center,文章会详细介绍这些工具的功能,以及怎样能够更好地将这些工具结合起来. 在过去的18个月内参加任何技术相关的活动或者阅读任何技术相关的文章时,你可能已经听说过Docker并且对Docker是什么以及

Docker网络和服务发现

本文讲的是Docker网络和服务发现[编者的话] 本文是<Docker网络和服务发现>一书的全文,作者是Michael Hausenblas.本文介绍了Docker世界中的网络和服务发现的工作原理,并提供了一系列解决方案. 前言 当你开始使用Docker构建应用的时候,对于Docker的能力和它带来的机会,你会感到很兴奋.它可以同时在开发环境和生产环境中运行,只需要将一切打包进一个Docker镜像中,然后通过Docker Hub分发镜像,这是很直接了当的.你会发现以下过程很令人满意:你可以快速

蚂蚁金服Docker网络技术实践

以下内容根据演讲PPT以及现场分享整理而成. 主要内容提纲 一.docker网络分析 二.docker网络插件开发 三.蚂蚁金服的网络插件实践 一.docker网络分析 主要介绍三种docker网络,Bridge网络.docker原生的Overlay网络以及Weave网络,在这里主要分享一下这些网络的架构或者说是结构. docker Bridge网络 Bridge网络可能是大家最熟悉的网络,如下图所示,HostA和HostB是两个宿主机,docker运行起来就将在宿主机上创建docker0的网桥

Docker网络原则入门:EXPOSE,-p,-P,-link

本文讲的是Docker网络原则入门:EXPOSE,-p,-P,-link,[编者的话]构建多容器应用程序,需要定义网络参数来设置容器间的通信,可以通过EXPOSE或者-expose暴露端口.使用-p发布特定端口,还可以用-link等等来实现,这些方法可能会得到一样的效果,但是这些方法之间是否有不同,应该选择什么样的方法,将是本文讨论的重点内容. 如果你已经构建了一些多容器的应用程序,那么肯定需要定义一些网络规则来设置容器间的通信.有多种方式可以实现:可以通过--expose参数在运行时暴露端口,

Docker网络详解

Docker网络详解 转载请注明来自:http://blog.csdn.net/wsscy2004 网络基础 Docker使用linux桥接,在主机虚拟一个docker0网络接口,在主机中运行命令查看: # List host bridges $ sudo brctl showbridge name bridge id STP enabled interfacesdocker0 8000.000000000000 no # Show docker0 IP address $ sudo ifcon

青云QingCloud推出SDN网络直通服务 Docker网络能力大幅提升

1月16日,青云QingCloud(qingcloud.com)日前宣布推出SDN网络直通服务,由IaaS平台网卡管理和Hostnic插件两部分组成.该服务能够使运行在虚拟机上的容器直接使用IaaS平台的SDN能力,从而极大地提升了容器应用的网络性能,并显著降低容器配置与维护的操作难度. 在青云QingCloud推出SDN 网络直通服务之前,传统的Docker部署方案存在两大弊端:一是严重的网络性能损耗.传统的基于虚拟主机的Docker部署方案,需要采用Overlay或者Bridge网络插件实现

Docker网络深度解读

Docker概念和默认网络 什么是Docker网络呢?总的来说,网络中的容器们可以相互通信,网络外的又访问不了这些容器.具体来说,在一个网络中,它是一个容器的集合,在这个概念里面的一个容器,它会通过容器的IP直接去通信,又能保证在这个集合外的一些容器不能够通过这个容器IP去通信,能做到网络隔离.网络这个概念是由网络的驱动去创建.管理的.网络的驱动又分为全局的和本地的,全局的意思是这个网络可以跨主机,没必要说我的两个容器非要在一个主机上才能通过这个网络去通信,我可以在不同主机上还是通过容器的IP相

DockOne微信分享(六十六): Docker网络方案初探

本文讲的是DockOne微信分享(六十六): Docker网络方案初探[编者的话]这次主要跟大家聊聊Docker的网络方案,首先是现有容器网络方案介绍, 接下来重点讲解Calico的特性及技术点,作为引申和对比再介绍下Contiv的特性,最后给出对比测试结果. 随着容器的火热发展,数人云越来越多的客户对容器网络特性要求也开始越来越高,比如: 一容器一IP: 多主机容器互联: 网络隔离: ACL: 对接SDN等等. 这次主要跟大家聊聊Docker的网络方案,首先是现有容器网络方案介绍, 接下来重点

利用OpenVSwitch构建多主机Docker网络

本文讲的是利用OpenVSwitch构建多主机Docker网络,[编者的话]当你在一台主机上成功运行Docker容器后,信心满满地打算将其扩展到多台主机时,却发现前面的尝试只相当于写了个Hello World的入门程序,多主机的网络设置成了下一道门槛.在你尝试各种方案时不妨先看看本文,或许就会豁然开朗,发现原来也不复杂.嗯,是的,本文用到了OpenVSwitch. 运行Docker已经不是什么新鲜事,网上有很多入门教程来帮助你在一台主机上运行容器.这台主机可以是Linux服务器,也可以是Mac(