我正在将 Rust 应用程序打包到 Docker 映像中以部署到我的服务器。我发现 rust docker 镜像大小超过 1GB(比使用java和的任何其他应用程序都大python)。为什么 Rust docker 镜像这么大?我检查了图层,发现该cargo build命令占用了超过 400MB 的空间。
FROM rust:1.54
LABEL maintainer="jiangtingqiang@gmail.com"
ENV ROCKET_ADDRESS=0.0.0.0
ENV ROCKET_PORT=11014
WORKDIR /app
COPY . .
RUN rustup default stable
RUN cargo build
CMD ["cargo", "run"]
Run Code Online (Sandbox Code Playgroud)
是否可以让 Rust docker 镜像变小?
Sve*_*rev 21
Rust 镜像绝对不是 1GB。从 Dockerhub 中我们可以看到镜像要小得多。您的映像为 1GB,因为它包含应用程序运行所不需要的所有中间构建工件 - 只需检查targetPC 上文件夹的大小
+---------------+----------------+------------------+
| Digest | OS/ARCH | Compressed Size |
+---------------+----------------+------------------+
| 99d3d924303a | linux/386 | 265.43 MB |
| 852ba83a6e49 | linux/amd64 | 196.74 MB |
| 6eb0fe2709a2 | linux/arm/v7 | 256.59 MB |
| 2a218d86ec85 | linux/arm64/v8 | 280.22 MB |
+---------------+----------------+------------------+
Run Code Online (Sandbox Code Playgroud)
rust docker 映像包含构建应用程序所需的编译器,但不必将其与最终映像打包在一起。您也不必打包构建过程生成的所有临时工件。
为了减少最终的生产映像,您必须使用多阶段 docker 构建:
# Build stage
FROM rust:1.54 as builder
WORKDIR /app
ADD . /app
RUN cargo build --release
# Prod stage
FROM gcr.io/distroless/cc
COPY --from=builder /app/target/release/app-name /
CMD ["./app-name"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2521 次 |
| 最近记录: |