创建一个名为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 详细说明了以下必要步骤:
- 创建存储库(可能是私有的)
- 推送图片
- 添加协作者
- 从存储库中拉取图像
注意:非 root 用户的问题: 尽管不以 Docker 根用户身份运行 Docker 容器被认为是“最佳实践”,但实际上非 root 用户可能会增加一些复杂性.
你可以在你的 docker 文件中创建一个非 root 用户,如下所示:
RUN useradd -ms /bin/bash myuser
USER myuser
ENV PATH "$PATH:/home/myuser/.local/bin"
但是,如果您使用 -v 标志运行具有已安装卷的容器,则将根据其用户 ID 或组 ID 是否与主机系统中的用户或组匹配,授予 myuser 对这些卷的访问权限。您可以修改 useradd 命令行以指定所需的用户 ID 或组 ID,但生成的图像当然不能移植到具有不同 ID 的系统。
此外,似乎存在阻止非 root 用户访问指向 fscrypt 加密文件夹的已安装卷的限制。但是,这对我使用 root docker 用户来说很好。
由于这些原因,我发现让容器以 root 身份运行是最简单的。