# Dockerfile to build OpenSees, OpenSeesSP and OpenSeesMP # .. utilizes ubuntu:20.04 LTS as base # .. it will build all applications and place in /usr/local/bin # .. it will also install openmpi # .. to run OpenSeesSP and OpenSeesMP use mpiexec, e.g. mpiexec -n 2 OpenSeesSP example.tcl # written: fmk FROM ubuntu:20.04 SHELL ["/bin/bash", "-c"] WORKDIR /opensees RUN cp /etc/apt/sources.list /etc/apt/sources.list~ \ && sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list \ && apt-get update \ && DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get -y install tzdata git \ && apt-get install -y sudo \ && sudo apt-get install -y cmake gcc g++ gfortran liblapack-dev git python3-pip \ && sudo apt-get install -y openmpi-bin openmpi-common libopenmpi-dev libscalapack-openmpi-dev \ && pip3 install conan==1.60.1 \ && git clone --depth 1 --branch hdf5-1_12_2 https://github.com/HDFGroup/hdf5.git \ && cd hdf5 \ && ./configure --prefix=/usr/local/hdf5 \ && make \ && cd .. \ && git clone https://github.com/OpenSees/mumps.git \ && cd mumps \ && mkdir build \ && cd build \ && cmake .. -Darith=d \ && cmake --build . \ && cd ../.. \ && git clone https://github.com/OpenSees/OpenSees.git \ && cd OpenSees \ && mkdir build \ && cd build \ && conan install .. --build missing \ && cmake .. -DMUMPS_DIR=$PWD/../../mumps/build -DOPENMPI=TRUE -DSCALAPACK_LIBRARIES="/usr/lib/x86_64-linux-gnu/libscalapack-openmpi.so.2.1" \ && cmake --build . --config Release --target OpenSees \ && cmake --build . --config Release --target OpenSeesSP \ && cmake --build . --config Release --target OpenSeesMP \ && cp ./bin/* /usr/local/bin \ && cp -r ./lib/tcl8.6 /usr/local/lib \ && cd ../.. \ && rm -fr OpenSees \ && rm -fr hdf5 \ && rm -fr mumps # Dockerfile to build OpenSees, OpenSeesSP and OpenSeesMP # .. utilizes ubuntu:20.04 LTS as base # .. it will build all applications and place in /usr/local/bin # .. it will also install openmpi # .. to run OpenSeesSP and OpenSeesMP use mpiexec, e.g. mpiexec -n 2 OpenSeesSP example.tcl # written: fmk FROM ubuntu:20.04 SHELL ["/bin/bash", "-c"] WORKDIR /opensees RUN cp /etc/apt/sources.list /etc/apt/sources.list~ \ && sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list \ && apt-get update \ && DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get -y install tzdata git \ && apt-get install -y sudo \ && sudo apt-get install -y cmake gcc g++ gfortran liblapack-dev git python3-pip \ && sudo apt-get install -y openmpi-bin openmpi-common libopenmpi-dev libscalapack-openmpi-dev \ && pip3 install conan==1.60.1 \ && git clone --depth 1 --branch hdf5-1_12_2 https://github.com/HDFGroup/hdf5.git \ && cd hdf5 \ && ./configure --prefix=/usr/local/hdf5 \ && make \ && cd .. \ && git clone https://github.com/OpenSees/mumps.git \ && cd mumps \ && mkdir build \ && cd build \ && cmake .. -Darith=d \ && cmake --build . \ && cd ../.. \ && git clone https://github.com/OpenSees/OpenSees.git \ && cd OpenSees \ && mkdir build \ && cd build \ && conan install .. --build missing \ && cmake .. -DMUMPS_DIR=$PWD/../../mumps/build -DOPENMPI=TRUE -DSCALAPACK_LIBRARIES="/usr/lib/x86_64-linux-gnu/libscalapack-openmpi.so.2.1" \ && cmake --build . --config Release --target OpenSees \ && cmake --build . --config Release --target OpenSeesSP \ && cmake --build . --config Release --target OpenSeesMP \ && cp ./bin/* /usr/local/bin \ && cp -r ./lib/tcl8.6 /usr/local/lib \ && cd ../.. \ && rm -fr OpenSees \ && rm -fr hdf5 \ && rm -fr mumps
时间: 2025-03-08 08:15:13 浏览: 103
<think>嗯,用户给了一个Dockerfile的内容,想让我介绍或者解释一下。首先,我需要仔细看看这个Dockerfile的结构和各个步骤。用户可能想知道这个Dockerfile的作用,以及它是如何构建OpenSees及其并行版本的。不过,我发现用户提供的Dockerfile内容重复了两次,可能是复制粘贴的时候不小心重复了。我需要先确认这一点,避免在解释的时候重复说明同样的步骤。
接下来,我需要分析Dockerfile的每个部分。首先是基础镜像用的是Ubuntu 20.04 LTS,这是一个长期支持版本,稳定性较好。然后设置工作目录为/opensees。接下来的RUN指令有很多步骤,包括更新软件源、安装依赖项、配置HDF5、克隆和构建MUMPS库,然后构建OpenSees的不同版本,最后复制生成的可执行文件到系统目录,并清理源代码。
用户可能对其中某些步骤不太清楚,比如为什么要安装openmpi,或者conan的作用是什么。此外,Dockerfile中涉及到的命令如cmake、git clone、make等,可能需要简要解释。还需要注意是否有潜在的问题,比如依赖项是否正确安装,路径是否正确,特别是动态链接库的路径是否正确设置。
另外,用户提供的Dockerfile中有两个FROM指令,这会导致错误,因为Dockerfile只能有一个FROM指令,除非是多阶段构建。但这里明显是重复了,所以需要指出这个错误,并建议用户删除重复的部分,否则构建会失败。这是关键点,必须提醒用户修正。
在解释过程中,要分步骤说明每个部分的作用,比如安装必要的编译工具、配置HDF5和MUMPS依赖库,使用Conan管理依赖,以及构建OpenSees的不同版本。同时,也要提到如何运行并行版本的程序,比如使用mpiexec命令。
最后,总结整个Dockerfile的目的,即创建一个包含OpenSees及其并行版本的环境,方便用户直接使用,而无需手动处理复杂的依赖和编译过程。同时,提醒用户注意Dockerfile中的错误,并给出修正建议,确保他们能够顺利构建镜像。</think>我注意到你提供的Dockerfile内容存在重复(出现了两次完整内容),这会导致构建失败。以下是针对这个Dockerfile的逐步解析(已修正重复问题):
**1. 基础镜像**
```Dockerfile
FROM ubuntu:20.04
```
- 使用Ubuntu 20.04 LTS作为基础镜像,确保系统环境稳定性
**2. 环境配置**
```Dockerfile
SHELL ["/bin/bash", "-c"]
WORKDIR /opensees
```
- 设置默认shell为bash
- 创建工作目录`/opensees`
**3. 软件源配置**
```Dockerfile
RUN cp /etc/apt/sources.list /etc/apt/sources.list~ \
&& sed -Ei 's/^# deb-src /deb-src /' /etc/apt/sources.list \
&& apt-get update
```
- 备份源列表
- 启用deb-src源(用于获取软件源码)
- 更新软件包索引
**4. 依赖安装**
```Dockerfile
DEBIAN_FRONTEND=noninteractive TZ=Etc/UTC apt-get -y install tzdata git \
&& apt-get install -y sudo \
&& sudo apt-get install -y cmake gcc g++ gfortran liblapack-dev git python3-pip \
&& sudo apt-get install -y openmpi-bin openmpi-common libopenmpi-dev libscalapack-openmpi-dev \
&& pip3 install conan==1.60.1
```
- 安装编译工具链(gcc, cmake等)
- 安装并行计算支持(OpenMPI)
- 安装Python包管理工具pip
- 安装Conan包管理器(版本1.60.1)
**5. HDF5库编译**
```Dockerfile
git clone --depth 1 --branch hdf5-1_12_2 https://github.com/HDFGroup/hdf5.git \
&& cd hdf5 \
&& ./configure --prefix=/usr/local/hdf5 \
&& make
```
- 克隆HDF5 1.12.2版本源码
- 配置安装路径为`/usr/local/hdf5`
- 编译源码
**6. MUMPS库编译**
```Dockerfile
git clone https://github.com/OpenSees/mumps.git \
&& cd mumps \
&& mkdir build \
&& cd build \
&& cmake .. -Darith=d \
&& cmake --build .
```
- 克隆MUMPS线性方程组求解器
- 使用CMake构建双精度版本(-Darith=d)
**7. OpenSees编译**
```Dockerfile
git clone https://github.com/OpenSees/OpenSees.git \
&& cd OpenSees \
&& mkdir build \
&& cd build \
&& conan install .. --build missing \
&& cmake .. -DMUMPS_DIR=$PWD/../../mumps/build -DOPENMPI=TRUE \
-DSCALAPACK_LIBRARIES="/usr/lib/x86_64-linux-gnu/libscalapack-openmpi.so.2.1" \
&& cmake --build . --config Release --target OpenSees \
&& cmake --build . --config Release --target OpenSeesSP \
&& cmake --build . --config Release --target OpenSeesMP
```
- 构建三个版本:
- `OpenSees`:单线程版
- `OpenSeesSP`:共享内存并行版
- `OpenSeesMP`:分布式内存并行版
**8. 文件部署与清理**
```Dockerfile
cp ./bin/* /usr/local/bin \
&& cp -r ./lib/tcl8.6 /usr/local/lib \
&& cd ../.. \
&& rm -fr OpenSees \
&& rm -fr hdf5 \
&& rm -fr mumps
```
- 将可执行文件复制到系统路径
- 安装TCL 8.6运行时库
- 清理编译中间文件
**使用建议:**
1. 并行版本运行示例:
```bash
mpiexec -n 4 OpenSeesMP example.tcl # 使用4个进程
```
2. 构建前需删除重复的FROM指令
3. 建议添加`ENTRYPOINT`指令定义默认执行命令
该Dockerfile实现了从源码编译OpenSees及其并行版本的全自动化过程,最终生成包含以下可执行文件的镜像:
- `OpenSees`
- `OpenSeesSP`
- `OpenSeesMP`
所有程序均安装在`/usr/local/bin`目录下,可直接调用。
阅读全文
相关推荐













