数据科学家必须要掌握的Docker要点

本文是面向数据科学家的Docker教程,在几分钟内了解Docker的基础知识,并将数据科学应用程序容器化。

微信搜索关注《Python学研大本营》,加入读者群,分享更多精彩

图片

Python以及pandas和scikit-learn等Python数据分析和机器学习库套件可以帮助你轻松开发数据科学应用程序。然而,Python中的依赖性管理是一项挑战。在进行数据科学项目时,需要花费大量时间安装各种库,并跟踪正在使用的库的版本。

图片

如果其他开发人员想要运行您的代码并为项目做出贡献,他们首先需要在他们的机器上设置项目环境,然后才能继续运行代码。即使是如不同的库版本之间的微小差异也可能对代码产生破坏性的影响。这时就可以使用Docker。Docker简化了开发过程,并促进了无缝的协作。

本指南将介绍Docker的基础知识,并教你如何使用Docker对数据科学应用程序进行容器化。

一、什么是Docker?

图片

【Docker】:https://www.docker.com/

Docker是一个容器化工具,可让你构建和共享称为镜像的可移植应用程序。

除了源代码,你的应用程序还将包含一系列依赖项、所需配置、系统工具等。例如,在数据科学项目中,你需要在开发环境(最好是虚拟环境)中安装所有必需的库。还需要确保使用的Python是库支持的最新版本。

然而,当尝试在另一台机器上运行应用程序时,可能仍会遇到问题。这些问题通常源于两台机器之间开发环境中配置和库版本不匹配。

使用Docker,可以打包应用程序及其依赖项和配置。因此,可以为应用程序在各种主机机器上定义一个隔离的、可复现的和一致的环境。

二、Docker基础知识:镜像、容器和注册表

首先简要介绍一些概念和术语:

2.1 Docker镜像

Docker镜像是应用程序的可移植构件。

2.2 Docker容器

当运行一个镜像时,实际上是在容器环境中运行该应用程序。因此,一个正在运行镜像的实例就是一个容器。

2.3 Docker注册表

Docker注册表是用于存储和分发Docker镜像的系统。将应用程序容器化为Docker镜像后,可以通过将其推送到镜像注册表来向开发者社区提供它们。DockerHub是最大的公共注册表,默认情况下,所有镜像都从DockerHub拉取。

三、Docker如何简化开发?

由于容器为应用程序提供了一个隔离的环境,其他开发人员现在只需要在自己的机器上安装Docker。他们可以通过一个命令在远程机器上拉取Docker镜像并启动容器,而无需担心复杂的安装过程。

在开发应用程序时,通常会构建和测试同一应用程序的多个版本。如果使用Docker,就可以在同一环境中的不同容器中运行多个版本的同一应用程序,而不会出现任何冲突。

除了简化开发,Docker还简化了部署,并有助于开发和运维团队有效地进行协作。在服务器端,运维团队不需要花时间解决复杂的版本和依赖冲突。他们只需使用Docker镜像来部署应用程序,确保在生产环境中使用与开发环境相同的容器。

四、基本的Docker命令

接下来快速浏览一些基本的Docker命令,其中大部分将在本教程中使用。

命令功能
docker ps列出所有正在运行的容器
docker pullimage-name从DockerHub默认拉取image-name
docker images列出所有可用的镜像
docker run image-name从镜像启动容器
docker start container-id重新启动已停止的容器
docker stop container-id停止正在运行的容器
docker build path使用Dockerfile中的指令在指定路径上构建一个镜像

注意:如果尚未为用户创建docker组,请在运行所有命令时都要加上sudo前缀。

五、如何使用Docker将数据科学应用程序容器化?

现在已经学习了Docker的基础知识,那么是应用所学知识的时候了。在本节中,我们将使用Docker将一个简单的数据科学应用程序进行容器化。

5.1 房价预测模型

下面是一个线性回归模型,它可以根据输入特征预测目标值:房价中位数。该模型使用加利福尼亚州(California)住房数据集建立:

【加利福尼亚州住房数据集】:https://scikit-learn.org/stable/modules/generated/sklearn.datasets.fetch_california_housing.html

# house_price_prediction.py
from sklearn.datasets import fetch_california_housing
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score

# 加载加利福尼亚州住房数据集
data = fetch_california_housing(as_frame=True)
X = data.data
y = data.target

# 将数据集拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 标准化特征
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)

# 对测试集进行预测
y_pred = model.predict(X_test)

# 评估模型
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print(f"Mean Squared Error: {mse:.2f}")
print(f"R-squared Score: {r2:.2f}")

我们知道scikit-learn是必需的依赖项。如果仔细查看代码,在加载数据集时,我们将as_frame设置为True。因此还需要pandasrequirements.txt文件如下所示:

pandas==2.0
scikit-learn==1.2.2

图片

5.2 创建Dockerfile

到目前为止,已经有了源代码文件house_price_prediction.pyrequirements.txt文件。现在应该定义如何从应用程序中构建镜像。Dockerfile用于创建从应用程序源代码文件构建镜像的定义。

那么什么是Dockerfile呢?它是一份文本文件,其中包含构建Docker镜像的逐步说明。

图片

如下是示例的Dockerfile:

# 使用Python官方镜像作为基础镜像
FROM python:3.9-slim

# 设置容器中的工作目录
WORKDIR /app

# 将`requirements.txt`文件复制到容器中
COPY requirements.txt .

# 安装依赖项
RUN pip install --no-cache-dir -r requirements.txt

# 将脚本文件复制到容器中
COPY house_price_prediction.py .

# 设置运行Python脚本的命令
CMD ["python", "house_price_prediction.py"]

接下来分析一下Dockerfile的内容:

  • 所有Dockerfile都以指定基础镜像的FROM指令开始。基础镜像就是你的镜像所基于的镜像。这里示例使用的是Python 3.9的可用镜像。FROM指令告诉Docker从指定的基础镜像构建当前镜像。

  • WORKDIR命令用于设置所有后续命令(本例中为app)的工作目录。

  • 然后将requirements.txt文件复制到容器的文件系统中。

  • RUN指令将在容器内的shell中执行指定的命令。示例在这里使用pip安装所有需要的依赖项。

  • 然后将源代码文件(Python脚本house_price_prediction.py)复制到容器的文件系统中。

  • 最后,CMD指的是容器启动时要执行的指令。在这里示例需要运行house_price_prediction.py脚本。Dockerfile应该只包含一条CMD指令。

5.3 构建镜像

既然已经定义了Dockerfile,就可以通过运行docker build来构建Docker镜像了:

docker build -t ml-app .

选项-t允许用户为镜像指定名称和标签,格式为name:tag。默认标签为latest

生成过程大约需要几分钟:

Sending build context to Docker daemon  4.608kB
Step 1/6 : FROM python:3.9-slim
3.9-slim: Pulling from library/python
5b5fe70539cd: Pull complete 
f4b0e4004dc0: Pull complete 
ec1650096fae: Pull complete 
2ee3c5a347ae: Pull complete 
d854e82593a7: Pull complete 
Digest: sha256:0074c6241f2ff175532c72fb0fb37264e8a1ac68f9790f9ee6da7e9fdfb67a0e
Status: Downloaded newer image for python:3.9-slim
 ---> 326a3a036ed2
Step 2/6 : WORKDIR /app
...
...
...
Step 6/6 : CMD ["python", "house_price_prediction.py"]
 ---> Running in 7fcef6a2ab2c
Removing intermediate container 7fcef6a2ab2c
 ---> 2607aa43c61a
Successfully built 2607aa43c61a
Successfully tagged ml-app:latest

生成Docker镜像后,运行docker images命令。用户应该会看到ml-app镜像也在其中。

docker images

图片

可以使用docker run命令运行Docker镜像ml-app

docker run ml-app

图片

你现在实现了第一个数据科学应用程序的docker化。通过创建一个DockerHub账户,可以将镜像推送到该账户(或组织内的私有存储库)。

六、结论

希望本Docker入门教程对你有所帮助。可以在GitHub代码库中找到本教程使用的代码。下一步,请在计算机上安装Docker并尝试这个示例。或者对你选择的应用程序进行Docker化。

在计算机上安装Docker的最简单方法是使用Docker Desktop:可以同时获得Docker CLI客户端和GUI界面来轻松管理容器。因此,设置好Docker,就可以开始编码了!

【GitHub代码库】:https://github.com/balapriyac/docker-data-science

【Docker Desktop】:https://www.docker.com/products/docker-desktop/

推荐书单

IT BOOK 多得(点击查看5折活动书单)icon-default.png?t=N7T8https://u.jd.com/psx2y1M

《Python从入门到精通(第3版)》

《Python从入门到精通(第3版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用Python进行程序开发应该掌握的各方面技术。全书共分27章,包括初识Python、Python语言基础、运算符与表达式、流程控制语句、列表和元组、字典和集合、字符串、Python中使用正则表达式、函数、面向对象程序设计、模块、文件及目录操作、操作数据库、使用进程和线程、网络编程、异常处理及程序调试、Pygame游戏编程、推箱子游戏、网络爬虫开发、火车票分析助手、数据可视化、京东电商销售数据分析与预测、Web编程、Flask框架、e起去旅行网站、Python自动化办公、AI图像识别工具等内容。书中所有知识都结合具体实例进行介绍,涉及的程序代码都给出了详细的注释,读者可轻松领会Python程序开发的精髓,快速提升开发技能。
《Python从入门到精通(第3版)》icon-default.png?t=N7T8https://item.jd.com/14055900.html

图片

精彩回顾

《一文读懂Pandas中独热编码》

《基于功夫熊猫实例探索Python风格像素游戏》

《8个有趣实用的Python脚本》

《数据科学秘密揭晓:带你选择完美机器学习算法》

《用强化学习破解迷宫实战》

《使用LLM插件从命令行访问Llama 2》

微信搜索关注《Python学研大本营》,加入读者群

访问【IT今日热榜】,发现每日技术热点

  • 28
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值