Docker网络一览
转自:http://dockone.io/article/1143
【编者的话】本文是Nuage Networks公司Filip Verloy的一篇博文,简介了一下Docker网络情况,单主机的四种模式及多主机的Libnetwork模式,大家能够试用了。
同一时候Nuage
Networks公司在鼓捣的SDN方案,我认为大家也能够去了解一下。
@Container容器技术大会将于6月4日在上海光大会展中心国际大酒店举办,来自携程、PPTV、蚂蚁金服、京东、浙江移动、海尔电器、唯品会、eBay、道富银行、麻袋理財、土豆网、阿里百川、腾讯游戏、点融网等公司的技术负责人将带来实践经验分享。3月21日之前购票仅仅需238元。欢迎感兴趣的同学抢购。
介绍
无疑外面已经有非常多关于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 模式
在这样的模式下。容器共享主机的网络空间,它直接暴露到外部。
这意味着你须要使用port映射訪问容器内的服务,在桥接模式,Docker会自己主动分配port从而使得它们可路由。在以下的样例中,Docker主机的IP 10.0.0.4,正如你能够看到的,容器共享这个IP地址。

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


None模式
这样的模式不配置网络。对于不要求网络訪问的容器实用。只是也能够用于设置自己定义网络。
这也是Nuage网络模式在Docker1.9预览版本号的实现(很多其它信息在这里 )。
在以下的样例中,你能够看到我们新的容器没有分配IP地址。

默认情况下Docker会启用容器间通信(-icc=true),这意味着在主机上的容器都是能够自由通信的没有不论什么限制,这可能成为一个安全问题。
通过iptables和ip_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,云计算project师。专注Kubernetes、Docker。
Docker网络一览的更多相关文章
- Docker系列(五):Docker网络机制(上)
Linux路由机制打通网络 路由机制是效率最好的 docker128上修改Docker0的网络地址,与docker130不冲突 vi /usr/lib/systemd/system/docker.se ...
- 理解Docker(5):Docker 网络
本系列文章将介绍 Docker的相关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...
- docker网络配置方法总结
docker启动时,会在宿主主机上创建一个名为docker0的虚拟网络接口,默认选择172.17.42.1/16,一个16位的子网掩码给容器提供了65534个IP地址.docker0只是一个在绑定到这 ...
- 【转】Docker网络详解及pipework源码解读与实践
好文必转 原文地址: http://www.infoq.com/cn/articles/docker-network-and-pipework-open-source-explanation-prac ...
- Docker网络模式
[编者的话] 本文是<Docker网络及服务发现>一书的一个章节,介绍了搭建Docker单主机网络的基础内容.关于Docker网络的更多内容,包括多主机的网络,请参考该书的其他章节. @C ...
- docker网络-如何让外部网络访问容器资源
docker网络-如何让外部网络访问容器资源 安装httpd 服务: docker:/root# docker exec -it f63b2633d146 bash bash-4.1# yum ins ...
- docker网络解析
Docker概念和默认网络 什么是Docker网络呢?总的来说,网络中的容器们可以相互通信,网络外的又访问不了这些容器.具体来说,在一个网络中,它是一个容器的集合,在这个概念里面的一个容器,它会通过容 ...
- docker网络访问(三)
docker网络访问 ifconfig查看网卡,启动docker的时候,docker会帮我们创建一个docker0的网桥. 1.随机映射 docker run -P 2.指定映射 -p hostPor ...
- [Docker网络]模拟一台交换机的拓扑
[Docker网络]模拟一台交换机的拓扑 本例主要对Docker网络进行实际运用. 背景介绍 一台虚拟机如何模拟成一台多端口交换机分别连接多台虚拟机? bridge网桥技术 实验准备 docker d ...
随机推荐
- 使用python解决烦人的每周邮件汇总!
最近开始接手BI工作,其中又一个繁琐又不得不做的事,就是每周五都得汇总上个财务周的数据给运营人员! 作为一个懒人,只能把这件事交由电脑去处理了. 初步的idea:周五11点前mac自动执行汇总程序-& ...
- C++反汇编-继承和多重继承
学无止尽,积土成山,积水成渊-<C++反汇编与逆向分析技术揭秘> 读书笔记 一.单类继承 在父类中声明为私有的成员,子类对象无法直接访问,但是在子类对象的内存结构中,父类私有的成员数据依然 ...
- HDU 4717 The Moving Points (三分)
The Moving Points Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- mybatis逆向工程--自动生成实体代码(mybatis-generator)
随便找个目录, 添加文件, 如图 主要是两个jar包, generator的下载路径: https://github.com/mybatis/generator/releases 驱动包随 ...
- win7下安装配置ftp服务器
1. win7操作系统自带了ftp组件,所以不需要另外下载.只需要在控制面板中,添加或删除组件中启用即可. 2. 在管理上,ftp和iis是属于同一个目录的.ftp也可以算是internet info ...
- Ip和long互转
// <summary> /// 将127.0.0.1形式的IP地址转换成十进制整数 /// </summary> /// <param name="strIp ...
- 2008技术内幕:T-SQL语言基础 联接查询摘记
续 2008技术内幕:T-SQL语言基础 单表查询摘记 第三章 联接查询 Microsoft SQL Server 2008 支持四种表运算符 join(ANSI标准).apply(T-SQL扩展). ...
- jQuery.merge与concat的区别
示例如下: s1="123"; s2="145"; s3 = $.merge(s1,s2);//s3="123",字符串s1 s2不变,默认 ...
- css3 transform方法常用属性
css3中transform方法是一个功能强大的属性,可以对元素进行移动.缩放.转动.拉长或拉伸等功能. transform中最为常用的4个属性分别是:rotate();.scale();.skew( ...
- C++运算符重载(友元函数方式)
我们知道,C++中的运算符重载有两种形式:①重载为类的成员函数(见C++运算符重载(成员函数方式)),②重载为类的友元函数. 当重载友元函数时,将没有隐含的参数this指针.这样,对双目运算符,友元函 ...