Docker中大小不一的python图片

我想用Dockertesting我的应用程序。 所以,我在Dockerfile中有这个:

FROM python:3-onbuild CMD [ "python", "./test.py" ] 

test.py:

 print(123) 

然后我运行:

 docker build -t my_test_app . 

所以,我有一个大的形象。 docker images返回:

 REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE python 3-onbuild b258eb0a5195 8 days ago 757 MB 

为什么文件大小如此之大?

这个文件大小是否正常?

我只是在我的机器上检查了标准的Ubuntu:可靠的图像是188 MB,所有的Python东西的图像是480MB。 我经常看到800MB的图像,通常是包含一些有意义的应用程序的图像。

但是,这些图像是基于我们的私人图像官方的Docker库图像由于某种原因似乎更大。 他们意识到这个事实,并试图减less这一事实。 看看这个话题的讨论

如果你需要一个小一点的图片,试试这个“rouge8 / pythons”,大概是100MB。

 rouge8/pythons latest … 680.3 MB 

请记住,docker图像是按层次结构排列的。 因此,如果您为许多容器重复使用相同的底层基础映像,那么每个单独的容器添加的大小都非常小。 它只是基础加上你添加到特定容器的任何东西之间的区别。

高山Linux是Docker非常精简的发行版。 没有Python,大约5MB。 用Python我得到60到120 MB之间的图像。 以下Dockerfile产生一个110 MB图像。

 FROM alpine:3.4 RUN apk --update add \ build-base python-dev \ ca-certificates python \ ttf-droid \ py-pip \ py-jinja2 \ py-twisted \ py-dateutil \ py-tz \ py-requests \ py-pillow \ py-rrd && \ pip install --upgrade arrow \ pymongo \ websocket-client \ XlsxWriter && \ apk del build-base python-dev && \ rm -rf /var/cache/apk/* && \ adduser -D -u 1001 noroot USER noroot CMD ["/bin/sh"] 

另外,它非常完美。

他们为数据库客户端,图像文件操作和XMLparsing库等东西添加了各种系统包。 这样,如果用户想要为psycopg2,MySQLdb,Pillow或lxml安装Python包,用户就不需要做额外的工作。 添加这些额外的软件包虽然意味着图像会更胖,如果你不需要这些软件包会浪费空间。

他们也不会试图从Python安装中删除那些并不真正需要的东西,比如所有的标准库testing代码目录。 即使.pyc文件也可以修剪,以节省空间,而不会有任何实际的影响,因为一个Web应用程序通常会在容器的整个生命周期中加载一次,所以.pyc文件并没有给您带来太多好处。

作为比较,看看“pythonX.Y-slim”变体和大小。 苗条的图像没有一个onbuild变种。

你也可以通过捆绑的Apache / mod_wsgi支持来查看我自己的Docker镜像。 这些都是修剪和依赖额外的包被安装的用户作为构build挂钩只有在必要时。 对于那些,特定于WSGI应用程序的Python 3.4 onbuild图像的大小是:

 grahamdumpleton/mod-wsgi-docker python-3.4-onbuild ... 409.9 MB 

给出的大小甚至包括Apache和mod_wsgi,给你一个适当的生产级WSGI服务器,能够处理静态文件内容等等。

如果没有运行WSGI应用程序,请改为从基本映像开始。

您可以在以下位置findmod_wsgi泊坞窗图像:

有关如何将这些图像用于WSGI应用程序以及为Python和WSGI应用程序构buildDocker镜像的各种博客文章可以从Docker集线器上的镜像描述中find。 也请留意我的博客网站,因为随着时间的推移,我将发布更多关于Docker和Python的内容。

是的,这是正常的尺寸。 该映像包含一个操作系统映像和各种软件包,这就是为什么大小。

你可以试试python:{version} -alpine版本。 它小得多:

 >> docker image ls |grep python python 3.6-alpine 89.4 MB python 3.6 689 MB python 3.5 689 MB python 3.5.2 687 MB python 3.4 833 MB python 2.7 676 MB 

在编写时,它看起来像所有python版本上的官方形象supoprts -alpine

https://hub.docker.com/_/python/