container_for_clm5/Dockerfile
2025-01-12 19:01:19 +08:00

126 lines
4.0 KiB
Docker

FROM ubuntu:22.04
## CLM5.0
MAINTAINER "SHUD"
WORKDIR /model
ENV DEBIAN_FRONTEND=noninteractive
ENV VERSION_CODENAME=jammy
RUN rm /etc/apt/sources.list \
&& echo "deb [trusted=yes] https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ${VERSION_CODENAME} main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb [trusted=yes] https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ${VERSION_CODENAME}-updates main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb [trusted=yes] https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ${VERSION_CODENAME}-backports main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo "deb [trusted=yes] https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ ${VERSION_CODENAME}-security main restricted universe multiverse" >> /etc/apt/sources.list \
&& echo 'Acquire::https { Verify-Peer "false"; Verify-Host "false"; }' >> /etc/apt/apt.conf.d/tuna.conf
# && echo "deb https://cloud.r-project.org/bin/linux/ubuntu cosmic-cran35/" >> /etc/apt/sources.list
RUN apt-get update \
&& apt install -y --no-install-recommends --assume-yes \
ca-certificates \
dejagnu \
sudo libtool \
vim git git-lfs subversion gfortran cmake \
libxml2-utils libxml-libxml-perl \
python3 python3-dev python3-venv python3-pip \
make m4 \
libcurl4-openssl-dev liblapack-dev libblas-dev mpich libmpich-dev \
gnupg wget curl \
&& apt-get clean
RUN python3 -m venv /venv
ENV PATH="/venv/bin:${PATH}"
ADD pkgs/*.gz /usr/local/src/
ARG ZDIR=/usr/local/zlib
RUN cd /usr/local/src/zlib-1.2.11 \
&& CC=mpicc ./configure --prefix=${ZDIR} \
&& make \
# && make check \
&& make install \
&& rm -rf /usr/local/src/zlib-1.2.11
ENV CC=mpicc \
CXX=mpicxx \
FC=mpif90 \
F77=mpif90
ARG PNDIR=/usr/local/pnetcdf
RUN cd /usr/local/src/pnetcdf-1.11.0 \
&& FC=mpif90 MPICC=mpicc CFLAGS="-fPIC -g -O2" \
./configure --prefix=${PNDIR} --enable-shared --enable-profiling\
&& make \
# && make tests \
# && make check \
# && make ptests \
&& make install \
&& rm -rf /usr/local/src/pnetcdf-1.11.0
# Parallel OpenMPI-HDF5-NetCDF stack
# https://gist.github.com/milancurcic/3a6c1a97a99d291f88cc61dae6621bdf
ARG H5DIR=/usr/local/hdf5
RUN cd /usr/local/src/hdf5-1.10.4 \
&& CC=mpicc FC=mpif90 CFLAGS="-fPIC -w" ./configure --prefix=${H5DIR} \
--with-zlib=${ZDIR} --enable-parallel --enable-hl \
&& make \
# && make check \
&& make install \
&& rm -rf /usr/local/src/hdf5-1.10.4
#--enable-shared --enable-fortran
ARG NCDIR=/usr/local/netcdf4
RUN cd /usr/local/src/netcdf-c-4.6.2 \
&& CC=mpicc CPPFLAGS="-I${PNDIR}/include -I${H5DIR}/include -I${ZDIR}/include" \
LDFLAGS="-L${PNDIR}/lib -L${H5DIR}/lib -L${ZDIR}/lib" \
./configure --prefix=${NCDIR} --enable-parallel-tests \
&& make \
# && make check \
&& make install \
&& rm -rf /usr/local/src/netcdf-c-4.6.2
ARG NFDIR=/usr/local/netcdff4
RUN cd /usr/local/src/netcdf-fortran-4.4.5 \
&& CPPFLAGS=-I${NCDIR}/include LDFLAGS=-L${NCDIR}/lib \
./configure --prefix=${NFDIR} \
&& make \
# && make check \
&& make install \
&& rm -rf /usr/local/src/netcdf-fortran-4.4.5
RUN echo ${NCDIR}/lib > /etc/ld.so.conf.d/netcdf.conf \
&& echo ${NFDIR}/lib >> /etc/ld.so.conf.d/netcdf.conf \
&& echo ${ZDIR}/lib >> /etc/ld.so.conf.d/netcdf.conf \
&& echo ${H5DIR}/lib >> /etc/ld.so.conf.d/netcdf.conf \
&& echo ${PNDIR}/lib >> /etc/ld.so.conf.d/netcdf.conf \
&& ldconfig
ENV USER=clm
RUN useradd -m -G adm,sudo -s /bin/bash $USER \
&& echo "root:root" | chpasswd \
&& echo "clm:clm" | chpasswd
RUN git clone -b release-clm5.0 https://github.com/ESCOMP/CTSM.git ctsm \
&& cd ctsm && ./manage_externals/checkout_externals \
&& chown -R clm:clm /model/ctsm \
&& cd ..
VOLUME ["/inputdata"]
ENV PATH="/model/ctsm/cime/scripts:${NCDIR}/bin:${PATH}" \
LANG=C.UTF-8
COPY config/*.xml /home/${USER}/.cime/
COPY config /home/${USER}/cesm/config
COPY run_CLM50_example01.sh /home/${USER}/cesm/
WORKDIR /home/${USER}/cesm
RUN chown -R clm:clm /home /home/${USER} /home/${USER}/.cime \
&& chmod 755 -R /inputdata /home/${USER}/.cime /home/${USER}
USER ${USER}
CMD bash