- 安装conda pack
1. conda install conda-pack 2. pip install conda-pack
- 环境打包
conda pack -n py38 -o retinafacenet.tar.gz
-n 选择conda虚拟环境名
-o 在当前位置输出,可设置文件名
-p 在指定位置输出,文件名为虚拟环境名.tar.gz
- 迁移环境
- 解压打好的包
# 1. 在miniconda3/envs/下创建虚拟环境名的文件夹。 mkdir py38 # 2. 解压包 tar -xzf retinafacenet.tar.gz -C miniconda3/envs/py38/
- 运行Django程序
miniconda3/envs/py38/bin/python manage.py runserver 0.0.0.0:5001
也可conda activate py38启动虚拟环境。
打包好的虚拟环境可用于docker中,省去了docker中重新安装依赖库可能出现安装失败,包名错误等问题。
根据conda环境打包成docker- 安装docker。。。(网上找吧)
- 编写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环境调用
- 创建镜像
docker build -t facedetection:v1 .
经过漫长的等待,创建好后可通过docker images查看镜像,镜像名是facedetection,tag为v1。
- 镜像发布容器
docker run -dit -p 5001:5001 --name facedetection facedetection:v1
根据名为facedectection,tag为v1的镜像创建名为facedetection的容器。
通过命令docker ps查看容器。
由于我们的Dockerfile中已经写了CMD了,所以发布容器的时候就不需要后面接命令了。
-p 这个端口映射一定要写,docker还没聪明到可以直接找到web工程运行的端口号
docker迁移容器经过测试可用后,我们就考虑把镜像导出,迁移到服务器中进行项目部署。
- 导出docker镜像
docker save -o faceDetection.tar facedetiction:v1
把上面创建好的名为facedectection,tag为v1的镜像导出成faceDetection.tar。
- docker导入本地tar构建镜像
docker load -i faceDetection.tar
导入成功后,可以通过docker images看到有了名为facedectection,tag为v1的镜像。
- 根据上面镜像发布容器的方式就可以run起来啦~
使用docker load时可能会报个错:
Error processing tar file(exit status 1): write /13a84948aa5fe97611a8528db9b26725b3d6c5023cd40940b52a887e3ab33f1a/layer.tar: no space left on device
说没有空间把这个tar包倒进来。
这是因为安装docker的时候没有指定安装路径。
解决方法:
- 查看Docker Root Dir
docker info |grep "Docker Root Dir"
可以看到Docker Root Dir指向的是/var/lib/docker。
查看一下/var的磁盘容量吧
df -h
确实/var有点小了。
- 修改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了。
- 重启docker服务
systemctl restart docker
再去执行docker load就可以了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)