将Python软件包安装到Docker映像的不同方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Python软件包安装到Docker映像的不同方法相关的知识,希望对你有一定的参考价值。

我想基于现有的Docker映像创建一个已经安装了一些Python软件包的映像。因此,我正在考虑在Dockerfile中使用pip将其他软件包安装到该映像。看来我可以单独安装它们,例如:

RUN pip install foo==1.2.*
RUN pip install bar==3.4.*
...

或将它们放入requirements.txt并执行以下操作:

COPY requirements.txt /opt/app/requirements.txt
WORKDIR /opt/app
RUN pip install -r requirements.txt

[我想知道哪种方法被认为是更好的做法(即,性能更高和/或导致图像更小)。

答案

方法1:在requests.txt中添加软件包

以这种方式包含软件包是更干净和有保证的方法。

    添加软件包后,您需要构建映像并重新启动容器,这会占用大量时间和处理资源。
  • 通过版本控制机制,它变得更加健壮。
  • 方法2:使用pip部署的容器上
  • 此方法更加简便。

      使用pip直接安装在已部署的容器上,将始终获得其依赖项来进行安装。
    • 由于版本不匹配或软件包本身与其他软件包冲突,这些依赖软件包有时可能与现有软件包冲突。
    • 有时您可能会忘记从工作容器中构建Docker映像。
  • 结论
  • 这两种方法之间的大小不会有太大变化。

      如果您尝试使用不同的程序包,则使用方法2,它将节省时间和资源。
    • 如果确定,您可以添加需求并开始工作。

    另一答案
    我需要一种更快的方法并导致
    较小的图像尺寸

    使用高山和多阶段构建。示例:

    FROM python:3.7-alpine as base FROM base as builder RUN mkdir /install WORKDIR /install COPY requirements.txt /requirements.txt RUN pip install --install-option="--prefix=/install" -r /requirements.txt FROM base COPY --from=builder /install /usr/local COPY src /app WORKDIR /app CMD ["gunicorn", "-w 4", "main:app"]

    来源:https://blog.realkinetic.com/building-minimal-docker-containers-for-python-applications-37d0272c52f3

    以上是关于将Python软件包安装到Docker映像的不同方法的主要内容,如果未能解决你的问题,请参考以下文章

    将字符串的 CLA 传递到 Docker 映像中 - Python

    为 Python 项目构建 Docker 映像时如何避免重新安装包?

    使用 docker 安装防病毒软件的最佳位置

    从开发到部署会用到的 Docker 命令

    从开发到部署会用到的 Docker 命令

    使用Docker镜像安装saltshaker