您现在的位置是:百科知识
车上的dff是什么意思?(Dff是什么意思)
2024-04-13 18:12百科知识 人已围观
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和组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图像具有良好的结构,可以摆脱所有主机级别的所有依赖项。
这种依赖性我的意思是什么?假设你把代码放在/家里/
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有两个命令称为添加和副本,两者之间有什么区别?
添加:您可以使用添加
添加:当压缩文件(例如,tar.gz)从指定位置中提取文件时,请使用添加。
复制:将文件/文件夹复制到容器的指定位置。
2.入口和CMD之间的区别
我必须进行更改,您可以将EntryPoint视为汽车,CMD是汽车上的控制器(如加速器,制动器,方向盘)。 EntryPoint本身不执行任何操作,它只能容纳在容器中执行的框。它不处理您向容器推送的任何命令。
命令cmd是实际在容器中执行的命令。例如,Bash在容器中创建一个shell,然后您可以使用ubuntu普通终端中的容器。
3.将文件复制到现有容器
我们经常造成这样的错误:创建容器后,我忘记将文件添加到图像中。建造镜子需要很长时间。有没有办法避免这个问题,自动将文件添加到现有容器?
您可以使用Docker CP命令执行此操作。很简单:
docker run -it -u :
1
当您下次输入容器时,您可以看到挂在的复制文件
英语:数据科学家的Docker最佳实践
链接:https://towardsdatascience/docker-best-practics-for-data-scientss-2ed7f6876dff
数学科学家。
本文被翻译成CSDN,请注明源源。
车上的dff是什么意思?(Dff是什么意思)