认识Dockers

  Docker – 

        Docker是一种Linux容器工具集,它是为“构建(build)、交付(ship)和运行(运行)”分布式应用而设计的。作为DotCloud公司的开源项目,其首发版本的时间是2013年的3月份。该项目很快就受到欢迎,这也使得DotCloud公司将其品牌改为Docker(并最终将其原有的PaaS业务出售而专注在Docker上)。Docker 1.0在2014年6月发布,而且延续了之前每月发布一个版本的节奏。

其1.0版本标志着Docker公司认为Docker平台已经足够成熟,并可以被应用到产品中(公司及其合作伙伴们还提供了一些需要付费的支持选项)。每月的版本更新显示出该项目仍在快速发展,比如增加新的特性,解决发现的问题。这个项目成功地将“交付”和“运行”解耦,这样源自任意Docker版本的镜像都可以和其它任意不同版本一起工作(前向和后向均可兼容),这就为Docker应用提供了稳定的基础,以应对快速的变化。

Docker发展成最受欢迎的开源项目可能会被人看作是一种炒作,但其实这个结果还是有坚实的基础来支撑的。Docker吸引了业界众多知名大牌厂家的支持,其中包括亚马逊(Amazon)、Canonical、CenturyLink、谷歌(Google)、IBM、 Microsoft、New Relic、Pivotal、Red Hat和VMware,这使得只要在有Linux的地方,Docker就几乎随处可用。除了这些大厂家,许多初创企业也围绕着Docker来发展,或是将它们的发展方向和Docker更好地结合起来。所有这些合作伙伴(或大或小)驱动着核心项目和周边生态系统的快速发展。

基于虚拟化的容器云

基本概念:

  1. Docker镜像:

  2. Docker镜像是一个静态的文件,包含了一个应用程序的所有依赖项和配置信息。它可以被用来创建Docker容器。

  3. Docker容器:Docker容器是Docker镜像的运行实例,它包括了一个应用程序和它的所有依赖项。

  4. Docker仓库:Docker仓库是一个存储和管理Docker镜像的地方,可以公开访问或者私密存储。

优势:

  1. 隔离性:Docker容器提供了应用程序的隔离性,容器之间互不影响,可以避免应用程序之间的冲突。

  2. 灵活性:由于Docker容器是轻量级的,它可以快速地启动和停止,可以满足快速部署和扩展的需求。

  3. 轻量级:Docker容器只包含应用程序和它的依赖项,因此它的体积很小,可以减少资源的消耗。

在应用程序开发中的实际应用:

  1. 环境一致性:Docker容器可以提供一致的开发环境,避免在不同开发环境下出现的问题。

  2. 持续集成:Docker容器可以用于持续集成和持续部署,使得开发人员可以快速地构建、测试和部署应用程序。

  3. 多租户支持:Docker容器可以用于多租户支持,使得开发人员可以在同一台物理机上运行多个应用程序。

用程序部署:

Dockers容器可以在任何Ubuntu,CentOS,Debian等主机上运行,这使得应用程序部署变得更加灵活和可移植。

  1. 环境隔离:通过将应用程序及其依赖项打包成一个独立的容器,可以避免应用程序之间的干扰和冲突,也可以保证应用程序在不同环境下的一致性。

  2. CI/CD 流程: Dockers容器可以轻松地与持续集成和持续部署(CI/CD)工具集成,从而简化了构建,测试和部署流程。

  3. 资源利用率: 使用虚拟化技术进行部署,可以有效地利用硬件资源,节省成本。

  4. 多语言支持: Dockers容器可以支持多种编程语言和开发框架,在同一环境下,运行不同的应用程序。

Dockers 的缺点:

  1. 性能问题:尽管 Docker 的性能比虚拟机高出很多,但是 Docker 的容器共享主机的操作系统内核,可能会影响容器的性能。

  2. 存储问题:Docker 存储方案主要以本地文件系统为基础,因此在容器的存储限制和数据卷方面可能会有限制。

  3. 安全问题:Docker 容器之间共享主机的内核,这意味着一个容器的安全问题可能会影响另一个容器,因此必须采取安全措施。

  4. 复杂性问题:Docker 有很多命令和功能,需要花时间学习和掌握,特别是在开发和部署复杂的应用程序时,可能需要更多的配置和维护。

  5. 网络问题:Docker 默认只支持单主机网络,如果需要跨主机通信,可能需要使用复杂的网络配置和专业知识。

容器和虚拟机的对比

Docker容器要比虚拟机有效率的多,这是因为它们可以共享内核和相关的库。同样的原因,容器所占用的内存也要比虚拟机少得多,虽然虚拟机利用了RAM的过度承诺技术(RAM overcommitment)。容器也减少了对存储的占用,因为部署的容器会共享镜像的底层。IBM的Boden Russel已经做了一个基准测试(benchmarking)来对比两者的不同。

容器也表现出比虚拟机更低的系统负载,所以同样的应用,在容器中相比在虚拟机中,性能通常会相当或者更好。IBM的研究者团队发布了一个虚拟机和Linux容器性能对比的报告可以参考。

容器只是在隔离特性上要比虚拟机差,虚拟机可以使用ring-1特权的硬件隔离技术,如Intel的VT-d and VT-x。这种隔离技术可以防止虚拟机破出(breaking out)和彼此交互。容器没有任何形式的硬件隔离,这使得它容易受到漏洞的利用。从Shocker(可对Docker进行概念攻击)的验证来看,Docker 1.0之前的版本都是很脆弱的。尽管利用Shocker,Docker在1.0版本中修复了一些特定的问题,但Docker的CTO Solomon Hykes仍然表示:“当我们感觉可以轻松地宣称Docker打开箱(out-of-the-box)可以安全容纳非受信的uid0程序(译者注: root和超级用户权限)时,我们一定会明言相告”。Hykes的话从另一方面承认仍然存在一些其他的漏洞和相关的风险,在容器变得可靠之前还有很多工作要做。

对于许多用户案例,在容器和虚拟机二者之间选择其一是种错误的二分法。Docker可以在虚拟机中运行地很好,这可以让它应用在已有的虚拟化框架中,如私有云和公有云。同样也有可能在容器中运行虚拟机,这有点像谷歌在它的云平台中使用容器的方式。只要IaaS得到广泛应用,并可按需提供虚拟机服务,那么就有理由期待未来数年容器和虚拟机的应用可以并存。还有一种可能,即将容器管理和虚拟化技术进行融合以提供一种两全其美的方法:所以硬件信任锚微虚拟化实现支撑libcontainer能够与Docker的工具链和生态系统的前端进行集成,而使用不同的提供了更好隔离性的后端。微虚拟技术(类似于Bromium的 vSentry和VMware的 Project Fargo)已经应用到桌面环境中为应用提供基于硬件的隔离,所以相同的方法可以使用到libcontainer上,作为Linux核心容器机制的替代技术。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孪生质数-希灵Security

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值