# 导入代码库镜像 视包含的代码库多少编译后的镜像可包含部分至全部GCTL代码库内容 FROM gctl:2.0 AS gctl_library FROM gctl_mesh:2.0 AS gctl_mesh_library FROM gctl_optimization:2.0 AS gctl_optimization_library FROM gctl_ai:2.0 AS gctl_ai_library FROM gctl_potential:2.0 AS gctl_potential_library FROM gctl_seismic:2.0 AS gctl_seismic_library FROM gctl_elecmag:2.0 AS gctl_elecmag_library # 编译平台 FROM ubuntu:20.04 AS builder # 从代码库镜像中复制库文件和头文件 COPY --from=gctl_library /usr/local/lib /usr/local/lib COPY --from=gctl_library /usr/local/include /usr/local/include COPY --from=gctl_mesh_library /usr/local/lib /usr/local/lib COPY --from=gctl_mesh_library /usr/local/include /usr/local/include COPY --from=gctl_optimization_library /usr/local/lib /usr/local/lib COPY --from=gctl_optimization_library /usr/local/include /usr/local/include COPY --from=gctl_ai_library /usr/local/lib /usr/local/lib COPY --from=gctl_ai_library /usr/local/include /usr/local/include COPY --from=gctl_potential_library /usr/local/lib /usr/local/lib COPY --from=gctl_potential_library /usr/local/include /usr/local/include COPY --from=gctl_seismic_library /usr/local/lib /usr/local/lib COPY --from=gctl_seismic_library /usr/local/include /usr/local/include COPY --from=gctl_elecmag_library /usr/local/lib /usr/local/lib COPY --from=gctl_elecmag_library /usr/local/include /usr/local/include # 安装编译工具 RUN apt-get update && apt-get install -y g++ make cmake # 安装依赖库 RUN apt-get install -y --no-install-recommends libfftw3-dev libnetcdf-dev gmt libgmt-dev libgsl-dev libncurses-dev RUN apt-get install -y --no-install-recommends libopenblas-dev libeigen3-dev RUN apt-get install -y pkg-config RUN apt-get install -y autoconf automake # 创建工作目录 WORKDIR /app # 编译依赖库 COPY dep/editline-1.17.1 /app/dep/editline RUN cd /app/dep/editline && ./configure --prefix=/usr/local && make && make install # 拷贝源代码 COPY addnoise /app/addnoise COPY cutprofile /app/cutprofile COPY fractopo /app/fractopo COPY gm3d /app/gm3d COPY gmsh2vtk /app/gmsh2vtk COPY gmshinfo /app/gmshinfo COPY grd2xyz /app/grd2xyz COPY handyman /app/handyman COPY nc2other /app/nc2other COPY ncget /app/ncget COPY ncinfo /app/ncinfo COPY shc2xyz /app/shc2xyz COPY sph2plane /app/sph2plane COPY tetgen2gmsh /app/tetgen2gmsh COPY trackline /app/trackline COPY triangle2gmsh /app/triangle2gmsh COPY txtinfo /app/txtinfo COPY xyz2nc /app/xyz2nc COPY xyz2sph /app/xyz2sph COPY 2minfo /app/2minfo COPY slbsi /app/slbsi COPY lbsi /app/lbsi COPY lki /app/lki COPY levy_planner /app/levy_planner COPY tetgm /app/tetgm COPY dsviewer /app/dsviewer COPY gridmanager /app/gridmanager COPY gridmanager-potential /app/gridmanager-potential COPY CMakeLists.txt . COPY config.h.in . # 编译gctl动态库 RUN mkdir build && cd build && cmake .. && make && make install # 运行平台 FROM ubuntu:20.04 # 设置非交互式安装 ENV DEBIAN_FRONTEND=noninteractive # 安装运行时必要依赖 RUN apt-get update && apt-get install -y g++ make cmake RUN apt-get install -y --no-install-recommends libfftw3-dev libnetcdf-dev gmt libgmt-dev libgsl-dev libncurses-dev RUN apt-get install -y --no-install-recommends libopenblas-dev libeigen3-dev RUN apt-get install -y gnuplot RUN apt-get install -y pkg-config RUN apt-get install -y autoconf automake RUN apt-get install -y ghostscript # 从构建阶段复制编译后的库和头文件 COPY --from=builder /usr/local/lib /usr/local/lib COPY --from=builder /usr/local/include /usr/local/include COPY --from=builder /usr/local/sbin /usr/local/sbin # 设置可执行文件列表 ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib ENV PATH=$PATH:/usr/local/sbin