十分钟明白什么是容器技术

欢迎你们前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~git

本文由 宝哥@devops运维 发表于 云+社区专栏

1、什么是容器?

容器这个词,当你第一眼看它或许脑子里是这东西:瓶瓶罐罐、装水、装其余东西的玩意。docker

img

无论是什么,总的来讲,容器给人第一印象就是——“装”。安全

那今天咱们要说的容器技术是怎么一个概念呢?其实,IT里的容器技术是英文单词Linux Container的直译。container这个单词有集装箱、容器的含义(主要偏集装箱意思)。不过,在中文环境下,我们要交流要传授,若是翻译成“集装箱技术” 就有点拗口,因此结合中国人的吐字习惯和文化背景,更喜欢用容器这个词。不过,若是要形象的理解Linux Container技术的话,仍是得念成集装箱会比较好。咱们知道,海边码头里的集装箱是运载货物用的,它是一种按规格标准化的钢制箱子。集装箱的特点,在于其格式划一,并能够层层重叠,因此能够大量放置在特别设计的远洋轮船中(早期航运是没有集装箱概念的,那时候货物杂乱无章的放,很影响出货和运输效率)。有了集装箱,那么这就更加快捷方便的为生产商提供廉价的运输服务。服务器

img

所以,IT世界里借鉴了这一理念。早期,你们都认为硬件抽象层基于hypervisor的虚拟化方式能够最大程度上提供虚拟化管理的灵活性。各类不一样操做系统的虚拟机都能经过hypervisor(KVM、XEN等)来衍生、运行、销毁。然而,随着时间推移,用户发现hypervisor这种方式麻烦愈来愈多。为何?由于对于hypervisor环境来讲,每一个虚拟机都须要运行一个完整的操做系统以及其中安装好的大量应用程序。但实际生产开发环境里,咱们更关注的是本身部署的应用程序,若是每次部署发布我都得搞一个完整操做系统和附带的依赖环境,那么这让任务和性能变得很重和很低下。微信

基于上述状况,人们就在想,有没有其余什么方式能让人更加的关注应用程序自己,底层多余的操做系统和环境我能够共享和复用?换句话来讲,那就是我部署一个服务运行好后,我再想移植到另一个地方,我能够不用再安装一套操做系统和依赖环境。这就像集装箱运载同样,我把货物一辆兰博基尼跑车(比如开发好的应用APP),打包放到一容器集装箱里,它经过货轮能够垂手可得的从上海码头(CentOS7.2环境)运送到纽约码头(Ubuntu14.04环境)。并且运输期间,个人兰博基尼(APP)没有受到任何的损坏(文件没有丢失),在另一个码头卸货后,依然能够完美风骚的赛跑(启动正常)。架构

img

Linux Container容器技术的诞生(2008年)就解决了IT世界里“集装箱运输”的问题。Linux Container(简称LXC)它是一种内核轻量级的操做系统层虚拟化技术。Linux Container主要由Namespace和Cgroup两大机制来保证明现。那么Namespace和Cgroup是什么呢?刚才咱们上面提到了集装箱,集装箱的做用固然是能够对货物进行打包隔离了,不让A公司的货跟B公司的货混在一块儿,否则卸货就分不清楚了。那么Namespace也是同样的做用,作隔离。光有隔离还没用,咱们还须要对货物进行资源的管理。一样的,航运码头也有这样的管理机制:货物用什么样规格大小的集装箱,货物用多少个集装箱,货物哪些优先运走,遇到极端天气怎么暂停运输服务怎么改航道等等... 通用的,与此对应的Cgroup就负责资源管理控制做用,好比进程组使用CPU/MEM的限制,进程组的优先级控制,进程组的挂起和恢复等等。运维

img

2、容器技术的特色

容器的特色其实咱们拿跟它跟硬件抽象层虚拟化hypervisor技术对比就清楚了,咱们以前也提到过,传统的虚拟化(虚拟机)技术,建立环境和部署应用都很麻烦,并且应用的移植性也很繁琐,好比你要把vmware里的虚拟机迁移到KVM里就很繁琐(须要作镜像格式的转换)。那么有了容器技术就简单了,总结下容器技术主要有三个特色:微服务

  • 1. 极其轻量:只打包了必要的Bin/Lib;
  • 2. 秒级部署:根据镜像的不一样,容器的部署大概在毫秒与秒之间(比虚拟机强不少);
  • 3. 易于移植:一次构建,随处部署;
  • 4. 弹性伸缩:Kubernetes、Swam、Mesos这类开源、方便、好使的容器管理平台有着很是强大的弹性管理能力。

img

3、容器的标准化

当前,docker几乎是容器的代名词,不少人觉得docker就是容器。其实,这是错误的认识,除了docker 还有coreos。因此,容器世界里并非只有docker一家。既然不是一家就很容易出现分歧。任何技术出现都须要一个标准来规范它,否则各搞各的很容易致使技术实现的碎片化,出现大量的冲突和冗余。所以,在2015年,由Google,Docker、CoreOS、IBM、微软、红帽等厂商联合发起的OCI(Open Container Initiative)组织成立了,并于2016年4月推出了第一个开放容器标准。标准主要包括runtime运行时标准和image镜像标准。标准的推出,有助于替成长中市场带来稳定性,让企业能放心采用容器技术,用户在打包、部署应用程序后,能够自由选择不一样的容器Runtime;同时,镜像打包、创建、认证、部署、命名也都能按照统一的规范来作。工具

两种标准主要包含如下内容:性能

  1. 容器运行时标准 (runtime spec)

a). creating:使用 create 命令建立容器,这个过程称为建立中 b). created:容器建立出来,可是尚未运行,表示镜像和配置没有错误,容器可以运行在当前平台 c). running:容器的运行状态,里面的进程处于 up 状态,正在执行用户设定的任务 d). stopped:容器运行完成,或者运行出错,或者 stop 命令以后,容器处于暂停状态。这个状态,容器还有不少信息保存在平台中,并无彻底被删除

  1. 容器镜像标准(image spec)

a). 文件系统:以 layer 保存的文件系统,每一个 layer 保存了和上层之间变化的部分,layer 应该保存哪些文件,怎么表示增长、修改和删除的文件等; b). config 文件:保存了文件系统的层级信息(每一个层级的 hash 值,以及历史信息),以及容器运行时须要的一些信息(好比环境变量、工做目录、命令参数、mount 列表),指定了镜像在某个特定平台和系统的配置。比较接近咱们使用 docker inspect <image_id> 看到的内容; c). manifest 文件:镜像的 config 文件索引,有哪些 layer,额外的 annotation 信息,manifest 文件中保存了不少和当前平台有关的信息; d). index 文件:可选的文件,指向不一样平台的 manifest 文件,这个文件能保证一个镜像能够跨平台使用,每一个平台拥有不一样的 manifest 文件,使用 index 做为索引。

4、容器的主要应用场景

容器技术的诞生其实主要解决了PAAS的层的技术实现。像OpenStack、Cloudstack这样的技术是解决IAAS层的问题。IAAS层和PAAS层你们估计也听得不少了,关于他们的区别和特性我这里不在描述。那么容器技术主要应用在哪些场景呢?目前主流的有如下几种:

1. 容器化传统应用 容器不只能提升现有应用的安全性和可移植性,还能节约成本。

每一个企业的环境中都有一套较旧的应用来服务于客户或自动执行业务流程。即便是大规模的单体应用,经过容器隔离的加强安全性、以及可移植性特色,也能从 Docker 中获益,从而下降成本。一旦容器化以后,这些应用能够扩展额外的服务或者转变到微服务架构之上。

2. 持续集成和持续部署 (CI/CD) 经过 Docker 加速应用管道自动化和应用部署,交付速度提升至少 13 倍。

现代化开发流程快速、持续且具有自动执行能力,最终目标是开发出更加可靠的软件。经过持续集成 (CI) 和持续部署 (CD),每次开发人员签入代码并顺利测试以后,IT 团队都可以集成新代码。做为开发运维方法的基础,CI/CD 创造了一种实时反馈回路机制,持续地传输小型迭代更改,从而加速更改,提升质量。CI 环境一般是彻底自动化的,经过 git 推送命令触发测试,测试成功时自动构建新镜像,而后推送到 Docker 镜像库。经过后续的自动化和脚本,能够将新镜像的容器部署到预演环境,从而进行进一步测试。

3. 微服务 加速应用架构现代化进程。

应用架构正在从采用瀑布模型开发法的单体代码库转变为独立开发和部署的松耦合服务。成千上万个这样的服务相互链接就造成了应用。Docker 容许开发人员选择最适合于每种服务的工具或技术栈,隔离服务以消除任何潜在的冲突,从而避免“地狱式的矩阵依赖”。这些容器能够独立于应用的其余服务组件,轻松地共享、部署、更新和瞬间扩展。Docker 的端到端安全功能让团队可以构建和运行最低权限的微服务模型,服务所需的资源(其余应用、涉密信息、计算资源等)会适时被建立并被访问。

4. IT 基础设施优化 充分利用基础设施,节省资金。

Docker 和容器有助于优化 IT 基础设施的利用率和成本。优化不只仅是指削减成本,还能确保在适当的时间有效地使用适当的资源。容器是一种轻量级的打包和隔离应用工做负载的方法,因此 Docker 容许在同一物理或虚拟服务器上绝不冲突地运行多项工做负载。企业能够整合数据中心,将并购而来的IT资源进行整合,从而得到向云端的可迁移性,同时减小操做系统和服务器的维护工做。

问答

docker和docker-compose有什么不一样?

相关阅读

童航君:腾讯云CIS服务和clear container

小白也能玩转Kubernetes 你与大神只差这几步

王蕴达:腾讯云 Kubernetes 一键部署实践

此文已由做者受权腾讯云+社区发布,原文连接:https://cloud.tencent.com/dev...

欢迎你们前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~

相关文章
相关标签/搜索