dockerfile常规操作中介绍了安装源更换、软件更新、模块安装等命令,参考文件移步这里。常规操作适用于容器内单个环境的情况,对于多个模型不同的运行环境时,一个个安装会很麻烦,遇到模块版本不同的情况就更尴尬了。今天介绍使用虚拟环境解决容器内多环境同时存在的情况。
- dockerfile文件
FROM nvidia/cuda:10.0-cudnn7-devel-ubuntu16.04
RUN sed -i "s#archive.ubuntu.com#mirrors.aliyun.com#g" /etc/apt/sources.list \
&& sed -i "s#security.ubuntu.com#mirrors.aliyun.com#g" /etc/apt/sources.list #修改下载源
RUN apt-get upgrade -y \
&& apt-get update
ENV PATH="/root/anaconda3/bin:${PATH}" #conda运行环境加入系统环境
ARG PATH="/root/anaconda3/bin:${PATH}"
RUN apt-get install unzip
COPY Anaconda3-2020.02-Linux-x86_64.sh ./
COPY yolov5.zip ./
COPY run.sh ./
COPY requests_py2.7.txt ./ #默认环境的依赖模块
COPY env_py36.yml ./ #虚拟环境1
COPY env_yolov5-py37.yml ./ #虚拟环境2
RUN unzip yolov5.zip \
&& bash Anaconda3-2020.02-Linux-x86_64.sh -b
RUN conda env create -f env_py36.yml \ #创建虚拟环境
&& conda env create -f env_yolov5-py37.yml
RUN pip2 install -U -r requests_py2.7.txt \ #安装默认环境的依赖模块
&& rm yolov5.zip \
&& rm Anaconda3-2020.02-Linux-x86_64.sh \
&& rm requests_py2.7.txt \
&& rm *.yml
RUN apt-get clean all #删除安装包
&& rm -rf /var/lib/apt/lists/* #安装包状态信息的存储区
EXPOSE 7001 #开放镜像端口
ENTRYPOINT ["/bin/bash", "run.sh"] #启动镜像后执行的文件,强烈建议使用bash作为运行环境
- 启动脚本
cd carinner #使用默认环境
nohup python2 service_carinner.py --port 7001 > /dev/null 2>&1 &
source activate py3.6 #启动环境py3.6
cd ../openposeKps
nohup python service_kps.py --port 7002 > /dev/null 2>&1 &
cd ../scene
nohup python service_scene.py --port 7004 > /dev/null 2>&1 &
cd ../imgcrop
nohup python service_ipl.py --port 8001 > /dev/null 2>&1 &
conda deactivate #退出环境py3.6
source activate yolov5_py3.7 #启动环境yolov5_py3.7
cd ../yolov5
python3 service_yolo.py --port 7003
conda deactivate #退出环境yolov5_py3.7
- 环境配置文件
- 生成环境配置文件命令
root@ffeffbc15c98:/workspace# conda activate py3.6
(py3.6) root@ffeffbc15c98:/workspace# conda env export >py3.6.yml
2. 配置环境内容
name: py3.6
channels:
- defaults
dependencies:
- _libgcc_mutex=0.1=main
- ca-certificates=2020.1.1=0
- certifi=2020.4.5.2=py36_0
…………
- wheel=0.34.2=py36_0
- xz=5.2.5=h7b6447c_0
- zlib=1.2.11=h7b6447c_3
- pip:
- cffi==1.14.0
- numpy==1.18.5
…………
- torchvision==0.2.1
- tornado==6.0.4
prefix: /root/anaconda3/envs/py3.6
参考文献:
本文介绍如何在Dockerfile中使用虚拟环境解决容器内多环境并存的问题,通过创建不同版本的Python环境,实现模块版本管理和独立的运行环境,避免了模块冲突和重复安装的困扰。
667

被折叠的 条评论
为什么被折叠?



