需求:
- 一个docker 镜像中有多个程序要跑
- 但是多个程序依赖的环境有冲突,所以安装一个miniconda
进程:
- 先安装conda
RUN wget https://repo.anaconda.com/miniconda/Miniconda3-py38_23.1.0-1-Linux-x86_64.sh
RUN bash Miniconda3-py38_23.1.0-1-Linux-x86_64.sh -p /opt/miniconda -b
RUN rm Miniconda3-py38_23.1.0-1-Linux-x86_64.sh
RUN cp /usr/local/bin/gunicorn /opt/miniconda/bin/
- 安装好之后准备好安装子环境需要的yml文件
ENV PATH=/opt/miniconda/bin:${PATH}
RUN conda update -y conda
RUN conda init
RUN conda env create -f environment.yml
RUN rm -rf environment.yml
- 上部代码中最关键的一个步骤就是 ENV PATH=/opt/miniconda/bin:${PATH}
- 不然下面的init 等都跑不起来
- 注意这个 p a t h 要和上面安装 m i n i c o n d a 的目录保持一致 \color{#FF0000}{注意这个path 要和上面安装miniconda 的目录保持一致} 注意这个path要和上面安装miniconda的目录保持一致
拓展:
- 如果需要后续在dockerfile 中使用已经存在 conda 的镜像,并且在指定的环境下安装内容需要重新使用init
FROM hasconda-docker:laster
#指定环境 && 初始化 conda &&
RUN export PATH=/opt/miniconda/bin:${PATH} && conda init bash && source activate && conda activate smallEnv && pip install opencv-python==4.7.0.72
- s o u r c e a c t i v a t e \color{#FF0000}{source\ activate} source activate 这个行为可以在shell脚本开头处激活虚拟环境,如果直接使用 conda activate smallEnv 会报错, C o m m a n d N o t F o u n d E r r o r : Y o u r s h e l l h a s n o t b e e n p r o p e r l y c o n f i g u r e d t o u s e ′ c o n d a a c t i v a t e ′ \color{#FF0000}CommandNotFoundError:\ Your\ shell\ has\ not\ been\ properly\ configured\ to\ use\ 'conda\ activate' CommandNotFoundError: Your shell has not been properly configured to use ′conda activate′
- 注意path 的设置尤其重要,不然source activate 会失败,因为 activate 是处于miniconda/bin 下的一个文件