Conda环境封装成docker镜像
背景:在我们开发完一个项目之后,为了使项目环境能够快速的转移,需要对环境进行打包封装。一般来说,我们有两条路可以选择。 第一种,采用conda本身的命令,输出 yaml文件以及txt文件。
#导出 conda env export > environment.yaml pip freeze > requirements.txt #导入 conda env create -n xx -f environment.yaml pip install -r requirements.txt
但是,我执行这类方法之后,发现两类环境不对应,这主要是因为在导出和导入的时候,由于某些包长的异常,比如-spconv 又或者需要去github上下载,但是这类要么安装不上,要么对应的网址已经更新了,会导致封装失败。 结论:采用conda封装的方式进行迁移环境。
第二种,conda -> docker 首先,需要服务器上有安装docker,如果不是sudo用户的话,则普通用户应该被加入docker用户组。【docker ps 正常运行就可】
一、docker run 建立一个干净的docker环境(但是得带conda) 如果没有anaconda3,则pull一个下来
sudo docker pull continuumio/anaconda3
然后执行docker run命令
docker run -itd continuumio/anaconda3:pcdet3
接着我们就会进入到docker @后面跟的就是id 记住这个id 执行exit可以退出 如果忘了可以docker ps查看id 如果退出了可以执行这个再进入 【也可以去搜索docker attach 、 docker start 】
docker exec -it 镜像id bash
然后最后我们执行这个 其中 /home/youruser/anaconda3/envs/pv111 是自己用户的环境 【conda env list 可查】 384d44615250 是容器的id 【sudo docker ps 可查】 /opt/conda/envs/ 是docker里面anaconda的路径【whereis anaconda 可查】
sudo docker cp /home/ljh/anaconda3/envs/pv111 384d44615250:/opt/conda/envs/
tips: 如果想要采用docker 把普通用户加入群组 可以采用如下方式
#添加docker 用户组 这一步在目前的服务器上都不用执行 因为已经有了 sudo groupadd docker #加入用户 $USER 是你要加的用户 sudo gpasswd -a $USER docker
【但是! 这样在我们的服务器上仍然行不通,为什么呢,因为docker权限(docker.sock就是这个文件)对群组用户是770 意思就是你不可执行,但是像下面这样,就可以让群组的普通用户也能用docker】
sudo chmod a+rw /var/run/docker.sock