linux根据本地conda虚拟环境进行docker部署

linux根据本地conda虚拟环境进行docker部署,第1张

linux根据本地conda虚拟环境进行docker部署 linux根据本地conda虚拟环境进行docker部署 conda环境迁移
  1. 安装conda pack
1. conda install conda-pack
2. pip install conda-pack
  1. 环境打包
conda pack -n py38 -o retinafacenet.tar.gz

-n 选择conda虚拟环境名

-o 在当前位置输出,可设置文件名

-p 在指定位置输出,文件名为虚拟环境名.tar.gz

  1. 迁移环境
  2. 解压打好的包
# 1. 在miniconda3/envs/下创建虚拟环境名的文件夹。
mkdir py38
# 2. 解压包
tar -xzf retinafacenet.tar.gz -C miniconda3/envs/py38/
  1. 运行Django程序
miniconda3/envs/py38/bin/python manage.py runserver 0.0.0.0:5001

也可conda activate py38启动虚拟环境。

打包好的虚拟环境可用于docker中,省去了docker中重新安装依赖库可能出现安装失败,包名错误等问题。

根据conda环境打包成docker
  1. 安装docker。。。(网上找吧)
  2. 编写Dockerfile
FROM centos:7.9.2009
MAINTAINER changxl.
# opencv-python需要这个环境
RUN yum install libglvnd-glx -y
RUN mkdir /py38/
# 上传虚拟环境,ADD直接帮忙解压了
ADD retinafacenet.tar.gz /py38/
# 复制python工程
COPY retinafacenet/ /retinafacenet/
# 设置工作目录
WORKDIR /retinafacenet/
# 执行命令,省的docker run的时候写在最后面
CMD ["/py38/bin/python","manage.py","runserver","0.0.0.0:5001"]

上面conda环境打的包叫retinafacenet.tar.gz,解压到了/py38/目录下。retinafacenet/是我的工程目录。

为了保险,ADD和COPY *** 作到文件夹后面的斜杠一定要加,不然的话他们可能认为创建文件。这个跟docker的版本有关系。

注意:这么安装opencv的时候应该用pip install opencv-python!!!!conda isntal opencv似乎没法脱离conda环境调用

  1. 创建镜像
docker build -t facedetection:v1 .

经过漫长的等待,创建好后可通过docker images查看镜像,镜像名是facedetection,tag为v1。

  1. 镜像发布容器
docker run -dit -p 5001:5001 --name facedetection facedetection:v1 

根据名为facedectection,tag为v1的镜像创建名为facedetection的容器

通过命令docker ps查看容器。

由于我们的Dockerfile中已经写了CMD了,所以发布容器的时候就不需要后面接命令了。

-p 这个端口映射一定要写,docker还没聪明到可以直接找到web工程运行的端口号

docker迁移

容器经过测试可用后,我们就考虑把镜像导出,迁移到服务器中进行项目部署。

  1. 导出docker镜像
docker save -o faceDetection.tar facedetiction:v1

把上面创建好的名为facedectection,tag为v1的镜像导出成faceDetection.tar。

  1. docker导入本地tar构建镜像
docker load -i faceDetection.tar

导入成功后,可以通过docker images看到有了名为facedectection,tag为v1的镜像。

  1. 根据上面镜像发布容器的方式就可以run起来啦~
docker load有个坑

使用docker load时可能会报个错:

Error processing tar file(exit status 1): write /13a84948aa5fe97611a8528db9b26725b3d6c5023cd40940b52a887e3ab33f1a/layer.tar: no space left on device

说没有空间把这个tar包倒进来。

这是因为安装docker的时候没有指定安装路径。

解决方法:

  1. 查看Docker Root Dir
docker info |grep "Docker Root Dir"

可以看到Docker Root Dir指向的是/var/lib/docker。

查看一下/var的磁盘容量吧

df -h

确实/var有点小了。

  1. 修改Docker Root Dir

我想将Docker Root Dir修改到/data/docker,所以先创建/data/docker文件夹。

编辑/etc/docker/daemon.json,添加"data-root":"/data/docker"

vim /etc/docker/daemon.json 

按esc然后:wq保存。

在查看一下Docker Root Dir,发现已经改到/data/docker了。

  1. 重启docker服务
systemctl restart docker

再去执行docker load就可以了。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5625030.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存