python - 如何在多阶段 docker 构建期间将 python 从一个阶段复制到另一个阶段

标签 python docker docker-multi-stage-build

我正在使用nvidia/cudagl:11.4.2-base-ubuntu20.04 ,其中不包括 python。这对我来说没问题,因为无论如何我都需要一个非常具体的 python 版本(3.9.9)。一种方法应该是自己编译 python (例如根据 https://askubuntu.com/a/890959 )。但是,我想也许我可以使用多阶段构建,只需从 python:3.9.9-slim 复制所需的 python 可执行文件即可。 ,这样我就不必处理编译及其残余部分。

这是一个可行的想法吗?到底需要复制什么?

最佳答案

将已安装的二进制文件从一个镜像复制到另一个镜像实际上不太可行。如果您知道该应用程序只是一个静态二进制文件,或者您知道它具有非常受控的库依赖项,那么它可以工作,但是Python将东西安装在许多不同的目录中并包含其自己的库树。使用分发包管理器来安装所需的特定 Python 版本会更好。

由于您的基础镜像基于 Ubuntu,因此有一个 add-on Ubuntu repository包含许多不同的Python版本;另请参阅 Python 3.7 on Ubuntu 20.04 。将该答案转换为 Dockerfile 格式,您会得到如下内容:

FROM nvidia/cudagl:11.4.2-base-ubuntu20.04
...
# USER root (if you're not already root)
RUN apt-add-repository ppa:deadsnakes/ppa \
 && apt-get update \
 && DEBIAN_FRONTEND=noninteractive \
    apt-get install --no-install-recommends --assume-yes \
      python3.9

在撰写本文时,包括 Python 3.9.10 而不是 3.9.9,但这对您来说应该不会有显着差异。

关于python - 如何在多阶段 docker 构建期间将 python 从一个阶段复制到另一个阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71053803/

相关文章:

django - Docker 构建给了我这个错误 "/bin/sh: -c requires an argument , The command '/bin/sh -c' 返回一个非零代码 : 2"

linux - 当任务因 OOM 而被终止时,内核在日志中报告内存使用情况

macos - 在 Docker for Mac 上访问 Docker 守护进程 Remote api

kubernetes - Docker 多阶段

docker multistage build 因多个 --build-arg 而失败

python - 创建 22 个名称中 11 个名称的所有组合,其中积分总和为 100

python - 带有 token 参数的 Django 电子邮件验证 URL

python - 密码学 Python Docker 多阶段构建

python - 覆盖 Python 析构函数 (__del__) 会导致内存泄漏吗?

python - 从 rpy2 传递给 R 的对象是什么?