48 lines
1.6 KiB
Docker
48 lines
1.6 KiB
Docker
# =============================================================================
|
|
# DCTS Worker Node Dockerfile — Fortran (gfortran/BLAS/LAPACK) + Node Runner
|
|
# =============================================================================
|
|
|
|
# ─── Stage 1: Rust Node Worker 二进制编译 ────────────────────────────────────
|
|
FROM rust:1.80-alpine AS node-builder
|
|
RUN apk add --no-cache musl-dev g++ make pkgconfig sqlite-dev
|
|
WORKDIR /app
|
|
COPY Cargo.toml Cargo.lock ./
|
|
COPY crates/ ./crates/
|
|
COPY tools/ ./tools/
|
|
RUN cargo build --release -p node && \
|
|
cp /app/target/release/node /usr/local/bin/dcts-node
|
|
|
|
# ─── Stage 2: Fortran 运行环境镜像 ───────────────────────────────────────────
|
|
FROM debian:bookworm-slim
|
|
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
gfortran \
|
|
liblapack-dev \
|
|
libblas-dev \
|
|
ca-certificates \
|
|
curl \
|
|
procps \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
RUN groupadd -g 65532 dcts && useradd -u 65532 -g dcts -s /bin/bash dcts
|
|
|
|
WORKDIR /app
|
|
|
|
COPY --from=node-builder /usr/local/bin/dcts-node /app/
|
|
|
|
RUN mkdir -p /app/data/runtime /app/data/work /app/logs /app/assets && \
|
|
chown -R dcts:dcts /app
|
|
|
|
USER dcts
|
|
|
|
ENV DCTS_SERVER_URL=http://dcts-server:8090
|
|
ENV DCTS_MAX_SLOTS=4
|
|
ENV DCTS_HEARTBEAT_SEC=15
|
|
ENV DCTS_RUNTIME_DIR=/app/data/runtime
|
|
ENV DCTS_WORK_DIR=/app/data/work
|
|
ENV DCTS_ASSETS_DIR=/app/assets
|
|
|
|
VOLUME ["/app/data/work", "/app/logs"]
|
|
|
|
ENTRYPOINT ["/app/dcts-node"]
|