Rust Docker Image编译镜像优化

1.起源

一个项目要部署的docker镜像1.8GB,并非多语言集成附带很多静态资源的项目.这个大小是很不可思议的.

2.探索

项目的路径https://github.com/pyth-network/pyth-agent/blob/main/Dockerfile

FROM python:3.10-slim-bullseye

# Install Rust
RUN apt update && apt install -y curl pkg-config libssl-dev build-essential
RUN curl https://sh.rustup.rs -sSf | bash -s -- -y
ENV PATH="/root/.cargo/bin:${PATH}"
RUN rustup toolchain install nightly

# Install poetry
RUN pip install poetry
ENV PATH="${PATH}:/root/.local/bin"
RUN poetry config virtualenvs.in-project true

# Install Solana Tool Suite
RUN sh -c "$(curl -sSfL https://release.solana.com/v1.14.11/install)"
ENV PATH="${PATH}:/root/.local/share/solana/install/active_release/bin"

ADD . /agent
WORKDIR /agent

RUN cargo build --release

3.优化

考虑使用两阶段编译,Rust的特征编译好的文件可以移植.

# 阶段一:构建 Rust 应用程序
FROM rust:latest as builder
WORKDIR /app
COPY . .
RUN cargo build --release

# 阶段二:创建最终镜像
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/target/release/myapp .
CMD ["./myapp"]

最终的Dockerfile

# 阶段一:构建 Rust 应用程序
FROM rust:latest as builder
WORKDIR /app
COPY . .

# 可选步骤为加速下载依赖,若速度就比较快可以不用.
# 设置清华大学的 Cargo 镜像源
RUN mkdir -p /root/.cargo \
    && echo '[source.crates-io]'> /root/.cargo/config \
    && echo 'replace-with = "tuna"'> /root/.cargo/config \
    && echo '[source.tuna]'> /root/.cargo/config  \
    && echo 'registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"'> /root/.cargo/config 

RUN cargo build --release

# 阶段二:创建最终镜像
FROM alpine:latest
WORKDIR /opt
COPY --from=builder /app/target/release/agent .
# 运行时配置文件可以单独挂载
CMD ["/opt/app/agent -- --config /agent/config/pythnet.toml"]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值