数据科学家需要掌握的Docker要点

news2024/9/27 5:50:33

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

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

本文将介绍Docker的基础知识,以及如何使用Docker对数据科学应用程序进行容器化。

Docker定义

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

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

然而,当尝试在另一台机器上运行应用程序时,可能仍会遇到问题,这些问题通常源于两台机器之间开发环境中配置和库版本不匹配。使用Docker,可以打包应用程序及其依赖项和配置。因此,可以为应用程序在各种主机机器上定义一个隔离的、可复现的和一致的环境。

Docker基础知识

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

Docker镜像

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

Docker容器

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

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将一个简单的数据科学应用程序进行容器化。

1.房价预测模型

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

# 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

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

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界面来轻松管理容器。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/889684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux系统服务学习(八)DNS域名系统配置

文章目录 DNS域名管理系统一、DNS概述1、DNS系统概述☆ DNS的正向解析☆ DNS的反向解析☆ 根域&#xff08;.&#xff09;☆ 一级域名<顶级域|国家域>☆ 二级域名(自己购买管理)☆ 域名机构 2、DNS工作原理3、dig工具使用 二、DNS服务器的搭建1、DNS服务器端软件2、DNS服…

运行软件mfc140u.dll丢失怎么办?mfc140u.dll的三个修复方法

最近我在使用一款软件时遇到了一个问题&#xff0c;提示缺少mfc140u.dll文件。。这个文件是我在使用某个应用程序时所需要的&#xff0c;但是由于某种原因&#xff0c;它变得无法正常使用了。经过一番搜索和了解&#xff0c;我了解到mfc140u.dll是Microsoft Visual Studio 2015…

关于openfeign调用时content-type的问题

问题1描述&#xff1a; 今天在A服务使用openfeign调用B服务的时候&#xff0c;发现经常会偶发性报错。错误如下&#xff1a; 情况为偶发&#xff0c;很让人头疼。 两个接口如下&#xff1a; A服务接口&#xff1a; delayReasonApi.test(student);就是使用openfeign调用B服务的…

计组 | DMA

前言 记录一些计组相关联的题集与知识点&#xff0c;方便记忆与理解。 DMA 采用DMA方式传送数据时&#xff0c;每传送一个数据就要用一个&#xff08; C&#xff09;时间。 A 指令周期 B 机器周期 C 存储周期 D 总线周期发…

macOS(m1/m2)破解Sublime Text和Navicat16

破解Sublime Text 说明&#xff1a;全程使用的是终端操作 1. 下载Sublime Text&#xff0c;建议使用brew下载 2. 进入到下载的app的文件夹 cd "/Applications/Sublime Text.app/Contents/MacOS/"3. 执行以下操作以确认版本是否匹配 md5 -q sublime_text | grep -i…

分析区域产业发展现状,谋划产业发展路径,提升产业竞争力

随着经济全球化的深入发展&#xff0c;产业与区域经济发展有着不可分割的关系&#xff0c;产业是区域经济发展的基础&#xff0c;产业链的形成可以促进区域经济的协调发展&#xff0c;产业竞争力的提升能够带动区域经济的增长。那么该如何打造区域产业链闭环&#xff0c;提升产…

如何将labelImg打包成exe

最近整理一下数据标注这块的内容&#xff0c;在目标检测和目标分割里面用的最多的标注工具labelimg&#xff0c;labelme labelimg主要用于目标检测领域制作自己的数据集&#xff0c;如&#xff1a;YOLO系列目标检测模型 labelme主要用于图像分割领域制作自己的数据集&#xf…

静态代码测试工具HelixQAC新版对MISRA C规则提供100%覆盖率

Helix QAC 2023.2中的新增功能 Helix QAC 2023.2对 MISRA C:2012 和 MISRA C:2023 规则提供了100% 的覆盖率&#xff0c;并更新了相应的合规性模块以适用于MISRA C:2023。此外&#xff0c;此版本还包括改进的 C23 语言支持、对 Validate 平台的改进和 Helix QAC 和 Validate 的…

什么是客户自助服务?

自助服务是指通过自动化技术和系统&#xff0c;使顾客或用户能够自主完成某些服务或操作&#xff0c;而无需直接依赖人工的帮助。它提供了一种方便、快捷和高效的方式&#xff0c;让用户可以自行完成特定任务或获取所需的信息。 自助服务可以在各种场景中应用&#xff0c;例如…

unity拓展 unity自带的类(Tranform为例)

因为我们使用了ILRuntime热更&#xff0c;unity 打出的WebGL包&#xff0c;运行就会报找不到DoTween里面的方法&#xff0c;所以吧DoTween拓展到tranform类里面&#xff0c;这样就不会报错了&#xff0c;下面是示例 using DG.Tweening; using System.Collections; using Syste…

Python搭建http文件服务器实现手机电脑文件传输功能

第一种代码的界面如下&#xff1a;&#xff08;有缺点&#xff0c;中文乱码&#xff09; # !/usr/bin/env python3 # -*- coding:utf-8 _*-"""Simple HTTP Server With Upload. python -V3.6 This module builds on http.server by implementing the standard G…

java 工程管理系统源码+项目说明+功能描述+前后端分离 + 二次开发 em

Java版工程项目管理系统 Spring CloudSpring BootMybatisVueElementUI前后端分离 功能清单如下&#xff1a; 首页 工作台&#xff1a;待办工作、消息通知、预警信息&#xff0c;点击可进入相应的列表 项目进度图表&#xff1a;选择&#xff08;总体或单个&#xff09;项目显…

适合使用CRM系统的行业有哪些?

激烈的竞争环境下&#xff0c;企业急需一款工具来管理客户关系。CRM正是这样一款软件&#xff0c;可以帮助企业管理客户&#xff0c;提高客户满意度&#xff0c;从而实现业绩增长。那么&#xff0c;哪些行业适合使用CRM系统&#xff1f;为什么&#xff1f; 一、零售行业 CRM系…

redis-基础

1、redis简述 redis 是一门C语音开发的&#xff0c;redis开发者&#xff0c;一开始的本意是作用消息队列&#xff0c;后面随着IT圈的迅速发展&#xff0c;redis不满足诉求&#xff1b;最后开发成k/v形式的内存存储的工具 特性&#xff1a;速度快、单进程单线程、支持集群、持…

32.Netty源码之服务端如何处理客户端新建连接

highlight: arduino-light 服务端如何处理客户端新建连接 Netty 服务端完全启动后&#xff0c;就可以对外工作了。接下来 Netty 服务端是如何处理客户端新建连接的呢&#xff1f; 主要分为四步&#xff1a; md Boss NioEventLoop 线程轮询客户端新连接 OP_ACCEPT 事件&#xff…

CS:GO升级 Linux不再是“法外之地”

在前天的VAC大规模封禁中&#xff0c;有不少Linux平台的作弊玩家也迎来了“迟到”的VAC封禁。   一直以来&#xff0c;Linux就是VAC封禁的法外之地。虽然大部分玩家都使用Windows平台进行游戏。但实际上&#xff0c;使用Linux畅玩CS:GO的玩家也不在少数。 以前V社主要打击W…

【React学习】—组件三大核心属性: state(七)

【React学习】—组件三大核心属性: state&#xff08;七&#xff09; 2.2.2. 理解 state是组件对象最重要的属性, 值是对象(可以包含多个key-value的组合)组件被称为"状态机", 通过更新组件的state来更新对应的页面显示(重新渲染组件) 2.2.3. 强烈注意 组件中rend…

版本控制工具Git集成IDEA的学习笔记(第一篇Gitee)

目录 一、Gitee的使用 1、注册网站会员 2、用户中心 3、创建远程仓库 4、配置SSH免密登录 二、集成IDEA&#xff0c;Git项目搭建 1、本地仓库搭建 1&#xff09;创建一个新项目 2&#xff09;打开终端&#xff0c;在当前目录新建一个Git代码库 3&#xff09;忽略文件 …

《HeadFirst设计模式(第二版)》第八章代码——模板方法模式

代码文件目录&#xff1a; CaffeineBeverage package Chapter8_TemplateMethodPattern;/*** Author 竹心* Date 2023/8/17**/public abstract class CaffeineBeverage {final void prepareRecipe(){boilWater();brew();pourInCup();//这里使用钩子customerWantsCondiments()来…

JavaScript 快速入门手册

本篇文章学习&#xff1a; 菜鸟教程、尚硅谷。 JavaScript 快速入门手册 &#x1f4af; 前言&#xff1a; 本人目前算是一个Java程序员&#xff0c;但是目前环境… ε(ο&#xff40;*))) 一言难尽啊&#xff0c;blog也好久好久没有更新了&#xff0c;一部分工作原因吧(外包真…