您当前的位置:首页 > 电脑百科 > 程序开发 > 容器

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

时间:2023-08-14 14:01:50  来源:微信公众号  作者:Python学研大本营

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

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

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

什么是Docker?

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

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

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

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

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

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

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

Docker镜像

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

Docker容器

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

Docker注册表

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

Docker如何简化开发?

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

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

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

基本的Docker命令

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

命令 功能
docker ps 列出所有正在运行的容器
docker pull image-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将一个简单的数据科学应用程序进行容器化。

房价预测模型

下面是一个线性回归模型,它可以根据输入特征预测目标值:房价中位数。该模型使用加利福尼亚州(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

创建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指令。

构建镜像

既然已经定义了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/



Tags:Docker   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Docker 和传统虚拟机有什么区别?
我有一个程序员朋友,他每年情人节都要送女朋友一台服务器。他说:“谁不想在过节当天收到一台 4核8g 的服务器呢?”“万一对方不要,我还能留着自己用。” 给他一次过节的机会,他能...【详细内容】
2024-03-26  Search: Docker  点击:(12)  评论:(0)  加入收藏
掌握Docker网络驱动程序:优化容器通信
Docker为在容器内包装、交付和运行应用程序提供了一个强大的平台,从而彻底改变了容器化。网络是容器化的重要组成部分,Docker提供了各种网络驱动程序来支持容器之间的通信以...【详细内容】
2024-03-22  Search: Docker  点击:(10)  评论:(0)  加入收藏
如何基于Docker镜像逆向生成Dockerfile
引言你是否曾经遇到过一个想要使用的 Docker 镜像,但却无法修改以适应你的特定需求?或者你可能发现了一个喜欢的 Docker 镜像,但想要了解它是如何构建的?在这两种情况下,将 Docke...【详细内容】
2024-03-07  Search: Docker  点击:(22)  评论:(0)  加入收藏
Docker与Docker Compose入门:释放你应用部署的威力
今天给大家介绍一项强大而有趣的技能,那就是使用 Docker 和 Docker Compose 来释放你的应用部署的威力!无论你是一名开发人员还是系统管理员,掌握这个技能都将为你的工作带来巨...【详细内容】
2024-01-17  Search: Docker  点击:(65)  评论:(0)  加入收藏
Docker镜像与容器的交互及在容器内部执行代码的原理与实践
Docker作为一种流行的容器技术,已经成为现代应用程序开发和部署的重要工具。在Docker中,镜像是构建和运行容器的基础,而容器则是基于镜像创建的可执行实例。Docker镜像与容器的...【详细内容】
2024-01-10  Search: Docker  点击:(76)  评论:(0)  加入收藏
如何在 Ubuntu 上安装 Docker
使用 Docker 意味着开启一个新的计算领域,但如果你刚刚开始使用 Docker,安装可能看起来是一项艰巨的任务。在 Ubuntu 上安装 Docker 有两种推荐的方法: 从 Ubuntu 的仓库安装 D...【详细内容】
2024-01-04  Search: Docker  点击:(124)  评论:(0)  加入收藏
七个杀手级Docker命令
Docker是一个容器化平台,通过操作系统级别的虚拟化技术,实现软件的打包和容器化运行。借助Docker,开发人员能够将应用程序以容器的形式进行部署,但在此之前需要构建Docker镜像。...【详细内容】
2023-12-22  Search: Docker  点击:(140)  评论:(0)  加入收藏
Docker容器如何打包应用程序的代码和依赖项?
Docker容器通过将应用程序的代码和所有依赖项打包到一个独立的软件包中,实现了应用程序的快速部署和移植。下面是Docker容器实现这一目标的步骤:打包应用程序:使用Docker工具将...【详细内容】
2023-12-20  Search: Docker  点击:(130)  评论:(0)  加入收藏
DBA视角:把数据库放入Docker是一个馊主意
对于无状态的应用服务而言,容器是一个相当完美的开发运维解决方案。然而对于带持久状态的服务 —— 数据库来说,事情就没有那么简单了。生产环境的数据库是否应当放...【详细内容】
2023-12-18  Search: Docker  点击:(197)  评论:(0)  加入收藏
Docker容器编排技术解析
一、容器编排介绍容器编排是现代云原生应用管理的核心,它涉及在大规模的环境中自动化部署、管理、扩展和网络配置容器。随着微服务架构的兴起和应用的复杂性增加,容器编排成为...【详细内容】
2023-12-15  Search: Docker  点击:(245)  评论:(0)  加入收藏
▌简易百科推荐
Docker 和传统虚拟机有什么区别?
我有一个程序员朋友,他每年情人节都要送女朋友一台服务器。他说:“谁不想在过节当天收到一台 4核8g 的服务器呢?”“万一对方不要,我还能留着自己用。” 给他一次过节的机会,他能...【详细内容】
2024-03-26  小白debug  微信公众号  Tags:Docker   点击:(12)  评论:(0)  加入收藏
掌握Docker网络驱动程序:优化容器通信
Docker为在容器内包装、交付和运行应用程序提供了一个强大的平台,从而彻底改变了容器化。网络是容器化的重要组成部分,Docker提供了各种网络驱动程序来支持容器之间的通信以...【详细内容】
2024-03-22    51CTO  Tags:Docker   点击:(10)  评论:(0)  加入收藏
Containerd容器管理
Nginx 指定容器名称 使用 ctr container create 命令创建容器后,容器并没有处于运行状态,其只是一个静态的容器。容器基本操作容器基本操作主要是 ctr image 命令,查看命令帮...【详细内容】
2024-03-20  云原生运维圈  微信公众号  Tags:容器   点击:(13)  评论:(0)  加入收藏
如何基于Docker镜像逆向生成Dockerfile
引言你是否曾经遇到过一个想要使用的 Docker 镜像,但却无法修改以适应你的特定需求?或者你可能发现了一个喜欢的 Docker 镜像,但想要了解它是如何构建的?在这两种情况下,将 Docke...【详细内容】
2024-03-07  云原生运维圈  微信公众号  Tags:Docker   点击:(22)  评论:(0)  加入收藏
Kubernetes是什么?主要特点是什么?
Kubernetes是什么?Kubernetes,也称为K8s,是一个开源的容器编排系统,由Google首次开发和维护。它允许容器化的应用程序在集群中自动部署、扩展和管理。Kubernetes提供了一种容器...【详细内容】
2024-02-01    简易百科  Tags:Kubernetes   点击:(153)  评论:(0)  加入收藏
我们一起聊聊容器资源自愈
在企业实际在使用容器这类资源的时候,除了技术本身,要考虑的其他问题也会很多。企业管理的容器有千千万万,出于效率考虑,对于有特殊需求的容器如何进行批量创建和管理呢,这就需要...【详细内容】
2024-01-30  匠心独运维妙维效  微信公众号  Tags:容器   点击:(47)  评论:(0)  加入收藏
Docker与Docker Compose入门:释放你应用部署的威力
今天给大家介绍一项强大而有趣的技能,那就是使用 Docker 和 Docker Compose 来释放你的应用部署的威力!无论你是一名开发人员还是系统管理员,掌握这个技能都将为你的工作带来巨...【详细内容】
2024-01-17  waynblog  微信公众号  Tags:Docker   点击:(65)  评论:(0)  加入收藏
Docker镜像与容器的交互及在容器内部执行代码的原理与实践
Docker作为一种流行的容器技术,已经成为现代应用程序开发和部署的重要工具。在Docker中,镜像是构建和运行容器的基础,而容器则是基于镜像创建的可执行实例。Docker镜像与容器的...【详细内容】
2024-01-10  编程技术汇  今日头条  Tags:Docker   点击:(76)  评论:(0)  加入收藏
如何在 Ubuntu 上安装 Docker
使用 Docker 意味着开启一个新的计算领域,但如果你刚刚开始使用 Docker,安装可能看起来是一项艰巨的任务。在 Ubuntu 上安装 Docker 有两种推荐的方法: 从 Ubuntu 的仓库安装 D...【详细内容】
2024-01-04    Linux中国  Tags:Docker   点击:(124)  评论:(0)  加入收藏
从Kubernetes的探针到DevOps
今天在群里又看有人问如何设置 Kubernetes 的探针,感觉要补充的话太多了,结合我们在一些 DevOps 项目中痛苦的体验,今天一劳永逸的全部说完,此外,也为大家展现一下为什么 DevOps...【详细内容】
2023-12-27  云云众生s  微信公众号  Tags:Kubernetes   点击:(114)  评论:(0)  加入收藏
站内最新
站内热门
站内头条