Files

46 lines
2.1 KiB
Docker

# bioflow-gf —— GF 链主环境(identify/phylogeny 等, 内核镜像)
# 源环境: test4py311 (Python 3.11.14); 方法: docs/bioflow_image_build_playbook.md
# 每镜像=单一 conda 环境, 仅 root, 无 /home/xzq, 无 conda 本体; 工具一律 PATH 裸命令。
ARG BASE_IMAGE=ubuntu:24.04
FROM ${BASE_IMAGE} AS unpack
ARG ENV_TAR
COPY ${ENV_TAR} /tmp/env.tar.gz
RUN mkdir -p /opt/conda && \
(tar --ignore-zeros -xzf /tmp/env.tar.gz -C /opt/conda || true) && \
rm -f /tmp/env.tar.gz && \
test -x /opt/conda/bin/python
# 先 PATH 再 conda-unpack(其 shebang 为 /usr/bin/env python)
ENV PATH=/opt/conda/bin:$PATH
ENV LANG=C.UTF-8
# 先 conda-unpack(其文件清单含 bin/activate 等前缀重写目标, 不能先删),
# 再删除 conda-pack 注入的 conda 桩(镜像红线: 无 conda 可执行文件)
RUN conda-unpack && \
rm -f /opt/conda/bin/conda /opt/conda/bin/activate /opt/conda/bin/deactivate && \
rm -f /opt/conda/bin/pdftex /opt/conda/bin/pdflatex /opt/conda/bin/latex
# 内核镜像: 镜像内解释器编译 .so(与解释器版本绑定); 最终只留 .so+明文入口+资源
FROM ${BASE_IMAGE} AS builder
# 构建期工具(gcc/binutils/rsync)——仅编译 .so 用, 不进最终镜像
RUN apt-get update && apt-get install -y --no-install-recommends \
gcc libc6-dev binutils rsync && rm -rf /var/lib/apt/lists/*
COPY --from=unpack /opt/conda /opt/conda
ENV PATH=/opt/conda/bin:$PATH
COPY kernel-src /bioflow-kernel-src
RUN cd /bioflow-kernel-src && \
./build.sh . /opt/bioflow-compiled "$(command -v python)" && \
cd /opt/bioflow-compiled && \
python -B -c "import gfa_core.project_paths; import gfa_core.mas.stage_catalog; import gfa_core.gene_family_scope; print('compiled tree import OK')"
FROM ${BASE_IMAGE}
# libgomp1: blastp/R 依赖 libgomp.so.1(conda 环境只带 libgomp.so -> .1.0.0)
RUN apt-get update && apt-get install -y --no-install-recommends \
libgomp1 && rm -rf /var/lib/apt/lists/*
COPY --from=unpack /opt/conda /opt/conda
COPY --from=builder /opt/bioflow-compiled /bioflow-kernel
ENV PATH=/opt/conda/bin:$PATH
ENV LD_LIBRARY_PATH=/opt/conda/lib
ENV LANG=C.UTF-8
WORKDIR /bioflow-kernel