Python Docker Virtualenv

Python Docker Virtualenv,python,docker,pip,virtualenv,Python,Docker,Pip,Virtualenv,对于容器化应用程序(如Docker),是否可以使用virtualenv使环境从构建过程一直运行到映像最终运行?似乎通过pip创建virtualenv并运行环境从来都不起作用 例如: RUN pip3 install virtualenv RUN virtualenv venv RUN source venv/bin/activate 似乎永远不会呈现真实的虚拟环境,而以下pip安装将安装在该环境下。我需要或相信我需要此设置的原因是,特定目录使用与相邻目录不同版本的依赖项:文件夹B使用numpy

对于容器化应用程序(如Docker),是否可以使用virtualenv使环境从构建过程一直运行到映像最终运行?似乎通过pip创建virtualenv并运行环境从来都不起作用

例如:

RUN pip3 install virtualenv
RUN virtualenv venv
RUN source venv/bin/activate
似乎永远不会呈现真实的虚拟环境,而以下pip安装将安装在该环境下。我需要或相信我需要此设置的原因是,特定目录使用与相邻目录不同版本的依赖项:文件夹B使用numpy版本X,而文件夹C使用numpy版本Y


对于Docker,是否有一个工具或功能让我忘记了,可以像虚拟环境一样使用pip安装,在不同的目录中使用相同依赖项的不同版本

Docker
RUN
是一个构建步骤。它会在上一个图层的基础上创建一个新图层,并从本质上创建一个新图像。所以你的问题的答案是“不”

考虑使用
ENTRYPOINT
和/或
CMD
,或者为了方便编写启动脚本


RUN
编写脚本也可能适合您的需要:
RUN my\u deploy\u for\u venv.sh
将在一个层中执行,因此如果您在脚本中启动
venv
,您将在执行期间拥有它。不过,您必须在容器启动时再次启动它。

这可能会有所帮助。您只需要弄清楚如何使用CMD或entrypoint启动它。但这就是我能走多远:

FROM ubuntu:xenial

RUN mkdir -p /usr/python-app
WORKDIR /usr/python-app

RUN apt-get update \
    && apt-get install -y python3-pip

RUN pip3 install virtualenv    

RUN virtualenv foo-env -p python3



COPY ./ /usr/python-app
RUN /bin/bash -c 'source /usr/python-app/foo-env/bin/activate'



CMD ["entry.sh"]

EXPOSE 8080
然后,您将能够使用以下内容运行它:

docker run -d -p 8000:8000 --name python-env-container python-env-container
您可以使用以下方法打开容器中的壳:

docker exec -it <container id you can get it from docker ps> bash
docker exec-it bash

让我知道这是否有帮助?

顺便说一句,您可以使用:
$docker build-t python env container构建它。