alpine linux下pyinstaller的使用和docker镜像最小化

docker实在是解决跨平台问题的神器,但在实际使用中仍有一个缺点。一个docker使用的最佳实践是,使用专门的镜像完成专门的任务。这就使得我们会在电脑上存储和使用数十个镜像。基于linux的镜像,如ubuntu等,普遍有超过100M的大小,安装python环境后能超过300M。由此带来的存储和网络传输负担甚至超过了docker跨平台带来的好处。

但幸运的是,一个特殊的linux镜像——alpine linux,只有4M大小,这就给大幅降低镜像大小带来了可能。具体的方法是:1、 使用alpine linux代替ubuntu等镜像。2、将镜像分成构建镜像和部署镜像,只在构建镜像上安装编程环境,使用gcc和pyinstaller生成可执行文件后,将这些小文件复制进原始的部署镜像中。使用这种方式生成的python部署镜像,只有不到20M。

alpine linux与经常使用的ubuntu镜像有较大的不同。

ubuntu使用apt包管理,apt install xxx来安装库;alpine使用apk包管理,apk add xxx来安装库。

安装python时,ubuntu是apt install python3 python3-pip;alpine则是apk add python3 python3-dev。

安装gcc时,alpine是apk add gcc,但是编译时会提示stdio.h不存在,这时需要apk add libc-dev。

使用pyinstaller时,alpine和ubuntu等主流系统有较大不同。alpine使用musl来代替glibc,所以pyinstaller的bootloader也要做相应更改。https://github.com/six8/pyinstaller-alpine是一个可用的基础构建镜像,在它的Dockerfile的基础上去掉entrypoint,就可以作为一个容易分发的编程环境。

在构建镜像上编译好的程序,使用docker cp复制到构建镜像,就可以submit了。保持构建镜像和部署镜像都基于同一个基础镜像,可以保证可执行文件的通用性。例如在ubuntu16.04下使用gcc编译的out文件,直接复制到alpine下不可执行。但是在pyinstaller-alpine下gcc编译的out文件,直接复制到alpine下是可以执行的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值