DCTS/Dockerfile.node

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