dockerfile晋级操作

本文介绍如何在Dockerfile中使用虚拟环境解决容器内多环境并存的问题,通过创建不同版本的Python环境,实现模块版本管理和独立的运行环境,避免了模块冲突和重复安装的困扰。

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
  • 环境配置文件
  1. 生成环境配置文件命令 
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

参考文献:

  1. How to install packages with miniconda in Dockerfile?

  2. Activating a Conda environment in your Dockerfile

  3. Dockerfile reference

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值