# Stage 1: Build environment ARG TAG_VERSION ARG BASE FROM ${BASE}:${TAG_VERSION} AS build-env ENV CUDA_HOME=/usr/local/cuda ENV PATH=$CUDA_HOME/bin:$PATH ENV LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH ENV CPATH=$CUDA_HOME/include:$CPATH ENV LIBRARY_PATH=$CUDA_HOME/lib64:$LIBRARY_PATH ARG HTTP_PROXY ARG HTTPS_PROXY ENV http_proxy=${HTTP_PROXY} ENV https_proxy=${HTTPS_PROXY} ARG DEBIAN_FRONTEND="noninteractive" ENV DEBIAN_FRONTEND=${DEBIAN_FRONTEND} ARG ROOT_PASSWD="root" ENV ROOT_PASSWD=${ROOT_PASSWD} ENV SSH_PORT=2222 WORKDIR /root SHELL ["/bin/bash", "-c"] # Install base tools for compilation RUN < ~/.ssh/config cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/' /etc/ssh/sshd_config sed -i 's/^\(\s*\)GSSAPIAuthentication yes/\1GSSAPIAuthentication no/' /etc/ssh/ssh_config sed -i "s/^#Port 22/Port ${SSH_PORT}/" /etc/ssh/sshd_config ssh-keygen -t rsa -b 4096 -f /root/.ssh/id_rsa -N "" <<< y cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys chmod 600 /root/.ssh/authorized_keys mkdir /var/run/sshd echo "root:${ROOT_PASSWD}" | chpasswd EOT # Install FFTW ARG FFTW_VERSION="3.3.10" ENV FFTW_VERSION=${FFTW_VERSION} ENV PATH=/usr/local/fftw:$PATH RUN <> /root/.bashrc EOT # Install Boost COPY file/boost_1_86_0.tar.gz /root ENV MODULEPATH=/opt/modulefiles/boost:$MODULEPATH RUN <> project-config.jam ./b2 -j$(nproc) --layout=tagged link=static,shared threading=multi install mkdir -p /opt/modulefiles/boost cat << EOF > /opt/modulefiles/boost/1.86.0-openmpi-5.1.0a1 #%Module1.0 set prefix /opt/boost prepend-path LD_LIBRARY_PATH \$prefix/lib prepend-path CPATH \$prefix/include prepend-path LIBRARY_PATH \$prefix/lib prepend-path PATH \$prefix/bin EOF EOT # Install Intel HPCKit and oneMKL COPY file/l_HPCKit_p_2024.2.1.79_offline.sh file/l_onemkl_p_2024.2.2.17_offline.sh /root RUN <> ~/.bashrc echo "source /opt/onemkl/setvars.sh" >> ~/.bashrc rm -rf l_HPCKit_p_2024.2.1.79_offline.sh apt-get clean rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* rm -rf /root/modules-5.4.0 /root/fftw-${FFTW_VERSION} /root/ucx /root/ompi /root/plumed-${PLUMED_VERSION} /root/gromacs-${GROMACS_VERSION} rm -rf /root/Amber24.tar.bz2 /root/AmberTools24.tar.bz2 /root/boost_1_86_0.tar.gz EOT # # Stage 2: Runtime image FROM ${BASE}:${TAG_VERSION} ARG SSH_PORT ENV SSH_PORT=${SSH_PORT} ARG GROMACS_VERSION ARG PLUMED_VERSION # 复制必要的软件和配置 COPY --from=build-env /usr/local/fftw /usr/local/fftw COPY --from=build-env /usr/local/ucx /usr/local/ucx COPY --from=build-env /usr/local/openmpi /usr/local/openmpi COPY --from=build-env /usr/local/plumed /usr/local/plumed COPY --from=build-env /usr/local/gromacs-${GROMACS_VERSION}-plumed-${PLUMED_VERSION} /usr/local/gromacs-${GROMACS_VERSION}-plumed-${PLUMED_VERSION} COPY --from=build-env /opt/boost /opt/boost COPY --from=build-env /opt/intel /opt/intel COPY --from=build-env /root/.ssh /root/.ssh COPY --from=build-env /opt/modulefiles /opt/modulefiles COPY --from=build-env /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu # Set environment variables ENV CUDA_HOME=/usr/local/cuda ENV PATH=/usr/local/gromacs-${GROMACS_VERSION}-plumed-${PLUMED_VERSION}/bin:/usr/local/openmpi/bin:/opt/intel/bin:/opt/onemkl/bin:/usr/local/ucx/bin:/usr/local/plumed/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ENV LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/openmpi/lib:/opt/boost/lib:/opt/intel/lib:/opt/onemkl/lib:/usr/local/ucx/lib:/usr/local/plumed/lib:/usr/lib/x86_64-linux-gnu ENV CPATH=/usr/local/cuda/include:/usr/local/openmpi/include:/opt/boost/include:/opt/intel/include:/opt/onemkl/include:/usr/local/ucx/include:/usr/local/plumed/include ENV LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/openmpi/lib:/opt/boost/lib:/opt/intel/lib:/opt/onemkl/lib:/usr/local/ucx/lib:/usr/local/plumed/lib ENV MODULEPATH=/opt/modulefiles/boost:$MODULEPATH # Set working directory WORKDIR /root RUN <