docker——libnetwork插件网络功能
从1.7.0版本开始,Docker正是把网络和存储这两部分的功能都以插件化形式剥离出来,允许用户通过指令来选择不同的后端实现。
剥离出来的独立容器网络项目叫libnetwork,从名字就能看出,它希望将来为不同容器定义统一规范的网络标准层。
一、容器网络模型
libNetwork中容器网络模型(Container Networking Model,CNM)十分简介,
可以让上层使用网络的大量应用容器最大程度上不去关心底层实现。
容器网络模型的结构如下图:
包括三种基本元素:
Sandbox(沙盒):代表一个容器,准确的说,是其网络命名空间。
Endpoint(接入点):代表网络上可以挂载容器的接口,会分配IP地址。
Network:可以接通多个接入点的子网。
可见,对于使用CNM的容器管理系统来说,具体底下网络如何实现,不同子网彼此怎么隔离,有没有Qos,都可以不关心。
只要插件能提供网络和接入点,只需要把容器给接上或者拔下,剩下的都是插件驱动自己去实现,这样就解耦容器和网络功能,十分灵活。
CNM的典型生命周期如图所示。
首先,是驱动注册自己到网络控制器,网络驱动器使用驱动类型,来创建网络。
然后在创建的网络上创建接口,最后把容器连接到接口上即可。
销毁过程则正好相反,先把容器从接口上卸载,然后删除接口和网络即可。
目前CNM支持的驱动类型有四种:Null、Bridge、Overlay、Remote。
Null:不提供网络服务,容器启动后无网络连接。
Bridge:Docker传统上默认用Linux网桥和Iptables实现的单机网络。
Overlay:是用vxlan隧道实现的跨主机容器网络。
Remote:扩展类型,预留给其它外部实现的方案。
从位置上看,libnetwork上面支持Docker,下面支持网络插件,自身处于十分关键的中间层。
目前,已有大量的网络方案开始支持libnetwork。包括OpenStack Kuryr项目,通过支持libnetwork,
让Docker可以直接使用Neutron提供的网络功能。
Calico等团队也编写了插件支持libnetwork,从而可以无缝的支持Docker网络功能。
二、Docker网络相关命令
在libnetwork支持下,Docker网络相关命令作为network的子命令出现。
围绕着管理CNM的生命周期,主要包括以下命令:
ls:列出所有的网络
create:创建一个网络
rm:删除一个网络
connect:把容器接入到网络
disconnect:把容器从网络卸载下来
inspect:查看网络的详细信息
1.列出网络
格式:
docker network ls [OPTIONS]
完整格式:
docker network ls [-f|--filter[=[]]] [--format="TEMPLATE"] [--no-trunc[=true|false]] [-q|--quiet[=true|false]] [--help]
参数说明:
--format="TEMPLATE"
ID - 网络的ID
Name - 网络的名称
Driver - 使用者
Scope - Network scope (local, global)
IPv6 - Whether IPv6 is enabled on the network or not
Internal - Whether the network is internal or not
Labels - All labels assigned to the network
Label - Value of a specific label for this network. For example {{.Label "project.version"}}
--no-trunc=true|false
-q, --quiet=true|false
-f, --filter=[]:过滤
通过DRIVER:
docker network ls --filter driver=bridge
通过ID:
docker network ls --filter id=63d1ff1f77b07ca51070a8c227e962238358bd310bde1529cf62e6c307ade161
docker network ls --filter id=95e74588f40d
docker network ls --filter id=95e
通过label:
docker network ls -f "label=usage"
docker network ls -f "label=usage=prod"
通过NAME:
docker network ls --filter name=foobar
docker network ls --filter name=foo
通过user:
docker network ls --filter type=custom
2.创建网络
格式:
docker network create [option] NETWORK
完整格式:
docker network create [--attachable] [--aux-address=map[]] [-d|--driver=DRIVER] [--gateway=[]] [--help] [--internal] [--ip-range=[]]
[--ipam-driver=default] [--ipam-opt=map[]] [--ipv6] [--label[=[]]] [-o|--opt=map[]] [--subnet=[]] NETWORK-NAME
参数说明:
--aux-address=map[]:辅助的IP地址
-d, --driver=DRIVER:网络驱动类型
--gateway value:网管地址
--internal:禁止外部对创建的网络访问
--ip-range value:分配IP的地址范围
--ipam-driver=default: IP地址管理的插件类型
--ipam-opt value:IP地址管理插件的选项
--ipv6:支持IPv6地址
--label value:为网络添加元标签信息
-o,--opt value:网络驱动支持的选项
--subnet value:网络地址段
3.删除网络
格式:
docker network rm NETWORK [NETWORK ...]
示例:
docker network rm my-network
docker network rm 3695c422697f my-network
4.接入容器
将一个容器连接到一个已存在的网络上。
命令格式:
docker network connect [OPTIONS] NETWORK CONTAINER
参数支持:
--alias value:为容器添加一个别名,此别名仅在所添加网络上可见;
--ip string:指定IP地址
--ip6 string:指定IPv6地址
--link value:添加链接到另一个容器
--link-local-ip value:为容器添加一个链接地址
示例:
docker network connect multi-host-network container1
docker run -itd --network=multi-host-network --ip 172.20.88.22 --ip6 2001:db8::8822 busybox
5.卸载容器
将一个连接到网络上的容器从网络上移除。
格式:
docker network inspect [option] NETWORK [NETWORK ...]
参数说明:
-f,--force:强制把容器从网络上移除。
示例:
docker network disconnect multi-host-network container1
6.查看网络信息
格式:
docker network inspect [OPTIONS] NETWORK [NETWORK ...]
示例:
sudo docker run -itd --name=container1 busybox
docker——libnetwork插件网络功能的更多相关文章
- Docker 中的网络功能介绍 外部访问容器 容器互联 配置 DNS
Docker 中的网络功能介绍 | Docker 从入门到实践 https://vuepress.mirror.docker-practice.com/network/ Docker 允许通过外部访问 ...
- libnetwork插件化网络功能
Docker把网络跟存储这两部分的功能实现都以插件化形式剥离出来,允许用户通过指令来选择不同的后端实现.这也是Docker希望构建围绕着容器的强大生态系统的一些积极的尝试.剥离出来的独立容器网络项目叫 ...
- 高级网络功能(Docker支持的网络定制配置)
网络的高级知识,包括网络的启动和配置参数.DNS的使用配置.容器访问和端口映射的相关实现. 在一些具体场景中,Docker支持的网络定制配置,通过Linux命令来调整.补充.甚至替换Docker默认的 ...
- Docker跨主机网络——overlay
前言 在Docker网络--单host网络一文中,我为大家总结了Docker的单机网络相关知识和操作,单机网络比较容易.本文我为大家总结Docker跨主机通信相关知识.同样本文大部分内容以CloudM ...
- docker 跨主机网络:overlay 简介
简介 docker 在早前的时候没有考虑跨主机的容器通信,这个特性直到 docker 1.9 才出现.在此之前,如果希望位于不同主机的容器能够通信,一般有几种方法: 使用端口映射:直接把容器的服务端口 ...
- 理解Docker单机容器网络
在” 理解Docker单机容器网络 “一文中,还有一个Docker容器网络的功能尚未提及,那就是Docker容器的端口映射.即将容器的服务端口P’ 绑定到宿主机的端口P上,最终达到一种效果:外部程序通 ...
- Docker容器的网络连接
Docker容器的网络连接 Docker容器的网络连接 我们用ifconfig命令来查看网络设备 我们可以看到上面有个叫docker0的网络设备,docker守护进程就是通过docker0为docke ...
- Unity多玩家网络游戏开发教程1章Unity带有网络功能
Unity网络多玩家游戏开发教程第1章Unity自带网络功能 Unity拥有大量的第三方插件.专门提供了对网络功能的支持. 可是.大部分开发人员第一次接触到的还是Unity自带的网络功能.也就是大家常 ...
- docker多主机网络方案
本文探讨Docker多主机网络的性能. 在过去的博文里,我测试过 Docker的网络 . MySQL服务器团队 提供了他们自己的结果,和我的观察是一致的. 本文里一系列的测试,想更多关注使用多主机的D ...
随机推荐
- SQLServer------begin tran/commit tran事务的使用方法
转载: http://www.cnblogs.com/accumulater/p/6089838.html 介绍 BEGIN TRAN 标记事务开始 COMMIT TRAN 提交事务 一般把DML语句 ...
- Java精选笔记_IO流(字节流、InputStream、OutputStream、字节文件、缓冲区输入输出流)
字节流 操作图片数据就要用到字节流. 字符流使用的是字符数组char[],字节流使用的是字节数组byte[]. 字节流读写文件 针对文件的读写,JDK专门提供了两个类,分别是FileInputStre ...
- org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFacto
控制台: 2016-4-1 16:32:06 org.hibernate.annotations.common.Version <clinit> 信息: Hibernate Commons ...
- swift--添加新手引导页
swift和oc逻辑上都是一样的,只是写法不一样,可以使用一个view,也可以使用一个viewController,两种都可以的,使用view注意初始化的时候给他一个frame,vc的话,直接在本控制 ...
- 让nginx支持.htaccess文件实现伪静态的方法!
搞了个VPS,装了个LNMP一键安装包,然后搞了个程序放上,想实现伪静态,但是lnmp的默认规则里没有河蟹男需要的伪静态文件,得自己配置, 以前只在.htaccess里搞下就行,现在换Linux下ng ...
- php学习十四:抽象,接口和多态
多态为面向对象编程的精华所在,js等面向过程的语言虽然可以模拟面向对象,但是毕竟模仿的永远比不上真的,所以了解而且会使用面向对象的多态是必不可少的 在了解多态之前,我们必须要了解接口,但是接口又是在抽 ...
- JavaScript基础细讲
JavaScript基础细讲 JavaScript语言的前身叫作Livescript.自从Sun公司推出著名的Java语言之后,Netscape公司引进了Sun公司有关Java的程序概念,将自己原 ...
- delphi中Case语法的使用方法
Case 语句If...Then…Else 语句适合选项较少的情况,如果有很多选项的话利用If 语句就比较麻烦,在这种情况下,Case 语句就容易多了.Case 语句的语法如下: case <表 ...
- 设计模式之装饰模式(Java实现)
“怎么了,鱼哥?” “唉,别提了,网购了一件衣服,结果发现和商家描述的差太多了,有色差就算了,质量还不好,质量不好就算了,竟然大小也不行,说好的3个X,邮的却是一个X的,不说了,退货去.你先开讲吧,你 ...
- Android Framewrork资源类型有哪些?
1. Google Framework res frameworks/base/core/res/res/values <public type="attr" name=&q ...