您现在的位置是:百科知识

车上的dff是什么意思?(Dff是什么意思)

2024-04-13 18:12百科知识 人已围观

汽车上的dff是什么意思?(DFF是什么意思?

Thushan Ganegedara

翻译|月亮编辑|唐

头|东方IC下载CSDN

作为数据科学家,我每天都必须处理码头。创建图片,更新内容,将Python脚本写入我的日常工作。在这个过程中,我经常哀叹:“如果你知道这些方法,你知道这些方法。”

因此,我将讨论一些将用于数据科学项目中的Docker最佳实践。虽然没有详细,但我涵盖了大多数数据科学家。

本文假设您已经意识到Docker的基础知识。例如,您知道使用Docker,可以轻松地编写Dockerfile,了解Docker命令(如运行,cmd等)。如果您缺乏这些基本知识,请在Docker官方网站上阅读文档。

为什么选择码头?

Docker一直很受欢迎。在Docker之前的日子里,虚拟机填充此字段的空白。但是,Docker提供了远远超过虚拟机的函数。

Docker的优势

隔离:无论基本操作系统/基础设施,安装软件和更新如何更改,Docker都提供了孤立的环境。

轻量级:共享OS内核,不需要为每个容器分配OS内核。

性能:轻量级,可以在同一操作系统上同时运行多个容器。

Docker介绍

Docker包含三个重要的概念。

镜像:这是一系列二进制文件,代表开发/生成/测试所需的环境。您可以通过以下方式下载/创建图像。

从镜像仓库中摘录,例如:Docker拉高山。此命令将在本地查看计算机上的ALPINE。如果找不到它,请转到dockerhub。

使用dockerfile在本地构建图像,例如:dockerbuild。 -t图像名称:图像版本。此命令不是下载/拉动图像,但构建您自己的图像。此语句不完整,因为dockerfile包含从基本映像开始的行,这将找到以其开头的基本映像。如果您找不到它,您将从DockerHub中提取。

容器:容器是镜像运行示例。您可以使用以下命令创建一个容器:`docker容器运行参数映像命令。例如,创建基于Alpine的容器是:Docker Container Run-Itaalpine / Bin / Bash。

卷:我们使用卷来存储容器使用的数据(例如日志,下载数据等)。此外,卷可以在多个容器之间共享。您可以通过以下方式使用卷。

创建卷:创建卷命令是:Docker卷创建卷_Name。请注意,如果删除卷,则存储的信息将会丢失。

绑定卷:绑定主机上现有卷并安装容器的命令是-V源:目标。例如,如果需要将卷/ my_data挂载到容器中并将其用作卷/数据,则可以执行以下命令:Docker Container Run-IT-V / My _ Data 3360 / Data Alpine / Bin / Bash。加载时,您正在进行的更改将反映在主机上。

首先,创建镜子

镜子不应该太大,应该避免。

构建镜子时,您必须先做两件事:

安装Linux包

安装Python库

安装了这些包和库时,包管理器将缓存数据,以便在安装时可以使用本地数据。但这会增加镜子的大小,而不是必需的。 Docker图像应尽可能轻。

安装Linux包时,请记住在APT-Get install命令中添加一行到所有缓存数据。

运行apt-get update apt-get install TiNi \ RM-RF/var/lib/apt/lists/*安装Python包时,为避免缓存,请执行以下操作:

运行pip 3安装库-1库-2 snorketed目录`2。单独指定Python库.txt.txt

最好在要求中单独指定Python库.txt,然后通过以下命令安装此库。

运行PIP 3安装-R要求。 txt-no-cache-dir,此方法可以区分Dockerfile和Python库。此外,如果您有多个Docker文件(例如,用于生产/开发/测试),并且希望它们具有相同的安装。

图书馆可以轻松重复使用。要求.txt文件只包含一个孔名。

numpy == 1.18.0scikit-searn == 0.20.2pandas == 0.25.0

3.修改库版本

请注意,您需要冻结版本以在要求中安装.txt,这非常重要。因为否则,每次构建一个码头镜,你有一个不同的版本,所以你会面对“依赖的地狱”。

其次,容器的操作

1.使用非root用户

运行容器时,如果未指定运行的用户身份,则默认将使用root用户。我曾经真的,特别是喜欢使用sudo或root。但是,我一直是一个痛苦的课程,不必要的特权会引发不必要的麻烦。

如果要将容器运行为非root用户,只需运行以下命令:

docker run -it -u   

如果要输入现有容器,则可以运行以下命令:

docker exec-it -u   

例如,您可以指定 到$(id -u), 到$(id -g),请在容器中启用用户ID和组ID以匹配主机。

请注意,不同的操作系统分配用户ID和组ID也不同。例如,MacOS上的用户ID /组ID可以是在Ubuntu容器中保留/保留的用户ID /组ID。

2.创建非特权用户

我们可以将主机登录到非root用户身上。但是,如果您以这种方式登录,则在容器中没有用户名。因为很明显,容器不知道用户ID所在的位置。此外,每次要启动或执行容器时,您都需要记住并输入这些用户ID和组ID。为避免这些麻烦,您可以在Dockerfile中创建一个用户/组。

arg uid = 1000arg gid = 1000

首先将arg uid = 1000添加到dockerfile上的arg gid = 1000。 UID和GID是容器中的环境变量,您可以在Docker构建阶段(默认为1000)将值传递给容器。

然后通过运行GroupAdd -g $ GID John-Group添加Linux组与镜像组中的组ID GID。

接下来,通过useradd-n -l -u $ uid -g John-group -g sudo John中使用镜像中的用户ID UID添加Linux用户。在这里,我们将约翰加入Sudo集团。但这是可选的。如果您可以确定是否不需要sudo权限,则可以忽略此步骤。

然后,在镜像结构期间,您可以为这些参数提供值,例如:

Docker Build.  -T.  --build-arg uid =  --build-arg gid = 

例如:

Docker Build。 -t docker-tut:最新--build-arg uid = $(id -u)--build-arg gid = $(id -g)

它有一个非特权用户在没有root权限时运行非常有用。例如,如果您的Python脚本只是读取和写入该目录的数据,那么完全不必运行root。此外,如果容器中的用户ID和组ID匹配主机,则您创建的所有文件都将具有主机用户的所有权。因此,如果您安装这些文件(或创建新文件),就像在主机上创建的那样。

第三,创建一个卷

1.使用卷分开

作为数据科学家,您需要处理各种数据,模型和代码。您可以将代码放在卷(例如/ app)中,将数据放在另一个卷(例如/数据)中。这允许您的Docker图像具有良好的结构,可以摆脱所有主机级别的所有依赖项。

这种依赖性我的意思是什么?假设你把代码放在/家里/ / code / src。如果复制/挂载/挂载/安装到卷/应用程序,/ home / /代码/数据安装到卷/数据,然后即使主机上的代码和数据没有关系,位置之间也没有关系。一旦安装到Docker镜子,他们的位置不会改变。因此,您可以根据以下步骤在Python脚本中定义这些路径。

data_dir =“/ data”model_dir =“/ model”src_dir =“/ app”

您可以通过以下方法将必要的代码和数据复制到图像:

复制测试数据/ Datacopy测试代码/应用程序

请注意,测试数据和测试代码是主机上的目录。

2.在开发过程中安装目录

安装的优点是容器中的变化将反映在主机上。在开发和调试项目时,这种做法非常方便。让我们来看看一个例子。

假设您通过以下命令创建了Docker映像:

Docker Build.  

然后,您现在可以使用以下命令建立图像的容器:

docker运行  -v / home /  / my_code:/代码

然后,您可以在容器中运行代码,并且可以调试,并且代码的更改将反映在主机上。这主要是由于在容器中使用相同的主机用户ID和组ID。您所做的所有更改都是来自主机的用户。

3.切勿安装主机的键目录

我做了一个有趣的事情,我将机器的主目录安装到Docker容器中,还要修改主目录的权限。不用说,我无法再登录,并花几个小时来解决它。因此,您应该只安装所需内容。

例如,假设您有三个您要在开发期间安装的目录:

docker run -it -u   0

您可能希望直接使用一行代码来安装/ home / 目录,但编写三行代码来安装这些单独的子目录,这绝对是因为您可以节省您的努力工作时间(甚至几天)。

第四,其他提示

1.了解添加和副本之间的区别

您可能知道Docker有两个命令称为添加和副本,两者之间有什么区别?

添加:您可以使用添加 从URL下载文件。

添加:当压缩文件(例如,tar.gz)从指定位置中提取文件时,请使用添加。

复制:将文件/文件夹复制到容器的指定位置。

2.入口和CMD之间的区别

我必须进行更改,您可以将EntryPoint视为汽车,CMD是汽车上的控制器(如加速器,制动器,方向盘)。 EntryPoint本身不执行任何操作,它只能容纳在容器中执行的框。它不处理您向容器推送的任何命令。

命令cmd是实际在容器中执行的命令。例如,Bash在容器中创建一个shell,然后您可以使用ubuntu普通终端中的容器。

3.将文件复制到现有容器

我们经常造成这样的错误:创建容器后,我忘记将文件添加到图像中。建造镜子需要很长时间。有没有办法避免这个问题,自动将文件添加到现有容器?

您可以使用Docker CP命令执行此操作。很简单:

docker run -it -u   1

当您下次输入容器时,您可以看到挂在的复制文件 。但是,请不要忘记修改DockerFile,以便在构建时复制必要的文件。

英语:数据科学家的Docker最佳实践

链接:https://towardsdatascience/docker-best-practics-for-data-scientss-2ed7f6876dff

数学科学家。

本文被翻译成CSDN,请注明源源。

车上的dff是什么意思?(Dff是什么意思)

站点信息

  • 文章统计63334篇文章