linux - 如何在 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 文件,但没有安装应用程序的迹象。我在哪里错了?
解决方案
我在下面附上了示例 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"]
推荐阅读
- javascript - Lodash.get 等价于 Ramda
- javascript - Styled Components - 基于 props 有条件地渲染整个 css 块
- animation - 简化不适用于 svg.js v3 Rotate 的函数
- c# - 具有泛型参数的 C# 8.0 可空引用类型功能
- amazon-web-services - 以 Google Cloud 域名为例(如 EC2)
- python - “元组”对象不可调用
- python - 无法识别字符串中的字符 - Python
- r - 用 dplyr 中的数学条件进行总结
- xamarin - Xamarin iOS 部署的 Info.plist 中的“需要全屏”和“支持多个窗口”选项是什么?
- asp.net-mvc - 如何将参数传递给 RedirectToAction 到另一个 Action?