文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

都2020年了,居然还有人没有在数据科学项目中使用Docker?

2024-12-24 16:33

关注

很大原因是库和 IDE,甚至 Python 代码本身都会经历更新和版本更改,有时候,我们对一个库进行更新,就会导致另一段代码报错。正因如此,我们经常需要修复各种来源不明的 BUG。

此外,如果我们同时开发多个项目,可能会出现依赖性冲突。如果一段代码因为另一段代码而出现 BUG 时,情况会更糟糕。

另外,如果你想将一个项目共享给一个在不同操作系统上工作的团队成员,或者将你在 Mac 上构建的项目发送到另一个操作系统上的服务器,你是否需要重新配置代码?很明显是一定需要的。

因此,为了减少这些问题的出现,人们提出使用容器来分离项目和它们所在的环境。容器基本上是一个环境可以运行的地方,与系统中的所有其他东西分开。一旦定义了容器中的内容,就可以轻松地重新创建环境,甚至与同事共享项目。

要求

首先,我们需要安装一些设置:

Windows或macOS:安装Docker Desktop(https://www.docker.com/get-started)

Linux:先安装Docker,再安装 Docker Compose(https://docs.docker.com/compose/install/)

对Python服务进行容器化

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

  1. from flask import Flask 
  2. server = Flask(__name__) 
  3. @server.route("/"
  4.  def hello(): 
  5.     return "Hello World!" 
  6. if __name__ == "__main__"
  7.    server.run(host='0.0.0.0'

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

  1. Flask==1.1.1 

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

  1. app 
  2. ├─── requirements.txt 
  3. └─── src 
  4.      └─── server.py 

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

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

让我们进入容器化。

Dockerfile

要运行 Python 代码,我们将容器打包为 Docker 映像,然后基于它运行一个容器。如下所示:

分析 Dockerfile

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

  1. # 设置基本映像(主机操作系统) 
  2. FROM python:3.8 
  3. # 在容器中设置工作目录 
  4. WORKDIR /code 
  5. # 将依赖项文件复制到工作目录中 
  6. COPY requirements.txt . 
  7. # 安装依赖项 
  8. RUN pip install -r requirements.txt 
  9. # 将本地src目录的内容复制到工作目录 
  10. COPY src/ . 
  11. # 在容器启动时运行的命令 
  12. CMD [ "python""./server.py" ] 

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

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

  1. $ docker build -t myimage . 
  2. Sending build context to Docker daemon 6.144kB 
  3. Step 1/6 : FROM python:3.8 
  4. 3.8.3-alpine: Pulling from library/python 
  5. … 
  6. Status: Downloaded newer image for python:3.8.3-alpine 
  7. ---> 8ecf5a48c789 
  8. Step 2/6 : WORKDIR /code 
  9. ---> Running in 9313cd5d834d 
  10. Removing intermediate container 9313cd5d834d 
  11. ---> c852f099c2f9 
  12. Step 3/6 : COPY requirements.txt . 
  13. ---> 2c375052ccd6 
  14. Step 4/6 : RUN pip install -r requirements.txt 
  15. ---> Running in 3ee13f767d05 
  16. … 
  17. Removing intermediate container 3ee13f767d05 
  18. ---> 8dd7f46dddf0 
  19. Step 5/6 : COPY ./src . 
  20. ---> 6ab2d97e4aa1 
  21. Step 6/6 : CMD python server.py 
  22. ---> Running in fbbbb21349be 
  23. Removing intermediate container fbbbb21349be 
  24. ---> 27084556702b 
  25. Successfully built 70a92e92f3b5 
  26. Successfully tagged myimage:latest 

然后,我们可以看到映像位于本地映像存储目录中:

  1. $ docker images 
  2. REPOSITORY    TAG       IMAGE ID        CREATED          SIZE 
  3. myimage       latest    70a92e92f3b5    8 seconds ago    991MB 

在开发过程中,我们希望花费尽可能少的时间,为 Python 服务重建映像。

注意:Docker 和 virtualenv 非常相似但又有所不同。Virtualenv 只允许我们在 Python 的依赖关系之间切换,无法使用主机操作系统。但是,使用Docker,你可以在任何操作系统上交换整个操作系统:安装并运行Python(例如 UBTUN,Debian,Alpine,甚至Windows Server Core)。因此,如果你的团队工作需要验证你的技术,请使用Docker。如果不需要,可以使用 venv。

总结

在上文中,我们展示了如何把 Python 服务容器化。 希望此过程将变得更容易,并且能够为你的项目提供更长的保质期。同时,因为依赖关系的变化,也能降低你的代码错误的可能性。

 

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯