Docker关于conda环境的导出和导入

Docker关于conda环境的导出和导入

1、常用命令:

python 复制代码
docker pull -- 从远程仓库将镜像下载至本地
docker run -- 运行一个容器
docker images -- 常看本地镜像
docker ps -- 查看容器,默认只查看已启动的,加入 "-a" 参数可以查看所有
docker rm -f ID # 删除之前的运行容器

重命名容器
docker rename old_name new_name
拷贝文件到容器中
docker cp MLP 95909784d85b:/workspace/
进入容器中
docker exec -u 0 -it testtorch /bin/bash

docker save保存的是镜像(image),docker export保存的是容器(container)
docker load不能对载入的镜像重命名,而docker import可以为镜像指定新名称。

2、环境导出:

python 复制代码
Step-1:
安装docker(可以忽略)

Step-2:
拉取anaconda镜像(docker images检查看看,已经有了的话就跳过这一步)
docker pull continuumio/anaconda3

Step-3:
基于拉取的镜像创建容器
docker run -i -t continuumio/anaconda3 /bin/bash

Step-4-1:
cd opt/conda/envs
ls(没有东西)

step-4-2(可选步骤):
退出容器: exit
查看容器名称:docker ps -a
可以改容器名称:docker rename great_chaum ljhpytorch
再次查看容器名称:docker ps -a


Step-5:
查看本地anaconda中env的路径(例如:/home/ljh/anaconda3/envs/pytorch/)

Step-6:
可以另起一个终端
把本地的环境文件复制到容器中
docker cp /home/ljh/anaconda3/envs/pytorch/ ljhpytorch:/opt/conda/envs


Step-7
启动容器:docker start ljhpytorch
进入容器:docker exec -u 0 -it ljhpytorch /bin/bash 
查看是否文件已经复制过来cd opt/conda/envs
ls

Step-8:
验证是否能够使用环境:source activate 环境名称
例如:source activate pytorch

Step-9:
运用 docker commit 指令将运行的容器保存为镜像。
docker commit container_name image_name(随便取) 
例如:docker commit ljhpytorch ljhpytorchimage
docker images可以看到新增了一个镜像

Step-10:
镜像导出:
docker save -o image.tar(这个也可以随便取名字) image_name

给文件夹或文件全部的权限:sudo chmod -R 777 ./tao/(选择修改权限的文件名称)

3、两个服务器之间的文件传输命令:

python 复制代码
scp -r /home/myfile username@192.000.000.000:/home/myfile
其中scp为命令,-r代表移动文件,/home/myfile代表源文件夹所在的绝对路径,username@192.000.000.000:/home/myfile代表目标服务器中目标用户名的目标文件夹。
示例: 【默认目标服务器端口22】
scp -r /data/liujiahui/2022/master/ ljh@192.XXX.XXX.XXX:/DataDisk/liujiahui/AllCode/

如果需要指定目标服务器端口:
scp -r -P 5022 /data/liujiahui/2022/master/ ljh@192.XXX.XXX.XXX:/DataDisk/liujiahui/AllCode/

跳出选项,记得输入yes,然后输入密码

4、环境导入:

python 复制代码
Step-1:
镜像导入
docker load < image.tar

Step-2:
(挂载的同时已经创建了容器,容器名称取决于下面的 --name)
挂载宿主机目录至容器/data 目录:(此处需要修改的是宿主机目录)
这样可以便于文件的传输共享
示例:
docker run -id --gpus all --name ljhcontain -v /home/ljh/Desktop/mydata/:/data/ ljhpytorchimage

Step-3:
进入容器
docker exec -u 0 -it ljhcontain /bin/bash

Step-4:
nvidia-smi
查看是否可以使用gpu
完成!

5、快速进入容器

python 复制代码
正常进入容器需要先su进入超级用户,然后执行以下两个命令
docker start ljhcontain(有时候不需要)
docker exec -u 0 -it ljhcontain /bin/bash

由于不是很好记忆,因此可以通过将上述命令直接写在bash脚本执行,步骤如下:

Step-1:
创建一个文件名为xxxx.sh的空文件,可以直接在home/用户名/下面创建

Step-2:
在文件中写入下面两行(记得修改容器名称),然后保存
docker start ljhcontain
docker exec -u 0 -it ljhcontain /bin/bash

Step-3:
bash xxx.sh
可以直接一步进入容器(如下图所示)

注:还有其他通过修改环境变量等方法,感觉有些麻烦,可以自行研究

6、其他问题解决记录:

1)docker无法使用gpu,显示没有驱动

python 复制代码
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
  sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update

sudo apt-get install -y nvidia-container-toolkit

2)bash: vim: command not found

python 复制代码
apt-get update
apt-get install -y vim

3)容器进入失败

python 复制代码
解决方法:
docker start testtorch
docker exec -u 0 -it testtorch /bin/bash  

4)su进入失败

python 复制代码
$ su - root
Password: 
su: Authentication failure
Sorry.

解决办法:
$ sudo passwd root
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

5)pip安装python包失败

python 复制代码
使用pip安装python包的时候,出现以下错误:
bash: /opt/conda/envs/pytorch/bin/pip: /home/ljh/anaconda3/envs/pytorch/bin/python: bad interpreter: No such file or directory

解决方法:
在容器中解决问题
step-1:【如下图所示】
which pip
获得pip路径

step-2:【如下图所示】
which python
获得python路径

step-3:【如下图所示】
vim pip路径
这里可能会vim报错,解决方法参考问题3

step-4:
vim常用操作指令:
按下i表示开始编辑
按下Esc表示保存并退出编辑
退出编辑之后按下:wq可以退出vim

这一步需要完成的是修改把文件第一行的路径修改为step-2获取的路径【如下图所示】

step-5:
测试是否成功
pip -V


6)docker中使用cv2失败

python 复制代码
import cv2
出现以下报错:
ImportError: libGL.so.1: cannot open shared object file: No such file or directory

解决方法:
apt-get update
apt-get install ffmpeg libsm6 libxext6  -y

7)训练时出现共享内存不够(Bus error)

python 复制代码
方法一:在Dataloader中将num_worker设置为0。意味着每一轮迭代时,dataloader不再有自主加载数据到RAM这一步骤(因为没有worker了),而是在RAM中找batch,找不到时再加载相应的batch。
方法二:在起Docker容器时,设置 --ipc=host 或 --shm-size 或者
相关推荐
FII工业富联科技服务6 小时前
Omniverse + Isaac Teleop + 合成数据:工业富联机器人大脑训练+执行落地闭环拆解
大数据·人工智能·深度学习·机器学习·机器人·制造·具身智能
2601_962293246 小时前
Python自动化统计团队工作量并生成可视化仪表盘的脚本方案【指导】
python·数据分析·自动化·可视化·仪表盘
毕竟是shy哥7 小时前
vs code连接远程服务器docker环境及配置免密登录
服务器·docker·vs code
β添砖java7 小时前
深度学习31注意力机制、注意力分数、使用注意力机制的seq2seq、自注意力
人工智能·深度学习
2601_962293797 小时前
OCRmyPDF批处理脚本:使用Python自动化复杂OCR任务
python·自动化·批处理脚本·ocrmypdf·ocr任务
Jialu.8 小时前
模型压缩实战:BERT 量化从 390MB 到 146MB 的实践
人工智能·深度学习·bert
java_logo8 小时前
Docker 部署 Rocky Linux:轻松搭建 RHEL 兼容企业级基础镜像平台
linux·docker·容器·rocky linux·基础镜像·轩辕镜像·rhel 兼容
Java后端的Ai之路9 小时前
20、Python - 备忘录模式
开发语言·人工智能·python·外观模式·备忘录模式
2601_962077719 小时前
基于Python与NLP的新闻事件信息抽取实战:从NER到时空标准化
python·nlp·transformers·spacy·新闻事件抽取
cloudfantasy9 小时前
docker直接二进制安装,非编译。KylinV10SP3 aarch64有效
运维·docker