Skip to content

快速参考

  • 由……维护: (注:原文中“Maintained by:”后面应该会有具体的维护者信息,若有完整内容,翻译会更加准确。这里仅根据给定的部分进行了翻译。)
    Docker 社区

  • 哪里可以获得帮助:
    Docker 社区 Slack、Server Fault、Unix & Linux 或 Stack Overflow

支持的标签及各自的 Dockerfile 链接

(在常见问题解答中查看“‘共享’标签和‘简单’标签之间的区别是什么?”)

简单标签

共享标签

快速参考(续)

什么是 Python?

Python 是一种解释型、交互式、面向对象、开源的编程语言。它包含模块、异常、动态类型、非常高级的动态数据类型和类。Python 将强大的功能与非常清晰的语法相结合。它具有许多系统调用和库的接口,以及各种窗口系统的接口,并且可以在 C 或 C++ 中进行扩展。它也可用作需要可编程接口的应用程序的扩展语言。最后,Python 是可移植的:它可以在许多 Unix 变体、Mac 以及 Windows 2000 及更高版本上运行。

wikipedia.org/wiki/Python(编程语言)

logo

如何使用此图像

在您的 Python 应用项目中创建一个 Dockerfile

FROM python:3

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD [ "python", "./your-daemon-or-script.py" ]

或(如果您需要使用 Python 2):

FROM python:2

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD [ "python", "./your-daemon-or-script.py" ]

然后您可以构建并运行 Docker 镜像:

$ docker build -t my-python-app .
$ docker run -it --rm --name my-running-app my-python-app

运行一个 Python 脚本

对于许多简单的单文件项目,您可能会发现编写完整的 Dockerfile 不太方便。在这种情况下,您可以直接使用 Python Docker 镜像来运行 Python 脚本:

$ docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp python:3 python your-daemon-or-script.py

或(同样,如果您需要使用 Python 2):

$ docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp python:2 python your-daemon-or-script.py

图像中有多个 Python 版本

在非精简变体中,在 /usr/bin/python (和/或 /usr/bin/python3 )处将有一个额外的(发行版提供的) python 可执行文件,而期望的映像提供的 /usr/local/bin/python$PATH 中的默认选择。这是在非精简变体中使用 buildpack-deps 映像的一个不幸的副作用(并且许多发行版提供的工具是针对特定的 Python 安装编写的,并且可能会在使用不同的 Python 安装时出现故障,因此我们不能安全地删除/覆盖它)。

图像变体

python 图像有多种类型,每种都针对特定的用例而设计。

python:<version>

这是事实上的映像。如果您不确定自己的需求是什么,您可能想要使用这个。它被设计为既可以用作一次性容器(挂载您的源代码并启动容器以启动您的应用程序),也可以作为构建其他映像的基础。

其中一些标签的名称可能包含诸如“书虫”或“靶心”之类的名称。这些是 Debian 发行版的套件代号,表明该映像基于哪个发行版。如果您的映像需要安装除映像自带的软件包之外的任何其他软件包,您可能需要明确指定其中之一,以在 Debian 有新发行版时最大程度地减少损坏。

此标签基于 buildpack-depsbuildpack-deps 是为在其系统上有许多镜像的 Docker 普通用户设计的。按设计,它具有大量极为常见的 Debian 软件包。这减少了从其派生的镜像需要安装的软件包数量,从而减小了系统上所有镜像的总体大小。

python:<version>-slim

此图像不包含默认标签中常见的 Debian 软件包,仅包含运行 python 所需的最小 Debian 软件包。除非您在仅会部署 python 图像且存在空间限制的环境中工作,否则我们强烈建议使用此存储库的默认图像。

当使用此图像时,如果针对要安装的 Python 发行版包有合适的构建发行版可用, pip install 将起作用。从源发行版安装 Python 发行版包时, pip install 可能会失败。此图像不包含编译用其他语言编写的扩展模块所需的 Debian 软件包。如果 pip install 失败,可能的解决方案包括:

  • 在运行 pip install 之前,使用此图像并安装任何所需的 Debian 软件包。
  • 使用此存储库的默认图像。默认图像包含最常用的 Debian 软件包。大多数任意的 pip install 应该能够成功,而无需额外的头文件/开发 Debian 软件包。

python:<version>-alpine

此图像基于流行的 Alpine Linux 项目,可在 alpine 官方镜像中获取。Alpine Linux 比大多数发行版基础镜像(约 5MB)小得多,因此总体上会生成更精简的镜像。

当您首要关注的是最终图像大小尽可能小的时候,此变体是有用的。需要注意的主要警告是,它确实使用 musl libc 而不是 glibc 及相关库,因此软件往往会根据其对 libc 要求/假设的深度而遇到问题。有关可能出现的问题以及使用基于 Alpine 的图像的一些利弊比较的更多讨论,请参阅此 Hacker News 评论线程。

为尽量减小镜像大小,在基于 Alpine 的镜像中通常不会包含其他相关工具(例如 gitbash )。以该镜像为基础,在您自己的 Dockerfile 中添加您需要的内容(如果您不熟悉如何安装软件包,请参阅 alpine 镜像说明中的示例)。

python:<version>-windowsservercore

此图像基于 Windows Server Core( microsoft/windowsservercore )。因此,它仅在该图像适用的地方起作用,例如 Windows 10 专业版/企业版(周年纪念版)或 Windows Server 2016。

有关如何在 Windows 上运行 Docker 的信息,请参阅 Microsoft 提供的相关“快速入门”指南:

许可证

查看 Python 2 和 Python 3 的许可证信息。

与所有 Docker 镜像一样,这些镜像可能还包含其他可能受其他许可证约束的软件(例如来自基础发行版的 Bash 等,以及所包含的主要软件的任何直接或间接依赖项)。

一些能够自动检测到的额外许可信息可能会在 repo-info 存储库的 python/ 目录中找到。

对于任何预构建图像的使用,图像用户有责任确保对此图像的任何使用都符合其中包含的所有软件的任何相关许可。