如何基于现有映像创建新的docker映像,但包含更多Python包?

2024-06-14 21:18:40 发布

您现在位置:Python中文网/ 问答频道 /正文

让我说我已经拉开了英伟达NGC PyTrac码头工人的形象: docker pull nvcr.io/nvidia/pytorch:21.07-py3

然后我想添加这些python包:omegaconf wandb pycocotools

如何使用原始Docker映像和其他Python包创建新的Docker映像

此外,我如何在整个组织中分发新的映像


Tags: dockeriopy3pytorchpullnvidia形象码头工人
1条回答
网友
1楼 · 发布于 2024-06-14 21:18:40

创建一个名为Dockerfile的文件。添加下面解释的行

添加FROM行以指定基本映像:

FROM nvcr.io/nvidia/pytorch:21.07-py3

将Pip升级至最新版本:

RUN python -m pip install  upgrade pip

安装所需的其他Python软件包:

RUN python -m pip install omegaconf wandb pycocotools

总的来说,Dockerfile如下所示:

FROM nvcr.io/nvidia/pytorch:21.07-py3
RUN python -m pip install  upgrade pip
RUN python -m pip install omegaconf wandb pycocotools

在与Dockerfile相同的目录中,运行此命令以生成新映像,将my-new-image替换为您选择的名称:

docker build -t my-new-image .

这对我来说是可行的,但Pip会生成一个关于以root用户身份安装包的警告。我发现最好忽略这个警告。请参阅此答案末尾的注释以了解原因

新的docker映像现在应显示在您的系统上:

$ docker images
REPOSITORY                         TAG                            IMAGE ID       CREATED              SIZE
my-new-image                       latest                         082f76972805   13 seconds ago   15.1GB
nvcr.io/nvidia/pytorch             21.07-py3                      7beec3ff8d35   5 weeks ago          15GB
[...]

现在可以运行新映像了

$ docker run  gpus all -it  rm  ipc=host my-new-image

。。并验证它是否具有其他Python包:

# python -m pip list | grep 'omegaconf\|wandb\|pycocotools'
omegaconf                     2.1.1
pycocotools                   2.0+nv0.5.1
wandb                         0.12.1

The Docker Hub Repositories documentation详细说明了以下必要步骤:

  1. 创建存储库(可能是私有的)
  2. 推送图像
  3. 添加合作者
  4. 从respository中提取图像

注意:非root用户的问题:尽管不以root Docker用户身份运行Docker容器被认为是“最佳实践”,但实际上非root用户可能会增加一些复杂性

您可以在docker文件中创建一个非root用户,其行如下:

RUN useradd -ms /bin/bash myuser
USER myuser
ENV PATH "$PATH:/home/myuser/.local/bin"

但是,如果使用-v标志运行已装入卷的容器,则myuser将根据其用户ID或组ID是否与主机系统中的用户或组匹配而被授予对这些卷的访问权限。您可以修改useradd命令行以指定所需的userid或groupid,但当然,生成的映像将无法移植到具有不同id的系统

此外,似乎存在一个限制,阻止非root用户访问指向fscrypt加密文件夹的装入卷。但是,对于root docker用户来说,这很好

出于这些原因,我发现让容器作为根运行最简单

相关问题 更多 >