如何基于现有Docker镜像创建含额外Python包的新镜像并在组织内分发
基于NVIDIA NGC PyTorch镜像构建自定义镜像的方法
推荐使用Dockerfile方式构建,可复现性强,便于后续迭代调整依赖:
- 新建空白目录,在目录内创建名为
Dockerfile的文件,写入以下内容:
FROM nvcr.io/nvidia/pytorch:21.07-py3 # 安装额外Python依赖,--no-cache-dir参数可减小镜像体积 RUN pip install --no-cache-dir omegaconf wandb pycocotools
提示:如果国内pip安装速度慢,可在上述pip命令末尾添加
-i https://pypi.tuna.tsinghua.edu.cn/simple指定国内源加速。
- 在Dockerfile所在目录执行构建命令,自定义镜像标签方便识别:
docker build -t my-org-pytorch:21.07-py3-ext .
如果仅需要临时测试,也可以使用容器commit方式构建(不推荐生产场景使用,可复现性差):
- 启动原镜像的临时容器:
docker run -it --gpus all nvcr.io/nvidia/pytorch:21.07-py3 bash - 容器内执行
pip install omegaconf wandb pycocotools,安装完成后输入exit退出容器 - 执行
docker ps -a找到刚刚退出的容器ID,执行命令完成镜像构建:docker commit <替换为实际容器ID> my-org-pytorch:21.07-py3-ext
组织内部分发自定义镜像的常用方式
- 私有镜像仓库分发(最推荐):组织内部搭建私有镜像托管服务(如Docker Registry、Harbor、GitLab Container Registry等),先给本地镜像打对应仓库的标签:
docker tag my-org-pytorch:21.07-py3-ext <私有仓库地址>/<项目路径>/my-org-pytorch:21.07-py3-ext,执行docker push <完整镜像标签>上传到仓库,其他成员直接执行docker pull <完整镜像标签>即可获取。 - 镜像导出导入分发:适合网络隔离、无法访问私有仓库的场景,执行
docker save -o my-org-pytorch-21.07-ext.tar my-org-pytorch:21.07-py3-ext将镜像导出为tar包,通过内网文件共享、移动存储等方式传输,其他成员拿到后执行docker load -i my-org-pytorch-21.07-ext.tar即可导入本地镜像。 - Dockerfile共享分发:如果组织内所有成员都可访问NVIDIA NGC镜像源,直接共享Dockerfile即可,其他成员执行相同的build命令就能生成完全一致的镜像,传输成本最低,也方便后续调整依赖。
内容的提问来源于stack exchange,提问作者user550701
相关产品推荐
相关产品推荐

