容器真的是万能吗?看完这些你会沉默

简介:

麦克莱恩发明集装箱的时候,或许不会想到这种运输方式会推动经济的全球化发展。当一批批货物被打包搬上火车、轮船、飞机,集装箱不仅解决了装货慢、载量小的窘境,还将原来数月的运输时间从数月缩短至数天。当然,考虑到货物的多样性,以及具体使用情况,集装箱并非万能药。这就像是容器,将开发者的应用打包发布到Linux平台上不是一本万利,还要涉及部署成本、操作环境、安全性等问题。

图片来自mediaagility

2013年3月,PaaS服务商dotCloud(后来的Docker)将应用容器引擎Docker开源,代码托管在Github上。在此之前,容器技术已经在Linux和UNIX领域经历了十多年的变迁。从技术的角度来看,Docker基于沙箱机制可将任何应用集成在一个轻量化、可移植、标准化的容器中,核心问题就是利用Linux容器技术实现类似虚拟机的功能。然而,在一片为容器叫好的声音中,人们也要注意到这种技术的弱点。

用容器有代价

容器不是一刀切的解决方案,意味着使用者要具有相对应的专业知识,并且要确保基础设施的完整性,有了好地基才好盖房子。将容器集成部署到持续交付管道,使其自动化运转起来,需要在每次提交代码时执行一系列步骤,其中包括一次手动迁入代码库的操作。简单来说,管道的作用就是让容器在内部经过功能性测试,合格“上岗”。期间如果有一次执行延误,就会打破持续性,并且会错过发现问题的时机,导致后期投入更多精力来修补。要知道,在代码提交的几分钟内bug报错与数周后再察觉相比,前者的修复成本要小很多。

需要注意的是,Docker并不会重写代码,只是让跨平台部署变得容易了,想具有扩展性还是要由开发者亲自动手。Docker不是横跨所有系统,毕竟系统层的软件泊接不是停船装货那么简单。跨系统的时候,要先保证Docker自身的新版内核,并且底层是通用的,再小的差错率放大到成千上万台服务器上都是大风险。同时,规模化运行容器离不开管理和编排的支持,又是一笔投资开支。

容器不等于虚拟机

切勿以虚拟机的视角看待容器,其不是可以随意编辑或者删除的对象,遇到问题只能丢弃重建出一个新的。或许有开发者遇到这样的问题:容器执行过程中,修改了容器的内容(如配置文件信息),但因为修改出了问题,导致容器关闭后无法启动。为此,开发者只能创建新镜像,或者直接修改文件。

此外,Docker的资源隔离水平也比不上虚拟机,只能对一些资源共享,其他进程需要排队入列。容器在内核层面也是共享的,在某些环境中换取了高效率,但可用性和冗余也会受到影响。与独立内核的虚拟机不同,如果有一个容器内核损坏,其共享机制就会导致所有关联的容器遭殃。

生产环境缺陷

成熟的企业会使用才出现两年的数据库技术吗?更何况Docker只是一个工具,谈不上架构解决方案。前文提到,部署容器需要镜像管理、日志、监控、负载均衡等全流程的支持,并且升级后的向前兼容性较差,这也导致了容器在生产环境中的弱势,更不要说为大型应用程序创建映像。一些自建生产环境的用户会将Docker放在IaaS上,可能引发资源消耗超出容器实例所需的。而在网络层,并非所有容器都能被公网访问,这就要在网络设置时多多留意,为主机打补丁是常事儿。

部署过程中,Docker Compose与其他工具相比在生产环境配置时复杂度更高,volume绑定、端口对接、网络参数都要修改,并且需要调用很多脚本,以及外部数据库等工具。拿数据库管理来说,开发环境完全可以跨容器托管,但在生产环境就要考虑I/O性能等问题,用于确保高可用性和可靠的备份及存储。能力越大,需要注意的点就越多,容器可以将package直接从开发环境搬到生产环境,但在生产环境仍有要完善的地方。

容器离不开安全

围绕容器的安全性争议从未间断,风险是由内向外的,黑客可以通过破解容器来访问底层服务器,进而影响到云服务商的数据中心。另一方面,不同的镜像来源也让威胁变得难以预测。曾有数据显示,Docker Hub的容器镜像有超过30%保护高风险漏洞,而且这些还经常被下载的镜像。此时,容器就像潘多拉的魔盒一样,你永远不会知道里面到底有什么。

从规范性的角度来看,容器应用商店或许是个好办法。事实上,很多服务商甚至不知道自己的容器有问题,直到漏洞爆发才发现。通常,使用者应该选择熟识的服务商、避开那些长期没有更新过的容器。至于提供方,只能把控好代码质量,定期“体检”。

结语

未来,前沿技术、社区生态、企业支持将成为容器发展的三大基础,上云容器化已经成为趋势,但实际应用过程中还要根据自身业务特性做出判断,避开容器初期部署时的不稳定因素,这样才能将商业价值最大化。 


原文发布时间为:2017-10-10 

本文作者:徐鹏

本文来自云栖社区合作伙伴“51CTO”,了解相关信息可以关注。


相关文章
|
机器学习/深度学习 自然语言处理 数据处理
什么是数据标注
什么是数据标注
6822 0
【资源分享】阿里云盘资源永久汇总页
不知道大家的阿里云盘现在有多少容量了?阿里为了资源也为了网盘活跃度,在九月推出限时活动,分享赢10T容量。因此带来了这一波的阿里盘分享热潮,当然大部分人都是奔着10T去的。所以网上资源翻来覆去的很多,重复的也多。正因如此空空发现了一位网友非常的有心,将分享出来网盘资源进行了梳理汇总,并且搭建了这个终极阿里云盘资源整合网站——【阿里云盘资源永久汇总页】。
257076 11
【资源分享】阿里云盘资源永久汇总页
|
存储 Shell Linux
安卓手机上的终端模拟器Termux,实现了在手机上运行python
安卓手机上的终端模拟器Termux,可以在手机上运行python
3235 2
|
3月前
|
人工智能 API 开发者
阿里云百炼Coding Plan售罄、抢不到怎么办?最新解决攻略及替代方案
阿里云百炼Coding Plan因Lite版停售、Pro版每日限量抢购(9:30开售),致“一码难求”。本文解析售罄原因,提供抢购技巧(账号/支付/刷新时机等),并推荐零门槛替代方案:开通百炼按量付费服务,享100万免费Tokens、同款满血模型,即开即用。
924 3
|
网络协议 Linux 网络安全
微软工程师偷偷在用!这款SSH工具让Windows操控CentOS比Mac还优雅!
远程登录Linux服务器是管理和维护服务器的重要手段,尤其在远程办公、云服务管理等场景中不可或缺。通过工具如XShell,用户可以方便地进行远程管理。SSH协议确保了数据传输的安全性,命令行界面提高了操作效率。配置XShell连接CentOS时,需确保Linux系统开启sshd服务和22端口,并正确设置主机地址、用户名和密码。此外,调整字体和配色方案可优化使用体验,解决中文显示问题。
708 21
微软工程师偷偷在用!这款SSH工具让Windows操控CentOS比Mac还优雅!
|
Java 关系型数据库 MySQL
连接池技术:简单而强大的加速数据库访问方法
连接池技术是一种简单而强大的方法,可用于加速数据库访问。在传统的数据库访问过程中,每次与数据库建立连接和关闭连接都需要耗费大量的时间和资源。而连接池技术通过事先建立一组可重复使用的数据库连接,有效地减少了连接和关闭连接的开销。本文将深入探讨连接池技术的工作原理和优势,以及如何正确配置和使用连接池来提高应用程序的性能。无论你是开发人员还是系统管理员,通过了解连接池技术,你将能够更好地利用数据库资源,使系统更加稳定和高效。
1554 0
|
安全 算法 网络安全
IPsec VPN简介
IPsec VPN简介
2137 6
|
缓存 Linux
CentOS7系统配置国内yum源和epel源
1.首先进入/etc/yum.repos.d/目录下,新建一个repo_bak目录,用于保存系统中原来的repo文件 [root@bogon ~]# cd /etc/yum.repos.d/ [root@bogon yum.
13017 57
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
658 1