我如何编译python的高山?
背景情况(为什么):
我们有一个用Python编写的项目,运行在一个集装箱化的平台上。 我们正在使用networking文件系统(基于OpenStack)来存储映像和挂载,这在时间点还原方面非常有用,但Docker镜像的大小已经开始在部署中消失。
python:2.7-slim的图像大约是180Mb(我们的代码和依赖关系大约是200Mb),大概需要45秒。 (很多节点!)
我想做的事:
我想从Python代码中编译一个静态二进制文件,然后运行在一个更小的Alpine容器上。
目前进展情况:
运行
$ cython --embed app.py $ gcc -I /usr/lib/python2.7 -o app app.c -lpython2.7
或者可选地
$ pyinstaller -F app.py
产生一个ELF二进制文件(Ubuntu / Debian / Fedora / Kali / Arch)。 第一个要求在目标上安装python-dev,第二个不要,但是通常比第一个运行速度慢大约1200%,并且对于我们的一些代码有困难。
龙在哪里:
编译和运行在Debian上的应用程序工作正常。
$ docker run -v `pwd`/app:/app debian:jessie /app * The application has run successfully...
但阿尔卑斯似乎失败了。
$ docker run -v `pwd`/app:/app alpine:latest /app standard_init_linux.go:178: exec user process caused "no such file or directory"
我怀疑这是因为libc.so.6的dynamic需求,但我似乎无法弄清楚如何创build一个静态二进制与GCC没有dynamic需要libc?
这是因为alpine使用musl libc,静态构build或使用alpine构build二进制文件就足以让它运行。 但是还有第三个懒惰的选项,要么安装glibc,要么懒惰地使用已经安装了glibc的高山图像。 这里是frolvlad / alpine-glibc的图片 。
- 在Alpine(node:8-latest)Docker镜像上安装“locales”
- docker – 与Nginx合作是行不通的
- 高山linux docker镜像,console编码麻烦
- 执行shell命令不会产生任何结果
- Gradle在jenkins中失败:高山容器:UnsatisfiedLinkError:linux-amd64 / libnative-platform.so:libstdc ++。so.6:
- Postgres在docker工人高山linux容器
- docker-compose构build失败/ bin / sh:apt-get:not found
- 如何获得在dockeralipne haprox:1.5日志日志
- 在docker alpine linux base image上设置glibc是否有最佳做法?