如何缩减rustup安装Rust nightly的占用空间?
如何减少Arch Linux容器中Rust nightly的安装占用空间?
我有一个Dockerfile用于在Arch Linux容器中构建Neovim环境,从docker history日志可以看到,rustup install nightly命令占用了1.05GB空间,远超预期,想知道有什么办法减少这个占用。
$ docker history s1n7ax/neovim:latest IMAGE CREATED CREATED BY SIZE COMMENT de4cac3f0fe9 7 hours ago /bin/sh -c #(nop) WORKDIR /root 0B 92121272827c 7 hours ago /bin/sh -c nvim --headless -c 'set c… 692MB 8779585b1604 7 hours ago /bin/sh -c nvim --headless -c 'autoc… 82.3MB 1b0cf08fadcf 7 hours ago /bin/sh -c sed -i "s/max_jobs *= *[0-9]\+,*/… 12.4kB 26ee8d4eb0e6 7 hours ago /bin/sh -c cp server/*.jar ~/.local/share/nv… 2.1MB e0ea809b07bd 7 hours ago /bin/sh -c yarn build-plugin 145MB cd66bd36b04c 7 hours ago /bin/sh -c yarn 320MB e6ed455333a2 7 hours ago /bin/sh -c #(nop) WORKDIR /vscode-java-test 0B 881aece35a57 7 hours ago /bin/sh -c cp com.microsoft.java.debug.p… 2.86MB 01817765eefa 7 hours ago /bin/sh -c ./mvnw clean install 160MB 0496aff9c7e9 7 hours ago /bin/sh -c chmod u+x mvnw 0B 5675cbc79777 7 hours ago /bin/sh -c #(nop) WORKDIR /java-debug 0B a27056432eb9 7 hours ago /bin/sh -c git clone https://github.com/micr… 12.4MB 947e120c0d95 7 hours ago /bin/sh -c git clone https://github.com/micr… 2.83MB a30656b6fa58 7 hours ago /bin/sh -c mkdir -p ~/.local/share/nvim/lsp_… 0B 21699318e786 7 hours ago /bin/sh -c #(nop) WORKDIR / 0B 42ce1c7cdea4 7 hours ago /bin/sh -c git clone --recurse-submodules -j… 2.45MB 478422a36727 7 hours ago /bin/sh -c ln -s /usr/local/bin/nvim /usr/sb… 0B 6eb281356e67 7 hours ago /bin/sh -c make install 34.6MB 7b685c7218a0 7 hours ago /bin/sh -c make CMAKE_BUILD_TYPE=Release 329MB ca9dbcc78168 7 hours ago /bin/sh -c #(nop) WORKDIR /neovim 0B b3d8d34a8377 7 hours ago /bin/sh -c git clone https://github.com/neov… 253MB e1d162cf132c 7 hours ago /bin/sh -c #(nop) ENV PATH=~/.yarn/bin:~/.c… 0B a7ba8d0af37f 7 hours ago /bin/sh -c #(nop) ENV PATH=~/.cargo/bin:~/.… 0B 22a3b31751f9 7 hours ago /bin/sh -c #(nop) ENV PATH=~/.local/bin:/us… 0B 33649aec725c 7 hours ago /bin/sh -c #(nop) ENV SHELL=/bin/bash 0B 9e8b31edbbde 7 hours ago /bin/sh -c cargo install taplo-cli 106MB 7b45e6a9f648 7 hours ago /bin/sh -c cargo install stylua 110MB 92e12231c110 7 hours ago /bin/sh -c pip install --upgrade autopep8 728kB 45ad80c3b346 7 hours ago /bin/sh -c yarn global add prettier 38.1MB 83072229ae66 7 hours ago /bin/sh -c rustup default nightly 103B 2d24ac105fec 7 hours ago /bin/sh -c rustup install nightly 1.05GB c93fbc7c84ca 7 hours ago /bin/sh -c pacman -S --needed --noconfirm … 1.12GB 38f82d2a27d2 7 hours ago /bin/sh -c pacman -Syu --noconfirm 35MB ec4c97123c01 4 days ago /bin/sh -c #(nop) CMD ["/usr/bin/bash"] 0B <missing> 4 days ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0B <missing> 4 days ago /bin/sh -c ldconfig && sed -i '/BUILD_ID… 32.3kB <missing> 4 days ago /bin/sh -c #(nop) COPY dir:f054defad7465e3fc… 396MB
可行的优化方法
1. 切换到minimal配置安装
rustup默认会安装包含文档、源码的完整工具链,切换到minimal配置只装核心组件,能直接减少一半以上体积:
rustup set profile minimal && rustup install nightly
2. 手动清理冗余文件
安装完成后,删除工具链里的文档、源码等非必需文件:
rustup install nightly && rm -rf ~/.rustup/toolchains/nightly-*/share/doc ~/.rustup/downloads/*
3. 使用Docker多阶段构建
把Rust工具链隔离在构建阶段,只把编译好的二进制文件复制到最终镜像,完全丢弃整个Rust环境:
# 构建阶段:安装Rust并编译需要的工具 FROM archlinux:latest AS builder RUN pacman -Syu --noconfirm && pacman -S --needed --noconfirm rustup git RUN rustup set profile minimal && rustup install nightly && rustup default nightly RUN cargo install stylua taplo-cli # 最终镜像:只保留编译好的工具和Neovim环境 FROM archlinux:latest COPY --from=builder /root/.cargo/bin/stylua /root/.cargo/bin/taplo-cli /usr/local/bin/ # 后续继续构建Neovim的步骤...
4. 用预编译二进制替代cargo install
对于stylua、taplo-cli这类工具,直接去官方仓库下载对应平台的预编译可执行文件,放到/usr/local/bin目录下即可,不用通过cargo安装,完全避免Rust工具链的依赖。
内容的提问来源于stack exchange,提问作者s1n7ax
相关产品推荐
相关产品推荐

