当前位置: 首页 > 科技观察

Docker八大应用场景让真实项目价值最大化

时间:2023-03-13 22:28:39 科技观察

在过去的一年里,业界和用户对Docker(无论是技术还是公司)的认知度都有了很大的提升。可以这么说,这是我在职业生涯中见过的发展最快的技术,采用率也是最快的***。该技术已经被一些主要企业采用,并得到包括微软和谷歌在内的主要软件供应商的认可。该公司已收到大量资金,并投入巨资进行研发,以使该技术更易于使用,包括改进网络功能。2014年,Docker甚至投入了相当大的精力打造正式的合作伙伴体系。我的公司Flux7是Docker的创始合作伙伴之一。我们公司之所以被选为合作伙伴,是因为我们在几个关键用例中实施Docker的早期经验。本文重点介绍了我认为基于实践经验和反复试验的最佳用例。Docker的主要优势Docker提供了几乎零开销的轻量级虚拟化技术。因此,这带来了一些有影响力的优势。首先,您可以受益于Docker提供的额外抽象层,而不必担心开销。下一个很大的优势是,与单独使用虚拟化相比,您可以在一台机器上运行更多的容器。另一个重大影响是容器可以在几秒钟内构建和拆除。Docker常见问题解答(FAQ)全面概述了Docker为传统容器添加的功能。简而言之,Docker功能分为以下几类:将应用程序便携式部署为单个对象,而不是进程沙箱;以应用程序为中心,而不是以机器/服务器为中心;支持容器自动化;内置版本控制;可重复使用的组件;共享容器的通用注册表;由于已发布的API,工具生态系统越来越大。在我看来,真正让Docker脱颖而出的特性是分层文件系统和对整批容器应用版本控制的能力。能够跟踪、恢复和审查更改的好处是众所周知的;它也是一般软件开发中流行、广泛使用的功能。Docker将相同的概念提升到了更高的层次;整个应用程序及其所有依赖项都在一个环境中,这是独一无二的。Docker的关键用例以下只是利用Docker作为支持技术以提供一致环境且开销很小的几个用例。1.简化配置Docker提倡的主要用例是简化配置。虚拟机的一大优点是能够在您的基础架构上运行任何平台,虚拟机有自己的配置。Docker在没有虚拟机开销的情况下提供相同的功能。它允许您将环境和配置放入代码中进行部署。相同的Docker配置也可以用于各种环境。这将基础架构需求与应用程序环境分离开来。您可以在多个IaaS/PaaS上自由运行应用程序,无需任何额外更改。这是Docker可以帮助您实现的最终目标。今天,从亚马逊到谷歌的每个IaaS/PaaS供应商都支持Docker。知名厂商看好Docker。现在,轮到您从这些相同的选择中获益了。2.代码流水线管理前一个用例对代码流水线管理有重大影响。当代码从开发人员的机器转移到生产环境时,它会在此过程中经历许多不同的环境。每个环境都会略有不同。Docker通过为应用程序从开发到生产提供一致的环境来简化代码开发和部署管道。Docker镜像的不可变性及其易于构建的特性可以帮助您实现应用程序的运行环境从开发环境到生产环境不会发生变化。#p#3.提高开发人员生产力这反过来又为Docker提供了一些额外的优势,用于提高开发人员生产力的用例。详细的例子,你可以阅读我在DockerCon2014上的演讲。在开发环境中,我们有两个相互冲突的目标:我们希望尽可能接近生产环境;我们希望开发环境尽可能快地进行交互使用。理想情况下,为了实现第一个目标,我们需要每个服务都运行在自己的虚拟机上,反映出应用程序在生产环境中的运行情况。但是,我们不希望每次需要编译时都需要互联网连接,这样总是会增加远程工作的开销。这时候,开销极低的Docker就派上用场了。开发环境通常具有低内存容量;Docker可以轻松地保持数十个服务的运行而不会增加内存占用(虚拟机通常是这种情况)。为了实现第二个目标,并提供快速反馈循环,我们使用Docker的共享卷将应用程序代码从容器的主机操作系统(即虚拟设备虚拟机(通常是Vagrant设备))提供给一个或多个容器。容器。使用与主机操作系统(Windows、Mac或Linux)同步的Vagrant文件夹,将应用程序源代码提供给容器主机操作系统(Vagrant设备)。这种方法有很多好处。开发人员可以从他选择的平台(Windows、Mac或Linux)编辑源代码,还可以立即看到更改,因为正在运行的应用程序使用相同的源代码,并且运行环境位于使用一个的Vagrant设备上或多个Docker容器设置在里面。此外,这种方法可以帮助不太了解后端细节的前端工程师轻松使用全面的应用程序架构并专注于自己的兴趣,而不必担心设置或安装的麻烦。此外,它还提供了一个机会,可以进一步深入研究后端系统如何在后台工作,以便更深入地了解整体架构。更深入地阐述这种方法可能会有用。我们所说的Vagrantappliance很可能是一个普通的操作系统发行版,它完全通过一个Vagrant文??件(Vagrantfile)来配置。或者,它可以是一个自定义设备,以某种方式预先配置,然后我们可以在需要Vagrant时使用Vagrant文件进一步配置它。如果您想独立于网络,那么构建一个所有内容都经过预先配置的自定义设备是可行的方法。这种方法唯一的缺点是虚拟机设备体积庞大,而且环境没有更新。当您想要实现您的第一个目标(最小化开发和生产之间的不一致)时要考虑的另一件事是制定一个策略来进行数据库转储,以便覆盖应用程序的所有部分。这就像我们在测试覆盖率方面所追求的。仅仅获得随机性的子集并不是最好的解决方案。您需要一种与应用程序的所有相关功能一致的策略。如果您可以获得完整的数据库转储,那也是可行的方法。但是在现在的大数据时代,你很难做到这一点。您需要一个子集来处理或测试。4.应用程序隔离在同一台机器上运行多个应用程序的原因有很多。前面提到的开发人员生产力的提高就是一个这样的例子。但也有其他用途。一些值得考虑的此类用例包括:整合服务器以降低成本,或逐渐计划将单体应用程序分成几个不相交的部分。例如,假设您需要运行两个RESTAPI服务器,都使用flask框架。但是每台服务器都使用略有不同版本的闪存和其他此类依赖项。在不同的容器下运行这些API服务器提供了一种摆脱所谓的“依赖地狱”的简单方法。5.服务器整合就像使用虚拟机整合多个应用程序一样,Docker的应用程序隔离特性可以整合多个服务器以节省成本。然而,由于没有多个操作系统的内存占用并且能够在实例之间共享未使用的内存,Docker提供了比虚拟机更好的服务器整合。新一代灵活可定制的平台即服务(PaaS,如Heroku、ElasticBeanstalk和AppEngine)都使用了容器的这些强大特性,而现在有了Docker,这些特性触手可及。此外,Deis、Kubernetes、Cadvisor、Panamax和其他开源项目使得部署和监控代表多层应用程序架构的大量容器变得易于管理。6.调试能力Docker提供了许多不一定是特定于容器的工具,但它们与容器概念配合得很好。它们还提供非常有用的功能。这包括:能够检查容器和容器版本,以及另外使两个容器不同。这在修复应用程序时非常有用。Flux7.com在Docker容器中运行。我们的Web开发人员告诉我们,一次崩溃是由他从UI推送到functions.php文件的代码更改引起的。我在一分钟内搭建了开发环境,让Web开发人员可以在沙箱中进行调试。在他后来告诉我们一切正常之后,我们能够切换回最新版本的网站,这要归功于Docker和Linux容器。虽然这个过程可以使用另一种策略来解决,但是使用Docker是解决这个问题的有效方法。此外,它是我们实施许多前端功能至关重要的客户部署的一种方式。7.多租户但是Docker的另一个有趣的用例是它可以用于多租户应用程序,从而避免对应用程序进行重大重写。我们自己的示例是为IoT应用程序开发方便的多租户架构。这种多租户应用程序的代码库更加复杂、不灵活且难以处理。重新构建应用程序不仅耗时,而且会花费很多钱。使用Docker,为运行多个应用层实例的每个用户设置隔离环境既简单又便宜。这是可能的,因为可以快速构建Docker环境,并且因为我们可以使用易于使用的API以编程方式启动容器。我们使用了docker-py,这是一个Python库,它有助于通过Web应用程序界面与Docker守护进程进行交互。8.快速部署在虚拟机出现之前,配置新的硬件资源需要几天时间。虚拟化将这个时间缩短到几分钟。Docker甚至将其缩短到几秒钟,因为它只需要为这个过程创建容器,而不需要启动操作系统。正是这种支持技术促使谷歌和Facebook使用容器。事实上,您可以在数据中心创建和销毁资源,而不必担心重新构建它们的成本。由于数据中心的利用率通常只有30%左右,因此很容易通过更积极地分配资源来增加这一数字。此外,开通新实例的成本低,可以更积极主动地分配资源。此外,Docker镜像的不可变特性让您高枕无忧,因为一切都会像以前一样正常工作。结论从确保安全性到为开发人员赋能,Docker是合适解决方案的用例还有很多。本文重点介绍了我们认为可以为实际项目增加重要价值的用例。从运行API服务器和Web应用程序,到使用计算统一设备架构(CUDA)和全功能高清桌面云可视化(HighDefinitionDesktopCloudVisualization)运行应用程序——你可以从运行的容器中使用GPU,Docker提供了广泛的用例。Docker使Linux容器化变得易于访问、易于使用,更重要的是,易于管理。对我们来说,使用Docker的动机一直是为项目使用正确的工具。最有趣的方面是业务原理,然后我们根据业务原理构建系统。欢迎留言交流。原文标题:800x6008-proven-real-world-ways-to-use-dockerNormal07.8磅02falsefalsefalseEN-USZH-CNX-NONEMicrosoftInternetExplorer4/*StyleDefinitions*/table.MsoNormalTable{mso-style-name:通用表格;mso-tstyle-rowband-size:0;mso-tstyle-colband-size:0;mso-style-noshow:yes;mso-style-priority:99;mso-style-parent:"";mso-padding-alt:0cm5.4pt0cm5.4pt;mso-para-margin:0cm;mso-para-margin-bottom:.0001pt;mso-pagination:widow-orphan;font-size:10.0pt;font-family:"TimesNewRoman",serif;}