bre*_*att 5 gcc docker alpine-linux
我可以在 Alpine 中安装轻量级 GCC 发行版吗?
我正在尝试制作一个小型 Docker 映像。出于这个原因,我使用 Alpine 作为基础镜像 (5MB)。相比之下,标准 GCC 安装相形见绌(>100MB)。
那么是否有我可以在 Alpine 上安装的轻量级 GCC 发行版?
注意:Clang 更糟糕(上次检查时为 475MB)。
AFAIK,没有这样的图像可用,但是您可以通过删除不需要的 GCC 二进制文件来使 GCC 更纤薄。
这在很大程度上取决于 GCC 需要哪些功能。
作为起点,我假设您只需要 C 支持,这意味着安装了gcc和musl-dev包(用于标准标头),这会导致使用 Alpine 3.8 生成约 100MB 的映像。
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
Run Code Online (Sandbox Code Playgroud)
测试使用:
sudo docker image build --squash -t alpine-gcc-minimal .
| 归档时间: |
|
| 查看次数: |
6380 次 |
| 最近记录: |