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"]

猜你喜欢

转载自blog.csdn.net/lansye/article/details/134506609