Python 3.7 Docker 镜像

Posted

技术标签:

【中文标题】Python 3.7 Docker 镜像【英文标题】:Python 3.7 Docker images 【发布时间】:2019-03-15 09:14:03 【问题描述】:

我想将我的 python 应用程序 dockerize。我去了 Docker hub,发现有很多听起来很可能的基础镜像。

3.7.0-stretch, 3.7-stretch, 3-stretch, stretch (3.7/stretch/Dockerfile)
3.7.0-slim-stretch, 3.7-slim-stretch, 3-slim-stretch, slim-stretch, 3.7.0-slim, 3.7-slim, 3-slim, slim (3.7/stretch/slim/Dockerfile)
3.7.0-alpine3.8, 3.7-alpine3.8, 3-alpine3.8, alpine3.8, 3.7.0-alpine, 3.7-alpine, 3-alpine, alpine (3.7/alpine3.8/Dockerfile)
3.7.0-alpine3.7, 3.7-alpine3.7, 3-alpine3.7, alpine3.7 (3.7/alpine3.7/Dockerfile)

尽管我尝试了 Google 搜索,但我无法弄清楚“stretch”、“slim”、“slim-stretch”和 alpine 之间的区别。帮忙?

【问题讨论】:

stretch 我们可以争论,但其他的在那个页面上都有明确的描述:hub.docker.com/_/python 哎呀,我错过了页面底部的那个。但是,仍然留下一些悬而未决的问题:1)什么是伸展? 2) 底部文字建议使用普通的 3.7.n 图像,但我没有在所有可用图像的详细列表中看到它们。我错过了什么? 我认为所有这些“stretch”标签都来自 Debian 的代号“Stretch”:wiki.debian.org/DebianStretch 无论如何,3.7 显然确实存在并且看起来像我想要的版本。这主要减少了我误读页面的坏处。对不起。 已修复 :) github.com/docker-library/docs/pull/1332 【参考方案1】:

带有 Dockerfiles 的 Github 存储库在这里,但它非常动态且不易阅读:

https://github.com/docker-library/python

自述文件也位于此处:

https://github.com/docker-library/docs/tree/master/python

看起来关于stretch 的信息真的不见了。如果它被意外删除,即使在 git 修订历史记录中也找不到。

我创建了一个问题:https://github.com/docker-library/python/issues/343

Stretch 是 Debian 9 的代号 - 目前是稳定版本(直到 2019-07-06,Debian 10 Buster 发布)。 “oldstable” Debian 8 的代号为 Jessie

https://wiki.debian.org/DebianReleases

我个人的建议是使用简约的 Alpine 镜像,如果出现问题,则回退到 Debian 镜像 :)

Debian 与 Alpine 的比较(如果可能,从 Docker 的角度):

https://www.turnkeylinux.org/blog/alpine-vs-debian

https://nickjanetakis.com/blog/the-3-biggest-wins-when-using-alpine-as-a-base-docker-image

根据我有限的经验,最显着的区别是 aptapk 以及 GNU libc6 与 musl libc。并且 Alpine 使用busybox,而不是许多系统命令的完整版本。

更新:许多带有已编译二进制代码的 Python ***可以与基于 Debian 的图像一起使用,但对于基于 Alpine 的图像,必须重新编译(pip install)。在这些情况下,我建议使用基于 Debian 的映像。

【讨论】:

所以如果我在做 FROM python:3.7 我使用的是 ubuntu 吗?高山?哪个操作系统? @Mr-Programs on hub.docker.com/_/python 你会看到3.7 是与3.7.3-stretch3.7.3-windowsservercore-1809(以及其他2 个windowsservercore)的“共享标签”。因此,在 Linux 上的 Docker 中,python:3.7 将使用 3.7.3-stretch - 这是 Debian 当前的稳定版本(它的代号为“Stretch”)。 截至 2019 年 7 月,稳定的 Debian 版本是 Debian 10 代号“buster”。因此在兼容性和稳定性方面的最佳选择是python:3.7-buster。对于 Python 3.8,只有一个破坏图像,而不是拉伸图像。 TWTMC:对于使用机器学习/数据科学库的用户,一些主要软件包(SciPy 和 Scikit-Learn)在使用 alpine 图像时可能会出现一些问题。有时需要去版本镜像,以避免由于缺少库而导致的一些错误。【参考方案2】:

请注意,在 Python Oficial Docker Hub 的底部,您将获得有关 repo 内容的良好线索。

Stretch、Apline、Buster 指的是容器使用的基础操作系统

Stretch and Buster 是 Debian 的连续版本,而Alpine 是基于 musl 和 BusyBox 的 Linux 简约版本。

大小差异相当大,从 Alpine 到其他人的差异高达 30 倍,但要考虑到 权衡,作为一个更好的社区来更好-size-performance 种类。

另外,请考虑您的容器需要安装什么以及它的简约程度。

【讨论】:

以上是关于Python 3.7 Docker 镜像的主要内容,如果未能解决你的问题,请参考以下文章

docke镜像上传到dockerhub仓库和阿里云docker仓库的方法

Python的docker-py模块

Python的docker-py模块

docke--阿里云镜像配置

我的Docke-CE学习笔记(02)

Laradock入门