docker - 关于network的一些理解
docker 提供给我们多种(4种)网络模式,我们可以根据自己的需求来使用。例如我们在一台主机(host)或者同一个docker engine上面运行continer的时候,我们就可以选择bridge网络模式;而当我们需要在多台host上来运行多个container来协同工作的时候,overlay模式就是我们的首选。
当我们完成docker engine的安装以后,docker会在每一个engine上面生成一个3种网络,他们是:bridge, none 还有host。
默认网络模式 - bridge
首先来侃一侃docker0. 之所以说它是默认的网络,是由于当我们运行container的时候没有“显示”的指定网络时,我们的运行起来的container都会加入到这个“默认” docker0 网络。他的模式是bridge。
无网络模式 - none
顾名思义,所有加入到这个网络模式中的container,都"不能”进行网络通信。貌似有点鸡肋。。。
宿主网络模式 - host
这种网络模式将container与宿主机的网络相连通,虽然很直接,但是却破获了container的隔离性,因此也比较鸡肋。。。
自定义网络
由于之前介绍的3种自带的网络模式有各自的局限性,因此,docker推荐大家自定义网络。通过自定义网络,我们可以实现“服务发现”与“DNS解析”。
docker 允许我们创建3种类型的自定义网络,bridge,overlay,MACVLAN (目前我还没有用到)。
自定义bridge网络
与docker0类似,我们可以自定义bridge网络,通过使用自定义bridge网络,我们就可以实现在一台host上的多个container之间的通信。他的网络模型如下(图片来自docker官网):

docker_gwbridge
他在本质上还是一个local的bridge网络,但是他是我们实现多个host之间的container通信的基础。通常情况下,当我们在链接swarm nodes的时候,docker_gwbridge网络就会被在每一个swarm节点上自动创建出来。
自定义Overlay网络
docker提供给我们两种方式来定义overlay网络,在docker1.12之前,我们需要依靠第三方的工具( Consul, Etcd, and ZooKeeper (Distributed store))来通过注册于寄存统一的“key-value”来实现“服务发现”和“DNS解析”,从而达到多个container不同host上的的通信。 但是在docker1.12之后,我们可以直接用“原生态”的swarm来实现“服务发现”和“DNS解析”。
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/
docker - 关于network的一些理解的更多相关文章
- 【Network】Calico, Flannel, Weave and Docker Overlay Network 各种网络模型之间的区别
From the previous posts, I have analysed 4 different Docker multi-host network solutions - Calico, F ...
- (转)Docker - 创建 Docker overlay network (containers 通信)
原文链接: http://www.cnblogs.com/AlanWalkOn/p/6101875.html --- 创建基于Key-Value的Docker overlay network. 这样运 ...
- Docker(一):理解Docker镜像与容器
一.镜像的概念 1.广泛镜像概念: 镜像是一种文件存储形式,是冗余的一种类型,一个磁盘上的数据在另一个磁盘上存在完全相同的副本即为镜像. 2.Docker镜像概念: 在Docker中镜像同样是一种完全 ...
- Docker container network configuration
http://xmodulo.com/networking-between-docker-containers.html How to set up networking between Docker ...
- docker 解决network has active endpoints
解决方式 使用 docker network disconnect -f {network} {endpoint-name},其中的 {endpoint-name} 可以使用命令 docker net ...
- Docker —几个概念的理解
本文从一种使用场景来引出docker,并讨论了什么是镜像,容器,仓库,以及docker的相关概念. 试想一种使用场景: 我的wordpress 博客网站现在部署在阿里云服务器上,但是在后期的使用中我有 ...
- 【Docker官方文档】理解Docker
本文来自Docker的官方文档,详细介绍了Docker的体系结构.重要概念.内部工作机理等内容,推荐不了解Docker内部原理的同学阅读. 什么是Docker? Docker是一个用于开发.交付和运行 ...
- Docker(二):理解容器编排工具Kubernetes内部工作原理
一.Kubernetes是什么 要说到Docker就不得不说说Kubernetes.当Docker容器在微服务的环境下数量一多,那么统一的,自动化的管理自然少不了.而Kubernetes就是一个这样的 ...
- 关于Graph Convolutional Network的初步理解
为给之后关于图卷积网络的科研做知识积累,这里写一篇关于GCN基本理解的博客.GCN的本质是一个图网络中,特征信息的交互+与传播.这里的图指的不是图片,而是数据结构中的图,图卷积网络的应用非常广泛 ,经 ...
随机推荐
- huffman压缩解压文件【代码】
距离上次写完哈夫曼编码已经过去一周了,这一周都在写huffman压缩解压,哎,在很多小错误上浪费了很多时间调bug.其实这个程序的最关键部分不是我自己想的,而是借鉴了某位园友的代码,但是,无论如何,自 ...
- MyRocks DDL原理
最近一个日常实例在做DDL过程中,直接把数据库给干趴下了,问题还是比较严重的,于是赶紧排查问题,撸了下crash堆栈和alert日志,发现是在去除唯一约束的场景下,MyRocks存在一个严重的bug, ...
- .Net MVC4笔记之js css引用与压缩
1.引用时,可以用即可以直接使用“~”来表示根目录. 引入js 引入js 引入css <link href="~/Content/uploadify/uploadify.css&quo ...
- linux常用操作命令
cd: cd /data 进入目录 cd .. 返回上级菜单tar: tar -cvf jcms20170411.tar.gz jcms/ 将jcms文件夹打包为 jcms20170411.tar.g ...
- [原创] JavaScript实现简单的颜色类标签云
效果预览: 源码分享: <!DOCTYPE html><html><head lang="en"> <meta charset=" ...
- List<T>对元素的查找。
要在List<T>中查找特定的元素,可以使用Contains() .IndexOf().LastIndexOf()和BinarySearch()方法.除了 LastIndexOf()是从最 ...
- 简单的留言板(dom+正则练习)
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- HTML ——Flex弹性布局
弹性盒布局的使用 1.为父容器添加display:flex或inline-flex属性 (Webkit内核的浏览器,必须加上-webkit前缀.) 容器默认存在两根轴:主轴(main axis)和交叉 ...
- SQL SERVER 变量的使用和样例
定义和使用局部变量:说明: 局部变量是用户可自定义的变量. 作用范围仅在程序内部. 局部变量的名称是用户自定义的,命名的局部变量名要符合SQL Server 2000标识符命名规则=>以@开 在 ...
- lightoj1281快速幂+数学知识
https://vjudge.net/contest/70017#problem/E 后半部分快速幂就能求出来,要注意03lld不然001是输出错误为1.前半部分用log10() 对于给定的一个数n, ...