重点 (Top highlight)

One of the hardest problems that new programmers face is understanding the concept of an ‘environment’. An environment is what you could say, the system that you code within. In principal it sounds easy, but later on in your career you begin to understand just how difficult it is to maintain.

新程序员面临的最困难的问题之一是了解“环境”的概念。 您可以说的是环境,即您在其中编码的系统。 从原则上讲,这听起来很容易,但是在职业生涯的后期,您开始了解维护的难易程度。

The reason being is that libraries and IDE’s and even the Python Code itself goes through updates and version changes, then sometimes, you’ll update one library, and a separate piece of code will fail, so you’ll need to go back and fix it.

原因是库和IDE甚至Python代码本身都会进行更新和版本更改,因此有时您将更新一个库,而另一段代码将失败,因此您需要返回并进行修复它。

Moreover, if we have multiple projects being developed at the same time, there can be dependency conflicts, which is when things really get ugly as code fails directly because of another piece of code.

而且,如果我们同时开发多个项目,则可能存在依赖冲突,这是当代码由于另一段代码而直接失败时,事情变得非常难看。

Also, say you want to share a project to a team mate working on a different OS, or even ship your project that you’ve built on your Mac to a production server on a different OS, would you have to reconfigure your code? Yes, you probably will have to.

另外,假设您想与在不同OS上工作的团队共享一个项目,或者甚至将在Mac上构建的项目运送到在不同OS上的生产服务器上,是否需要重新配置代码? 是的,您可能必须这样做。

So to mitigate any of these issues, containers were proposed as a method to separate projects and the environments that they exist within. A container is basically a place where an environment can run, separate to everything else on the system. Once you define what’s in your container, it becomes so much easier to recreate the environment, and even share the project with teammates.

因此,为了缓解这些问题中的任何一个,提出了将containers作为一种将项目及其所处环境分开的方法。 一个 container 基本上是一个可以运行环境的地方,与系统上的所有其他地方分开。 一旦定义了container,中的container,就可以轻松地重新创建环境,甚至与队友共享项目。

要求 (Requirements)

To get started, we need to install a few things to get set up:

首先,我们需要安装一些东西进行设置:

  • Windows or macOS: Install Docker Desktop

    Windows或macOS: 安装Docker桌面

  • Linux: Install Docker and then Docker Compose

    Linux:先安装Docker ,再安装Docker Compose

容器化Python服务 (Containerise a Python service)

Let’s imagine we’re creating a Flask service called server.py and let’s say the contents of the file are as follows:

假设我们正在创建一个名为server.py的Flask服务,并假设文件的内容如下:

from flask import Flaskserver = Flask(__name__)@server.route("/") def hello():    return "Hello World!"if __name__ == "__main__":   server.run(host='0.0.0.0')

Now as I said above, we need to keep a record of the dependencies for our code so for this, we can create a requirements.txt file that can contain the following requirement:

现在,如上所述,我们需要记录代码的依赖关系,因此,我们可以创建一个requirements.txt文件,其中可以包含以下要求:

Flask==1.1.1

So our package has the following structure:

因此,我们的软件包具有以下结构:

app├─── requirements.txt└─── src     └─── server.py

The structure is pretty logical (source kept is kept in a separate directory). To execute our Python program, all is left to do is to install a Python interpreter and run it.

该结构非常合理(源代码保存在单独的目录中)。 要执行我们的Python程序,剩下要做的就是安装一个Python解释器并运行它。

Now to run the program, we could run it locally but suppose we have 15 projects we’re working through — it makes sense to run it in a container to avoid any conflicts with any other projects.

现在要运行该程序,我们可以在本地运行它,但假设我们正在处理15个项目-在容器中运行它以避免与任何其他项目发生任何冲突都是有意义的。

Let’s move onto containerisation.

让我们进入集装箱化。

Photo by Victoire Joncheray on Unsplash
Victoire Joncheray在Unsplash上拍摄的照片

Docker文件 (Dockerfile)

To run Python code, we pack the container as a Docker image and then run a container based on it. So as follows:

要运行Python代码,我们将容器打包为Docker image ,然后基于该容器运行一个容器。 因此如下:

  1. Create a Dockerfile that contains instructions needed to build the image创建一个Dockerfile,其中包含构建映像所需的指令
  2. Then create an image by the Docker builder

    然后通过Docker构建器创建image

  3. The simple docker run <image> command then creates a container that is running an app

    简单的docker run <image>命令然后创建一个运行应用程序的容器

Dockerfile的分析 (Analysis of a Dockerfile)

A Dockerfile is a file that contains instructions for assembling a Docker image (saved as myimage):

Dockerfile是一个文件,其中包含有关组装Docker映像(保存为myimage )的说明:

# set base image (host OS)FROM python:3.8# set the working directory in the containerWORKDIR /code# copy the dependencies file to the working directoryCOPY requirements.txt .# install dependenciesRUN pip install -r requirements.txt# copy the content of the local src directory to the working directoryCOPY src/ .# command to run on container startCMD [ "python", "./server.py" ]

A Dockerfile is compiled line by line so the builder generates an image layer and stacks it upon previous images.

Dockerfile是逐行编译的,因此构建器会生成图像层并将其堆叠在先前的图像上。

We can also observe in the output of the build command the Dockerfile instructions being executed as steps.

我们还可以在build命令的输出中观察到作为步骤执行的Dockerfile指令。

$ docker build -t myimage .Sending build context to Docker daemon 6.144kBStep 1/6 : FROM python:3.83.8.3-alpine: Pulling from library/python…Status: Downloaded newer image for python:3.8.3-alpine---> 8ecf5a48c789Step 2/6 : WORKDIR /code---> Running in 9313cd5d834dRemoving intermediate container 9313cd5d834d---> c852f099c2f9Step 3/6 : COPY requirements.txt .---> 2c375052ccd6Step 4/6 : RUN pip install -r requirements.txt---> Running in 3ee13f767d05…Removing intermediate container 3ee13f767d05---> 8dd7f46dddf0Step 5/6 : COPY ./src .---> 6ab2d97e4aa1Step 6/6 : CMD python server.py---> Running in fbbbb21349beRemoving intermediate container fbbbb21349be---> 27084556702bSuccessfully built 70a92e92f3b5Successfully tagged myimage:latest

Then, we can see that the image is in the local image store:

然后,我们可以看到该图像在本地图像存储中:

$ docker imagesREPOSITORY    TAG       IMAGE ID        CREATED          SIZEmyimage       latest    70a92e92f3b5    8 seconds ago    991MB

During development, we may need to rebuild the image for our Python service multiple times and we want this to take as little time as possible.

在开发过程中,我们可能需要多次重建Python服务的映像,并且我们希望这样做花费尽可能少的时间。

Note: Docker and virtualenv are quite similar but different. Virtualenv only allows you to switch between Python Dependencies but you’re stuck with your host OS. However with Docker, you can swap out the entire OS — install and run Python on any OS (think Ubuntu, Debian, Alpine, even Windows Server Core). Therefore if you work in a team and want to future proof your technology, use Docker. If you don’t care about it — venv is fine, but remember it’s not future proof. Please reference this if you still want more information.

注意: Dockervirtualenv非常相似,但有所不同。 Virtualenv只允许您在Py​​thon依赖关系之间进行切换,但是您对主机OS感到Virtualenv 。 但是,使用Docker ,您可以换出整个OS -在任何OS上安装并运行Python(请考虑使用Ubuntu,Debian,Alpine甚至Windows Server Core)。 因此,如果您在团队中工作,并且希望将来验证您的技术,请使用Docker 。 如果您不关心它, venv很好,但是请记住,这并不是未来的证明。 如果您仍需要更多信息,请参考此内容。

There you have it! We’ve shown how to containerise a Python service. Hopefully, this process will make it a lot easier and gives your project a longer shelf life as it’ll be less likely to come down with code-bugs as dependencies change.

你有它! 我们已经展示了如何容器化Python服务。 希望这个过程将使它变得更容易,并为您的项目提供更长的保存期限,因为随着依赖关系的改变,代码错误的可能性将降低。

Thanks for reading, and please let me know if you have any questions!

感谢您的阅读,如果您有任何疑问,请告诉我!

Keep up to date with my latest articles here!

在这里了解我的最新文章!

翻译自: https://towardsdatascience.com/youre-living-in-1985-if-you-don-t-use-docker-for-your-data-science-projects-858264db0082


http://www.taodudu.cc/news/show-994795.html

相关文章:

  • docker部署flask_使用Docker,GCP Cloud Run和Flask部署Scikit-Learn NLP模型
  • 问卷 假设检验 t检验_真实问题的假设检验
  • 大数据技术 学习之旅_为什么聚焦是您数据科学之旅的关键
  • 无监督学习 k-means_无监督学习-第4部分
  • 深度学习算法原理_用于对象检测的深度学习算法的基本原理
  • 软件本地化 pdf_软件本地化与标准翻译
  • 数据库不停机导数据方案_如何计算数据停机成本
  • python初学者_面向初学者的20种重要的Python技巧
  • 贝叶斯网络建模
  • 数据科学家数据分析师_使您的分析师和数据科学家在数据处理方面保持一致
  • python db2查询_如何将DB2查询转换为python脚本
  • 爱因斯坦提出的逻辑性问题_提出正确问题的重要性
  • 餐厅数据分析报告_如何使用数据科学选择理想的餐厅设计场所
  • 熊猫直播 使用什么sdk_没什么可花的-但是16项基本操作才能让您开始使用熊猫
  • 关系型数据库的核心单元是_核中的数据关系
  • 小程序 国际化_在国际化您的应用程序时忘记的一件事
  • robo 3t连接_使用robo 3t studio 3t连接到地图集
  • 软件需求规格说明书通用模版_通用需求挑战和机遇
  • 一类动词二类动词三类动词_基于http动词的完全无效授权技术
  • 一年了
  • 将DataSet中的操作更新到Access数据库
  • 我喜欢的一首歌--《幸福的瞬间》
  • XForum 里用 Filter 编程实现安全访问控制
  • chedandekaoyan
  • Microsoft好员工的十个标准
  • GARFIELD@11-20-2004
  • SPS用户管理的问题
  • 最近关注的一些东西
  • 吉他谱——单身情歌
  • 新增两款Skin(clover与Valentine)

如果您不将Docker用于数据科学项目,那么您将生活在1985年相关推荐

  1. python scikit_如何将Scikit学习Python库用于数据科学项目

    python scikit 最初于2007年发布的Scikit-learn Python库从头到尾通常用​​于解决机器学习和数据科学问题. 通用库提供整洁,一致,高效的API和详尽的在线文档. 什么是 ...

  2. api数据库管理_API管理平台如何增强您的数据科学项目

    api数据库管理 Data scientists regularly use APIs (Application Programming Interfaces) to implement advanc ...

  3. python的顶级库_三大用于数据科学的顶级Python库

    Python有许多吸引力,如效率,代码可读性和速度,使其成为数据科学爱好者的首选编程语言.Python通常是希望升级其应用程序功能的数据科学家和机器学习专家的首选. 由于其广泛的用途,Python拥有 ...

  4. python 生成空白矩阵_3个用于数据科学的顶级Python库

    用这些库把Python变成一个科学数据分析和建模工具. image by Opensource.com Python许多吸引人的特点如效率.代码可读性和速度使它成为数据科学爱好者的首选编程语言.对于希 ...

  5. knime 大数据_如何将KNIME用于数据科学

    knime 大数据 . KNIME(K是无声的,因此发音为nīm )是一个高度评价的数据分析平台,具有广泛的适用性,并且与其他产品(例如与数据库,语言,机器学习框架和深度学习框架)进行了许多集成. K ...

  6. 独家 | 手把手教你组织数据科学项目!(附代码)

    作者:kdnuggets 翻译:和中华 校对:丁楠雅 本文约4200字,建议阅读10分钟. 本文介绍了一个工具可以帮助迅速构建一个标准但灵活的数据科学项目结构,便于实施和分享数据科学工作. 由Driv ...

  7. 如何创建一个数据科学项目?

    摘要: 在一个新的数据科学项目,你应该如何组织你的项目流程?数据和代码要放在那里?应该使用什么工具?在对数据处理之前,需要考虑哪些方面?读完本文,会让你拥有一个更加科学的工作流程. 假如你想要开始一个 ...

  8. 如何创建一个数据科学项目? 1

    假如你想要开始一个新的数据科学项目,比如对数据集进行简单的分析,或者是一个复杂的项目.你应该如何组织你的项目流程?数据和代码要放在那里?应该使用什么工具?在对数据处理之前,需要考虑哪些方面? 数据科学 ...

  9. 隔离太无聊?每天一个数据科学项目,数据集都准备好了!

    来源:大数据文摘 本文约2300字,建议阅读5分钟 本文提供了14个可以利用业余时间完成的数据科学项目清单. 首先,我想向所有的护士,医生,超市员工,公共管理人员以及其他冒着生命危险为我们服务的人致敬 ...

最新文章

  1. 五种常见的 PHP 设计模式
  2. SAS (Serial Attached SCSI) 技术详解
  3. ABAP简介以及OpenSQL与NativeSQL的区别
  4. Junit 测试之 Spring Test
  5. 生成目录树CMD命令(bat文件)
  6. linux文本处理常用指令总结
  7. mysql1440秒未活动_phpMyAdmin登陆超时1440秒未活动请重新登录
  8. Java内部类详解(Mark)
  9. C++ #define参数问题
  10. ZooKeeper官方文档学习笔记01-zookeeper概述
  11. WCF学习记录【一】
  12. 【java】模拟物流快递系统程序设计
  13. [codeforces 760B]Frodo and pillows
  14. 马上金三银四了,注意下面这几点,面试通过率高达85%
  15. 听说你会Python?做几道题看看呗
  16. Linux shell:sh csh tcsh ash bash dash zsh
  17. re.search与re.findall的区别
  18. 什么是IDC ,可以用来做什么
  19. 设置Ajax为同步请求
  20. 一键生成轮播图,轮播图插件

热门文章

  1. java中json重复数据结构_JAVA把各种数据结构转换为JSON格式
  2. Linux编程手册读书笔记第三章(20140407)
  3. 【ubuntu】ubuntu下用make编译程序报错找不到openssl/conf.h
  4. cf#582div3 D——暴力
  5. Linux C++ 简单爬虫
  6. Linux之GDB命令(二)
  7. java小程序查看器,成功拿到offer
  8. 我了解到的面试的一些小内幕!附面试题答案
  9. 移除html,jsp中的元素
  10. org.apache.maven.archiver.MavenArchiver.getManifest