dockerfile晉級操作

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章