如何理解容器,容器化的由来?它有何优缺点?
如何理解容器,容器化的由来?它有何优缺点?
- 一、如何理解容器
- 二、虚拟机技术的由来
- 三、容器化技术的由来
- 四、容器化技术的优点以及局限性
一、如何理解容器
“容器
”英文单词 Container
,翻译过来也可以是“集装箱
”,那为什么要把容器比作集装箱呢?
首先,集装箱的作用是对商家的货物进行打包隔离,一般会将不同商家的货物打包装到不同的集装箱内,这样不管是装载还是卸货都不容易混淆。
另外,集装箱还有一个更重要的功能:保护箱内的货物。不管海运过程中遇到强风暴雨还是烈日暴晒,我们对箱内的货物都能放心。
其实我们也希望容器能达到同样的效果,只要我们提供的原材料(镜像)一样,得到的结果(运行实例)都是一样的,并且还能实现打包隔离和轻松运输
小结一下,
如果把容器类比成集装箱的话,可以很清晰的汇总容器的优势:提供的原材料(镜像)一样,得到的结果(运行实例)一样、打包隔离轻松运输等。
容器内运行的服务或服务对应的多个进程就应该是集装箱里对应的货物了,可以很自然地想到,容器的目的就是为进程集合提供一个独立的运行环境。
那我们具体应该怎么实现 “容器化技术,独立的运行环境
” 呢?
今天我们不了技术,只聊故事。。。
二、虚拟机技术的由来
在了解到容器技术之前,先聊聊虚拟化技术的历史。
在早期的时候,我们如果想要在线上部署一个应用。起码需要先购买服务器,然后安装操作系统及各种依赖环境,最后进行应用的部署。这是很正常的流程对吧。
但是。。。会出现几个问题:
部署应用上线应用过程时间非常长
购买服务器的花费不菲
物理服务器的资源容易浪费
迁移和扩展比较困难
正因为有上面的问题,后来出现的虚拟化技术。
虚拟化技术就是在操作系统上多加了一个虚拟化层(
Hypervisor
),可以将物理机的CPU、内存、硬盘等资源进行虚拟化,再通过虚拟化出来的空间上安装操作系统,这就是我们通常说的虚拟机。
比如,我们可以将一台32核CPU、64G内存、500G磁盘的物理机进行虚拟化,可以创建8台4核CPU、8G内存的虚拟机。这些机器提供给不同的应用去部署,如此极大提供了资源利用率。常见的虚拟化技术如VMWare
,VirtualBox
等。
虚拟化技术的优点:
降低运维成本
更快地部署应用
提高服务器可用性
消除服务器梳理剧增情况和复杂性
…
三、容器化技术的由来
那么问题来了,虚拟化技术发展至今已经非常强大了,那为什么还需要容器化技术呢?
如今的虚拟机可以非常方便的扩展出应用需要的资源。但是仍存在两个问题:
应用扩展问题。拿双十一举例,应用在平常只需要20台机器,但是在双十一那天至少需要准备100台机器,就需要在非常短的时间快速完成的部署应用
环境迁移问题。 应用开发过程是包含了
开发-测试-预发布-线上
,整个流程中设计到多套环境的发布,开发人员维护开发环境、测试人员维护测试环境、运维负责着预发布和线上环境,如何确保每套环境的一致性,这会经常出现因环境差异导致的问题
在云计算的时代,通常通过自动化脚本的方式去解决上面的问题,但是环境差异,导致脚本维护要投入额外的人力。亦或有的团队使用虚拟化镜像,但是镜像大且启动慢,没法满足时效性的要求。
于是,人们考虑是否存在一种更加轻量化的虚拟化技术,更容易迁移和扩展应用层业务。
就这样,正式借鉴了集装箱的解决方案,就有人提出了类似集装箱的方式封装应用以及它的运行环境,将应用和环境打包成一个轻量化、可移植、自包含的容器。
四、容器化技术的优点以及局限性
到现在,容器技术有非常多种,docker只是其中一种。
而实现这种类似集装箱的封装技术,实际依赖两种技术,
1、文件系统隔离
每个容器都具有独立的文件系统,单个容器内对文件系统进行增删改查不会影响到其他容器
参考 Linux 下的 chroot 命令,可以将子目录变为根目录
2、资源隔离
利用
namespace
隔离进程之间的相互可见及通信使用
Cgroup
限制资源使用率,设置其能够使用的 CPU 以及内存量的大小
容器化技术的优势:
更高效的系统资源利用率。
相比虚拟化技术,不需要额外的
hypervisor
层,会有更高的性能和效率。单台高配物理机可以跑上白近千个docker
容器。启动非常快,秒级时间
这是由于直接运行于宿主机内核,需要启动完成的操作系统,因此可以做到秒级、甚至毫秒级的启动时间
一致的运行环境
容器的镜像封装应用和应用依赖的环境,确保了应用运行环境的一致性,避免了开发环境、测试环境、生产环境不一致的问题
持续交付和部署
一次创建和配置之后,可以在任意地方运行。测试人员可以将容器与持续集成系统结合,在
pipeline
中自动化的完成集成测试,同时运维人员可以通过持续部署系统对应用自动完成部署。更易于迁移
可以轻松迁移到物理机、虚拟机、公有云、私有云中,且不需要担心运行环境变化导致应用无法运行的问题
局限性:
容器隔离性问题,也可以是安全性问题,只要是由于共用内核和
Namespace
实现隔离的限制容器里面不存放数据,容器中的数据会随容器消失而消失,特别是对有状态的应用需要做数据的持久化设置
容器的粒度更细,管理复杂度更大,在生产环境管理大量的容器带来了更大的挑战,有赖于
K8S
、Swarm
等容器编排
如何理解容器,容器化的由来?它有何优缺点?相关推荐
- 理解Docker容器
< 理解Docker&容器 > 理解 Docker 一.概述 " Docker 是全球领先的软件容器平台 ".开发人员利用 Docker 可以消除协作编码时&q ...
- Spring Boot教程(7) – 直观地理解Spring容器
在你学习Spring之前,你肯定听说过"控制反转"."依赖注入"."上下文"等名词,伴随着这些名词的,是一些冗长晦涩的解释,这些解释并没有什 ...
- C#_深入理解Unity容器
C#_深入理解Unity容器 一.背景 **DIP是依赖倒置原则:**一种软件架构设计的原则(抽象概念).依赖于抽象不依赖于细节 **IOC即为控制反转(Inversion of Control):* ...
- 美团外卖终端容器无关化研发框架
2019年9月,美团外卖技术团队联合多个研发部门正式推出了React2X,面向所有的前端研发人员,特别是按业务领域划分的团队,为大家提供一个完整的.开放的多终端容器无关化(Containerless) ...
- 【k8s】理解Docker容器的进程管理(PID1进程(容器内kill命令无法杀死)、进程信号处理、僵尸进程)
文章目录 概述 1. 容器的PID namespace(名空间) 2. 如何指明容器PID1进程 3. 进程信号处理 4. 孤儿进程与僵尸进程管理 5. 进程监控 6. 总结 参考 概述 简介: Do ...
- 如何理解 HTML 语义化
你是如何理解 HTML 语义化的?(面试) 在了解 HTML 语义化之前,先科普一下下面几个名词: 语义:是语言所蕴含的意义 (语言的含义).简单的说,符号是语言的载体,符号本身没有意义,只有赋予含义 ...
- 你是如何理解 HTML 语义化的?
面试题–你是如何理解 HTML 语义化的? 简单来说:就是用正确的标签做正确的事.比如: 头部:header 导航:nav 主体内容:main 标题:h1 ~ h6 段落:p 侧边栏:aside 页脚 ...
- 理解去中心化稳定币DAI
本文首发于深入浅出区块链社区 原文链接:理解去中心化稳定币DAI原文已更新,请读者前往原文阅读 随着摩根大通推出JPM Coin 稳定币,可以预见稳定币将成为区块链落地的一大助推器. 坦白来讲,对于一 ...
- 190320你如何理解 HTML 语义化?
你如何理解 HTML 语义化? 概要 HTML目标 HTML实现原理 HTML优点 HTML缺点 HTML演进趋势 HTML解决的问题 HTML技术规范 HTML最佳实践 HTML市场应用趋势 小结 ...
最新文章
- 生物信息「知识图谱」
- 网站优化有三个重点不能忽视
- Android ImageView(scaleType属性)(转)
- 全球首个知识增强千亿大模型鹏城-百度·文心发布
- markdown 公式_【建议收藏】数学公式如何用Markdown优雅地写出来
- setBackgroundResource的一个问题
- QT界面布局、系统信号和槽、启动进程、EDIT回车快捷键、正常信号和槽、QMessageBox、UIC使用(界面重新生成)
- 数据揭秘中国女性的薪水普遍比男性低,说好的“同工同酬”呢?
- 一个快速排序 和 直接插入排序 的简单 c程序
- 连接远程hbase长时间等待问题
- 天猫手机一战成名? 塑造品牌 完胜京东
- 计算机综合布线基本知识,综合布线系统基础知识学习
- vscode下的vue文件格式化
- 课改要实现“软着陆”
- Dennard scaling(MOSEFT scaling)
- OneFlow源码解析:Eager模式下的SBP Signature推导
- 三菱服务器显示003C,三菱gps-3电梯开关门特慢门机板显示c.是哪里问题?
- Codeforces Round #747 (Div. 2)题解
- 【架构】工程代码结构(附带NXP、ST官方demo)
- 夯实Java基础系列14:深入理解Java枚举类