容器技术与docker
名词介绍
- IaaS:基础设施即服务,要搭建上层数据应用,先得通过互联网获得基础性设施服务
- PaaS:平台即服务,搭建平台,集成应用产品,整合起来提供服务
- SaaS:软件即服务,通过网络提供程序应用类服务
- BaaS:后端即服务,公司为移动应用开发者提供整合云后端的边界服务
注:docker属于PaaS层;
docker版本历史
- 17版本之前的所有版本都是docker测试版,仅供测试环境使用,那个时候还并未退出企业版,一般主要用来做实验
- 17版本之后分为两个版本,分别是EE与CE;CE是社区版不需要花钱,EE版是企业版,购买EE版之后会获得docker公司的官方在线技术支持
容器技术的基本原理
容器能够利用Namespaces、Apparmor、SELinux配置、chroot以及CGroups等Linux内核功能,从而交付一套类似于虚拟机的隔离性环境。Linux安全模块能够确保来自容器的主机设备与内核访问行为受到妥善管理,从而避免入侵活动的发生。除此之外,容器还能够通过其主机操作系统运行多种不同Linux发行版——只要各类操作系统拥有同样的底层CPU架构要求。总体而言,容器技术提供了一种立足于各类Linux发行版的容器镜像创建方式,同时利用API进行容器生命周期管理,通过客户端工具实现与该API的交互,进而提供快照以及不同容器主机之间容器实例迁移等能力。
容器技术发展历程
以下为从维基百科以及其它信息源处收集到的容器发展历程总结:
1979年 — chroot
容器技术的概念可以追溯到1979年的UNIX chroot。这是一套“UNIX操作系统”系统,旨在将其root目录及其它子目录变更至文件系统内的新位置,且只接受特定进程的访问。这项功能的设计目的在于为每个进程提供一套隔离化磁盘空间。1982年其被添加至BSD当中。
2000年 — FreeBSD Jails
FreeBSD Jails是由Derrick T. Woolworth于2000年在FreeBSD研发协会中构建而成的早期容器技术之一。这是一套“操作系统”系统,与chroot的定位类似,不过其中包含有其它进程沙箱机制以对文件系统、用户及网络等资源进行隔离。通过这种方式,它能够为每个Jail、定制化软件安装包乃至配置方案等提供一个对应的IP地址。
2001年 — Linux VServer
Linux VServer属于另一种jail机制,其能够被用于保护计算机系统之上各分区资源的安全(包括文件系统、CPU时间、网络地址以及内存等)。每个分区被称为一套安全背景(security context),而其中的虚拟化系统则被称为一套虚拟私有服务器。
2004年 — Solaris容器
Solaris容器诞生之时面向x86与SPARC系统架构,其最初亮相于2004年2月的Solaris 10 Build 51 beta当中,随后于2005年正式登陆Solaris 10的完整版本。Solaris容器相当于将系统资源控制与由分区提供的边界加以结合。各分区立足于单一操作系统实例之内以完全隔离的虚拟服务器形式运行。
2005年 — OpenVZ
OpenVZ与Solaris容器非常相似,且使用安装有补丁的Linux内核以实现虚拟化、隔离能力、资源管理以及检查点交付。每套OpenVZ容器拥有一套隔离化文件系统、用户与用户群组、一套进程树、网络、设备以及IPC对象。
2006年 — Process容器
Process容器于2006年由谷歌公司推出,旨在对一整套进程集合中的资源使用量(包括CPU、内存、磁盘I/O以及网络等等)加以限制、分配与隔离。此后其被更名为Control Groups(即控制组),从而避免其中的“容器”字眼与Linux内核2.6.24中的另一术语出现冲突。这表明了谷歌公司率先重视容器技术的敏锐眼光以及为其做出的突出贡献。
2007年 — Control Groups
正如上文所提及,Control Groups也就是谷歌实现的cgroups,其于2007年被添加至Linux内核当中。
2008年 — LXC
LXC指代的是Linux Containers,其也是第一套完整的Linux容器管理实现方案。其功能通过cgroups以及Linux namespaces实现。LXC通过liblxc库进行交付,并提供可与Python3、Python2、Lua、Go、Ruby以及Haskell等语言相对接的API。相较于其它容器技术,LXC能够在无需任何额外补丁的前提下运行在原版Linux内核之上。目前LXC项目由Canonical有限公司负责赞助及托管。
2011年 — Warden
Warden由CloudFoundry公司于2011年所建立,其利用LXC作为初始阶段,随后又将其替换为自家实现方案。与LXC不同,Warden并不会与Linux紧密耦合。相反,其能够运行在任意能够提供多种隔离环境方式的操作系统之上。Warden以后台进程方式运行并提供API以实现容器管理。感兴趣的朋友可以点击此处与此处了解更多与Warden相关的细节信息(英文原文)。
2013年 — LMCTFY
Lmctfy代表的是“Let Me Contain That For You(帮你实现容器化)”。它其实属于谷歌容器技术堆栈的开源版本,负责提供Linux应用程序容器。谷歌公司在该项目的起步阶段宣称其能够提供值得信赖的性能表现、高资源利用率、共享资源机制、充裕的发展空间以及趋近于零的额外资源消耗。Kubernetes目前所使用的cAdvisor工具最初就来源于lmctfy项目。2013年10月lmctfy的首个版本正式推出,谷歌公司在2015年决定将lmctfy的核心概念与抽象机制转化为libcontainer。在失去了主干之后,如今lmctfy已经失去一切积极的发展势头。Libcontainer项目最初由Docker公司建立,如今已经被归入开放容器基金会的管辖范畴。
2013年 — Docker
截至2016年1月,Docker是目前最具人气且应用最为广泛的容器管理系统。Docker项目最初是由一家名为dotCloud的平台即服务厂商所打造,其后该公司更名为Docker。与Warden类似,Docker同样在起步阶段使用LXC,而后利用自己的libcontainer库将其替换下来。与其它容器平台不同,Docker引入了一整套与容器管理相关的生态系统。其中包括一套高效的分层式容器镜像模型、一套全局及本地容器注册表、一个精简化REST API以及一套命令行界面等等。在后期发展阶段,Docker公司还构建起一套名为Docker Swarm的容器集群管理解决方案。
2014年 — Rocket
Rocket最初由CoreOS开发而成,专门用于解决部分Docker当中存在的缺陷。CoreOS方面也提到,他们当初的开发目标是在安全性与生产要求满足能力上超越Docker。更重要的是,其基于App Container规范并使其成为一项更为开放的标准。除了Rocket之外,CoreOS还开发出了多种其它与容器相关的产品,且已经被Docker与Kubernetes所使用:CoreOS操作系统、etcd以及flannel。
2016年 — Windows容器
微软公司也已经于2015年采取初步举措,希望将容器支持能力添加到微软Windows Server操作系统当中,而这项旨在帮助Windows应用实现容器化的项目被称为Windows容器(Windows Containers)。其即将随微软的Windows Server 2016一同推出。在这硕方案当中,Docker能够以原生方式在Windows平台上运行容器,而无需运行虚拟机或者多层Docker(早期Docker需要利用Linux虚拟机才能与Windows系统相对接)。
容器之发展愿景
截至目前(2016年1月),整个技术行业已经越来越多地将软件应用程序部署基础由虚拟机转移向容器。之所以出现这种趋势,一大重要原因在于容器能够提供远优于虚拟机的灵活性与使用成本。谷歌公司多年来一直在利用Borg and Omega容器集群管理平台等容器技术以实现各类谷歌应用的规模化运行。更重要的是,谷歌公司还通过实现cgroups以及参与libcontainer项目等方式为容器技术的发展做出了突出贡献。谷歌方面在过去几年当中已经利用容器技术实现了可观的性能提升、资源利用率改善以及整体执行效率优化。就在最近,微软公司这位从未将任何操作系统层级虚拟化机制引入Windows平台的软件巨头亦快速在Windows Server上实现了原生容器支持能力。
Docker、Rocket以及其它容器平台都无法运行在生产环境中的单一主机之上,这是因为它们都存在着单点故障隐患。尽管一整套容器集合能够运行在单一主机上,然而一旦该主机发生故障,所有运行于其上的容器也将全面瘫痪。谷歌公司在这方面抢先一步,凭借从Borg项目中积累到的经验打造出名为Kubernetes的开源容器集群管理系统。Docker公司也针对这一难题开发出了Docker Swarm解决方案。目前,这些解决方案尚处于早期发展阶段,而且可能还需要数月甚至一年才能真正具备完整的功能集,从而以稳定及广泛的方式被引入容器行业的生产环境当中。
微服务则是另一项突破性技术成果,而不仅仅是一套利用容器机制实现自身部署的软件架构。虽然微服务的概念算不上什么新鲜事物,但这种Web服务的轻量化实现机制确实能够提供远超过标准Web服务的启动速度。之所以能够实现这项目标,是因为其将一整套功能单元以打包方式(可能包括单一服务/API方法)整合在一项服务当中,再将服务嵌入一套轻量化Web服务器二进制文件。
考虑到以上背景信息,我们可以预测在未来几年当中,容器技术将逐步取代虚拟机甚至能够在一定程度上彻底占据其适用环境。去年,我曾经帮助多家企业立足于POC层级部署基于容器的解决方案。当时他们几乎还都不想把容器引入生产环境。然而这种状况可能随着容器集群管理系统的逐步成熟而快速得到扭转。
上面的内容来自51CTO中前辈的博客摘抄:http://cloud.51cto.com/art/201602/505113.htm
容器技术与docker的更多相关文章
- linux容器技术和Docker
linux容器技术和Docker 概述 Docker在一定程度上是LXC的增强版,早期的Docker使用LXC作为容器引擎,所以也可以说Docker是LXC的二次封装发行版,目前docker使用的容器 ...
- 容器技术|Docker三剑客之docker-compose
三剑客简介 docker-machine docker技术是基于Linux内核的cgroup技术实现的,那么问题来了,在非Linux平台上是否就不能使用docker技术了呢?答案是可以的,不过显然需要 ...
- 容器技术|Docker三剑客之docker-machine
docker-machine是什么? ocker-machine就是docker公司官方提出的,用于在各种平台上快速创建具有docker服务的虚拟机的技术,甚至可以通过指定driver来定制虚拟机的实 ...
- 容器技术之Docker镜像
前文我们聊了下docker的基础使用方法,大概介绍了下docker的架构,管理镜像.运行容器.管理容器的一些相关命令说明:回顾请参考https://www.cnblogs.com/qiuhom-187 ...
- Docker容器技术-优化Docker镜像
一.优化Docker镜像 1.降低部署时间 一个大的Docker应用是如何影响在新Docker宿主机上的部署时间. (1)编写Dockerfile创建一个大Docker镜像 [root@bogon ~ ...
- 容器技术之Docker基础入门
前文我们了解了下LXC的基础用法以及图形管理工具LXC WEB Panel的简单使用,有兴趣的朋友可以参考https://www.cnblogs.com/qiuhom-1874/p/12904188. ...
- 容器技术之Docker网络
上一篇博客我们主要聊了下docker镜像相关的说明以及怎样基于现有镜像制作镜像.分发镜像到docker仓库中的相关测试:回顾请参考https://www.cnblogs.com/qiuhom-1874 ...
- 容器技术之Docker数据卷
前一篇随笔中我们了解了docker的网络相关说明,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12952616.html:今天我们来聊一聊docker的数据管 ...
- 容器技术之Docker常用命令说明
前面我们聊了docker的基本概念.架构.镜像.网络.数据卷,回顾请参考https://www.cnblogs.com/qiuhom-1874/category/1766327.html:今天这篇博客 ...
随机推荐
- Python中的[...]是什么?
...就是好几个冒号 array[...] 就是array[:,:,:]
- 利用OGG进行数据库表的初始化
OGG初始化 1.停止目标端re1进程 2.配置ei进程(若目标端有ei进程之前投递的文件则先清空) GGSCI (localhost) 1>add extract ei1, sourceist ...
- [梁山好汉说IT] 熵的概念 & 决策树ID3如何选择子树
[梁山好汉说IT] 熵的概念 & 决策树ID3如何选择子树 0x00 摘要 记录对概念的理解,用梁山好汉做例子来检验是否理解正确. 0x01 IT概念 1. 事物的信息和信息熵 1.1 事物的 ...
- SofaBoot使用Nacos进行服务注册发现
前提 最近创业公司的项目组基于业务需要,开发一套新的微服务,考虑到选用的组件必须是主流.社区活跃.生态完善以及方便迁移到云上等因素,引入了SOFAStack全家桶.微服务开发里面,一个很重要的功能就是 ...
- 17.python自定义模块的导入方式
1.直接用import导入 最后运行main.py可以看到命令行窗口输出了一句:你好,这样就完成了. 2.通过sys模块导入自定义模块的路径path 3.在环境变量中找到自定义模块 这个方法原理就是利 ...
- ENS使用指南系列之一 [ 注册 .eth 域名详细教程 ]
ENS 域名系统中目前支持三种顶级域名,分别是 .eth .xyz .luxe.其中, .eth 是 ENS 系统的原生域名,是由一系列智能合约控制的去中心化的域名,另外两种是从互联网域名中接入的,要 ...
- Antd将Table导出为Excel
Antd将Table导出为Excel 在最近的项目中,需要把表格中的数据导出给财务进行统计,网上很多一键导出的按钮都没用.经过东拼西凑,最终搞定了导出,自己封装了组件. import { File } ...
- 深入 Create React App 核心概念
本文差点难产而死.因为总结的过程中,多次怀疑本文是对官方文档的直接翻译和简单诺列:同时官方文档很全面,全范围的介绍无疑加深了写作的心智负担.但在最终的梳理中,发现走出了一条与众不同的路,于是坚持分享出 ...
- 【tf.keras】Linux 非 root 用户安装 CUDA 和 cuDNN
TensorFlow 2.0 for Linux 使用时报错:(cuDNN 版本低了) E tensorflow/stream_executor/cuda/cuda_dnn.cc:319] Loade ...
- QuartzCore
QuartzCore 说起QuartzCore不知道有多少小伙伴很容易和Quartz2D.CoreGraphics等混淆在一起傻傻分不清楚?所以在下面我们先把这几个很容易混淆或者是分不清楚的框架稍加整 ...