# 第一阶段:构建阶段 FROM ubuntu:22.04 AS builder # 设置环境变量 ENV DEBIAN_FRONTEND=noninteractive # 更新系统、安装依赖并清理缓存 RUN apt update && apt upgrade -y && \ apt install -y \ build-essential \ gcc \ g++ \ gfortran \ cmake \ make \ wget \ tar \ libatlas-base-dev \ liblapacke-dev \ libblas-dev \ git \ libedit-dev \ zlib1g-dev \ openbabel \ libeigen3-dev \ automake \ autoconf \ libtool \ vim \ gnuplot \ pymol \ bzip2 \ && ln -s /usr/bin/obabel /usr/bin/babel \ && apt clean \ && rm -rf /var/lib/apt/lists/* # 安装 OpenMPI COPY openmpi-4.1.6.tar.bz2 / RUN tar -xf openmpi-4.1.6.tar.bz2 && \ cd openmpi-4.1.6 && \ ./configure --prefix=/opt/openmpi --disable-builtin-atomics && \ make -j$(nproc) && \ make install && \ cd .. && \ rm -rf openmpi-4.1.6 openmpi-4.1.6.tar.bz2 # 设置 OpenMPI 环境变量 ENV PATH="/opt/openmpi/bin:$PATH" \ LD_LIBRARY_PATH="/opt/openmpi/lib:$LD_LIBRARY_PATH" # 克隆 Open3DQSAR 仓库 RUN git clone https://github.com/UnixJunkie/Open3DQSAR # 安装 ORCA COPY orca_6_0_0_linux_x86-64_avx2_shared_openmpi416.tar.xz / RUN tar -xf orca_6_0_0_linux_x86-64_avx2_shared_openmpi416.tar.xz && \ mv orca_6_0_0_shared_openmpi416_avx2 /opt/orca && \ rm orca_6_0_0_linux_x86-64_avx2_shared_openmpi416.tar.xz # 进入 Open3DQSAR 目录并构建 WORKDIR /Open3DQSAR/open3dqsar RUN ./bootstrap && \ ./configure --with-atlas && \ make -j$(nproc) && \ make install # 设置 ORCA 环境变量 ENV PATH="/opt/orca:$PATH" \ LD_LIBRARY_PATH="/opt/orca:$LD_LIBRARY_PATH" # 第二阶段:运行阶段 FROM ubuntu:22.04 # 设置环境变量 ENV DEBIAN_FRONTEND=noninteractive \ O3_BABEL_PATH=/usr/bin \ O3_GNUPLOT=/usr/bin/gnuplot \ O3_PYMOL=/usr/bin/pymol \ O3_TEMP_PATH=/tmp \ O3_QM_ENGINE=/opt/orca/orca \ O3_MD_GRID_PATH=/usr/bin/mdgrid \ O3_CS3D=/usr/bin/cs3d # 安装运行时依赖 RUN apt update && apt install -y \ libatlas-base-dev \ liblapacke-dev \ libblas-dev \ openbabel \ gnuplot \ pymol \ bzip2 \ && ln -s /usr/bin/obabel /usr/bin/babel \ && apt clean \ && rm -rf /var/lib/apt/lists/* # 从构建阶段复制构建结果 COPY --from=builder /usr/local/bin /usr/local/bin COPY --from=builder /Open3DQSAR /Open3DQSAR COPY --from=builder /opt/openmpi /opt/openmpi COPY --from=builder /opt/orca /opt/orca # 设置 OpenMPI 和 ORCA 环境变量 ENV PATH="/opt/openmpi/bin:/opt/orca:$PATH" \ LD_LIBRARY_PATH="/opt/openmpi/lib:/opt/orca:$LD_LIBRARY_PATH" # 进入测试目录并运行测试脚本 WORKDIR /Open3DQSAR/open3dqsar/test RUN ./test.sh > test.log 2>&1 & # 设置容器启动时的默认命令(保持容器运行) ENTRYPOINT ["tail", "-f", "/dev/null"]