
如何通俗的解释Docker是什么及其优点?
Jeff Lofvers曾在漫画里说明了在软件开发和数据科学中经常遇到的问题。 如果当你正在准备数据分析或预测模型时,如果你想分享它们,就会发现它们不适用于其他机器。 这个失败,是因为缺少库,库有错误的版本(“依赖地狱”/ ”dependency hell”),或者配置不同。 于是你便开始了耗费时间的故障排除。
解决方案并不困难:Docker以轻量级方式解决了可重复性问题,同时也提供了许多其他优势。
什么是Docker?
Docker是一款执行操作系统级虚拟化的免费软件。 Docker用于运行,被称为容器的软件包。 容器彼此隔离,并捆绑其应用程序、工具、库和配置文件。 所有容器都由单个操作系统内核运行,因此比虚拟机更轻量级。 [Docker维基百科]
Docker可以轻松创建,运行和分发应用程序。 应用程序打包了运行应用程序所需的所有内容。 该概念保证容器可以在每个docker运行环境上运行。
Docker的优势
1、再生性
使用Docker时,可以确保软件产品(应用程序,数据分析,预测模型等)在所有docker运行时环境中运行。因为容器包含运行工程所需的一切,使得货物更加强大。 它不仅分发代码,还分发环境。
2、一致性
Docker提供了一个统一且一致的运行环境,适用于各种软件产品。 它减少了系统管理的时间,更专注于核心工作。 你可能知道Anaconda的环境; Docker类似于整个软件生态系统。
3、可追溯性
a.)Docker容器代码的版本控制
Docker容器是根据脚本构建的,该脚本在必要的软件依赖和环境下是可读摘要的。 这种脚本可以受版本控制。 脚本完全可以通过这种方式跟踪。
b.)所有人工制品的统一分配环境
Docker容器可以存储在组织内的存储库中,从而以这种方式保留整个版本的历史记录。
4、可移植性
Docker容器可以轻松地从一个docker环境移植到另一个docker环境。 Docker Swarm(或Kubernetes)允许自动扩展应用程序,从而以这种方式减少系统管理和操作的成本。
但是,Docker在数据科学领域的使用示例是什么? 接下来,我将专注于数据科学OSEMN的过程。

Docker在数据科学过程中的使用案例
现实是,该过程包含各种工具和编程语言。 Docker是管理这些异构技术堆栈的首选平台,因为每个容器都提供了一个程序所刚好需要的运行环境。 通过这种方式减少了技术堆栈的干扰。
1.获取:从相关来源收集数据
数据是数据科学的燃料。你检索它,例如数据来自调查,临床试验,网络抓取,科学实验,企业应用或模拟。通常,当数据工程师正在处理数据时,同时也涉及其他利益相关者,这导致了各种各样的数据库系统和编程语言。
· Web抓取:与Selenium的Chrome驱动程序和Postgres数据库具有低级依赖关系的Python应用程序,它为Docker Compose应用程序提供了多容器
· 标记图像:使用vue.js精简Web应用程序,NodeJS后端和MongoDB用于标记图像
· 调查:营销团队使用简单的HTML构建微型静态网站,并集成SurveyMonkey表单
· 企业应用:银行网站从后端在AngularJS和Java中使用Oracle,使得银行可以从客户那里获得有价值的数据
· 计算机模拟:用C ++编程的模拟将其结果存储在Amazon S3上的JSON中
· 异步数据流:Car Sensors正在将数据发送给Kafka,Kafka正在公司内部分发数据
所有这些技术堆栈都可以在Docker容器中独立运行。
2.净化:清理数据并将数据汇总到机器可以理解的格式
如果在步骤1中获得的数据是石油,那么现在它是原油。需要进行清理,处理并将其与分析和建模所需的数据相结合。
· 聚合:Java中的应用程序从Kafka流中获取数据,对低级数据进行聚合并将其存储到Oracle数据库
· 数据分析师清理和预处理公司网站应用程序中的数据,为使用RMarkdown Notebook 回答业务问题做准备,分析师们希望与管理员共享
· 机器学习工程师清理来自不同数据源的数据,并和预处理数据组合在一起,用于Jupyter Notebook中的预测模型
· 对Tableau中的高级交互式仪表板进行组合,清理,聚合和预处理以持久保存数据
其中一些例子可能已在数据检索步骤中完成,并且具有更多数据工程技术堆栈。另一些用例则可能与勘探和建模阶段重叠,涉及更典型的数据分析技术。
许多数据分析工作都是在需要发布的Notebook(Jupyter,RMarkdown)中完成的。可以向组织例举使用中央Jupyter的实例。这种方法的问题在于可能会遇到固定配置和库版本。另一种方法是使用Docker容器发布一个或多个Notebook。然后可以更灵活地使用特定设置。
3.探索:找到模式和趋势
在探索阶段,所要做的就是了解数据中的模式和值。 并将结果提供给每个感兴趣的人。
· 数据分析师正在创建Jupyter或RMarkdown的Notebook,以回答那些需要或感兴趣的人分享的问题。
· 数据分析师将公司客户聚集到新的细分市场中,这些细分市场存储在MySQL的客户细分数据库中
· 数据分析师构建交互式网页应用程序,以便为RShiny,Dash,Tableau或Kibana中的感兴趣的利益相关者探索高级数据。 这样管理者可以自己找到模式(危险区域!)。
4.模型:构建模型以进行预测和展望
清理和预处理的数据用于训练机器或深度学习算法。 可以通过这种方式创建模式,从而观察数据的数学表示形式。 它们可用于预测和量化不可言说的内容。
· 在图像中对目标检测的神经网络的完整培训过程,被隔离到在Azure,AWS或Google Cloud上运行的Docker容器
· 由于Python的性能问题,Keras模型被导入DeepLearning4J并作为Java Microservice发布要训练神经网络,需要大量的GPU能力。因为使用GPU无法以与硬件无关且与平台无关的方式完成,所以需要Nvidia Docker将训练过程隔离到Docker容器。
5.解释:充分利用结果
数据科学的见解得到沟通和可视化。 模型作为微服务分发。
· 微型网站讲述数据故事
· Python中的预测机器学习模型作为微服务发布
· Java中具有聚合数据的REST微服务被发布给付费B2B客户
· 在Python中的产品推荐程序服务已集成到公司的Web应用程序中
· 数据驱动的故事发布在公司的Tableau Server上,并共享以供内部和外部使用
· 内容管理团队中的数据故事讲述者在静态Jekyll网站上分享数据分析师的精彩见解
结论
Docker是数据科学家的强大工具,可应用于OSEMN流程的所有阶段。 可以用一致,可重复和可追溯的方式运送各种人工制品。 人工制品的技术堆栈可能非常不同,这是数据科学项目中的现实。 数据工程师使用Oracle,MySQL,MongoDB,Redis或ElasticSearch等数据库或Java,Python或C ++等编程语言。 在分析和建模团队中,人们可能会使用R,Python,Julia或Scala,而数据故事讲述者则使用JavaScript中的d3.js或使用Tableau来讲述他们的故事。 由于专家很少见,所以最好让讲述者使用熟悉的技术,而不是将他们推向未知的技术。 这样会更快地获得更好的结果。
原文作者:Jens Laufer
翻译作者:Yaling Huang
美工编辑:过儿
校对审稿:冬冬
原文链接:https://towardsdatascience.com/example-use-cases-of-docker-in-the-data-science-process-15824137eefd