首页 > 解决方案 > 如何在 docker 容器的虚拟环境中安装我的 python 应用程序?

问题描述

我有一个使用 pip install 在本地安装的 python 3.6 应用程序。和一个 setup.py 文件。我已经在本地测试过了,下一步就是将它移动到一个 docker 容器中。我正在使用来自 docker hub 的标准 python3.6 基础映像,并在 Windows 10 主机上运行容器。我有以下dockerfile:

FROM python:3.6

WORKDIR /opt

# create a virtual environment and add it to PATH so that it is 
# applied for all future RUN and CMD calls
ENV VIRTUAL_ENV=/opt/venv
RUN python3 -m venv $VIRTUAL_ENV
ENV PATH="$VIRTUAL_ENV/bin:$PATH"

# Install Mono for pythonnet.
RUN apt-get update \
&& apt-get install --yes \
    apt-transport-https \
    git \
    dirmngr \
    clang \
    gnupg \
    ca-certificates \
    # Dependency for pyodbc.
    unixodbc-dev \
&& apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv- 
keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF \

&& echo "deb http://download.mono-project.com/repo/debian 
stretch/snapshots/5.20 main" | tee /etc/apt/sources.list.d/mono- 
official-stable.list \

&& apt-get update \
&& apt-get install --yes \

&& rm -rf /var/lib/apt/lists/*

COPY requirements.txt .
COPY src ./src
COPY setup.py ./setup.py
COPY config.json ./config.json
COPY Utility.dll ./Utility.dll
COPY settings.ini ./settings.ini
COPY redis_conf.json ./redis_conf.json
COPY sql_config.json ./sql_config.json

RUN python3 -m venv $VIRTUAL_ENV \
# From here on, use virtual env's python.
&& pip install --upgrade pip \
&& pip install --no-cache-dir --upgrade pip setuptools wheel \

&& pip install --no-cache-dir -r requirements.txt \
# Dependency for pythonnet.
&& python -m pip install --no-cache-dir pycparser \
&& python -m pip install -U pythonnet \
&& python setup.py install

构建运行良好,输出中没有错误,但是当我检查容器中的文件系统时,我发现 pythonnet 和 pycparser 不在 venv/bin/lib 目录或其他任何地方。根目录下有一个 egg-info 文件,但没有安装应用程序的迹象。我在哪里错了?

标签: linuxdockerinstallationvirtualenvpython-3.6

解决方案


我在下面附上了示例 dockerfile,它有助于部署我的产品使用 python 和烧瓶框架编码的生产级版本

I attached example dockerfile below 

FROM python:3.8-slim-buster

RUN python3 -m venv /opt/venv

# Install dependencies:
COPY requirements.txt .
RUN /opt/venv/bin/pip install -r requirements.txt

# Run the application:
COPY myapp.py .
CMD ["/opt/venv/bin/python", "myapp.py"]


推荐阅读