我可以在Alpine中安装轻量级的GCC发行版吗?
我正在尝试制作一个小的Docker映像。因此,我使用Alpine作为基本映像(5MB)。与之相比,标准的GCC安装使它相形见((> 100MB)。
那么我可以在Alpine上安装轻量级的GCC发行版吗?
注意:Clang差很多(我上次检查是475MB)。
答案 0 :(得分:2)
没有这样的图像,AFAIK,但是您可以通过删除不需要的GCC二进制文件来使GCC更苗条。
这在很大程度上取决于GCC需要什么功能。
首先,我假设您只需要C支持,这意味着安装了gcc
和musl-dev
软件包(用于标准标头),使用Alpine将产生约100MB的映像3.8。
cc1obj
,这是Objective-C后端。在Alpine 3.8上,它位于/usr/libexec/gcc/x86_64-alpine-linux-musl/6.4.0/cc1obj
上,占用17.6MB。lto-wrapper
和lto1
,它们分别占用700kb和16.8MB。
尽管LTO优化可能很强大,但在大多数应用程序中,它可能仅在速度和尺寸方面进行了较小的改进(仅有百分之几)。另外,您必须选择加入LTO,大多数应用程序都没有这样做,因此它可能是删除的不错选择。gcj
,该前端似乎无法正常工作。它位于/usr/bin/x86_64-alpine-linux-musl-gcj
,重812kb。通过删除这些图像并挤压所得图像,它将缩小为64.4MB,这仍然很大。您可能可以通过删除其他文件来进一步缩小,但是随后您可能会失去一些所需的功能,并且权衡的吸引力较小。
这是一个示例Dockerfile:
FROM alpine:3.8
RUN set -ex && \
apk add --no-cache gcc musl-dev
RUN set -ex && \
rm -f /usr/libexec/gcc/x86_64-alpine-linux-musl/6.4.0/cc1obj && \
rm -f /usr/libexec/gcc/x86_64-alpine-linux-musl/6.4.0/lto1 && \
rm -f /usr/libexec/gcc/x86_64-alpine-linux-musl/6.4.0/lto-wrapper && \
rm -f /usr/bin/x86_64-alpine-linux-musl-gcj
使用以下方法进行了测试:
sudo docker image build --squash -t alpine-gcc-minimal .