Docker网络一览-阿里云开发者社区

开发者社区> 轩墨> 正文

Docker网络一览

简介: 本文讲的是Docker网络一览,【编者的话】本文是Nuage Networks公司Filip Verloy的一篇博文,简单介绍了一下Docker网络情况,单主机的四种模式及多主机的Libnetwork模式,大家可以试用了。
+关注继续查看
本文讲的是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到容器中。
docker11.png

Host 模式

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

Container模式

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

docker4.png

None模式

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

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

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

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

多主机Docker网络

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

Libnetwork

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

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

Libnetwork还引入容器网络模型(CNM)来为网络和容器提供互操作。
a63eecba-52a0-471b-b7f5-679d2142014c.png

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

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

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

原文发布时间为:2016-03-20 
本文作者:zhugaoxiao
本文来自云栖社区合作伙伴DockerOne,了解相关信息可以关注DockerOne。
原文标题:Docker网络一览

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
docker进阶与实战 5 docker网络
docker原生网络不足,第三方SDN解决方案来满足各种需求. docker收购socketplane后,libnetwork项目开始发力. libnetwork定义了新的容器网络模型CNM,标准API为容器配置网络,底层适配各种驱动.
1083 0
k8s与网络--Flannel源码分析
之前在k8s与网络--Flannel解读一文中,我们主要讲了Flannel整体的工作原理。今天主要针对Flannel v0.10.0版本进行源码分析。首先需要理解三个比较重要的概念: 网络(Network):整个集群中分配给 flannel 要管理的网络地址范围 子网(Subnet):flanne.
1594 0
在Docker中使用Open vSwitch创建跨主机的容器网络
本文讲的是在Docker中使用Open vSwitch创建跨主机的容器网络,【编者的话】本文介绍了如何使用Open vSwitch为Docker 1.9.0及以后版本提供网络支持。操作前请先确认你已经按照INSTALL.md 编译,或者通过包管理器安装了Open vSwitch。
1755 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
3956 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
5676 0
网络安全之Nmap
主机探测、端口扫描、服务及版本探测、操作系统探测
48 0
Docker Swarm Mode网络诊断工具
Docker CE 从17.12版本开始加入网络调试的工具,使用这个工具可以帮助排查Linux上的docker overlay网络以及swarm service的问题
2778 0
+关注
2351
文章
701
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载