Quantum ESPRESSO(QE)7.6をCPUで動かすためのDockerfileを掲載します。QEのソースをビルド用ステージでコンパイルし、実行用ステージには必要な実行ファイルとライブラリだけを残します。Docker Desktop固有の設定は使っていないため、LinuxのDocker環境でも同じDockerfileを出発点にできます。
この構成はWindows 11のwslc 3.0.3.0上でビルド・確認しました。Ubuntu 26.04をベースに、GCC/gfortran、OpenMPI、OpenBLAS、LAPACK、FFTWを使用しています。CPU版で、MPIとOpenMPを有効化し、GPUとScaLAPACKは含めていません。
Dockerfile
空の作業ディレクトリに、次の内容をDockerfileとして保存します。ビルド時にQEのGitHubリポジトリとUbuntuのパッケージリポジトリへ接続します。
FROM ubuntu:26.04 AS builder
ARG QE_VERSION=qe-7.6
ARG BUILD_JOBS=2
ENV DEBIAN_FRONTEND=noninteractive LANG=C.UTF-8
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential gfortran git ca-certificates \
openmpi-bin libopenmpi-dev \
libopenblas-dev liblapack-dev libfftw3-dev \
&& mkdir -p /opt/qe-build-info \
&& dpkg-query -W > /opt/qe-build-info/build-packages.tsv \
&& rm -rf /var/lib/apt/lists/*
RUN git clone --depth 1 --branch "${QE_VERSION}" \
https://github.com/QEF/q-e.git /opt/qe \
&& cd /opt/qe \
&& git submodule update --init --recursive --depth 1 \
&& git rev-parse HEAD > /opt/qe-build-info/commit.txt \
&& git submodule status --recursive > /opt/qe-build-info/submodules.txt \
&& ./configure CC=gcc F90=gfortran MPIF90=mpif90 \
--enable-parallel --enable-openmp --with-scalapack=no \
BLAS_LIBS="-lopenblas" LAPACK_LIBS="-llapack" \
FFTW_INCLUDE=/usr/include FFT_LIBS="-lfftw3_omp -lfftw3" \
&& cp make.inc config.log /opt/qe-build-info/ \
&& make -j"${BUILD_JOBS}" all \
&& test -x /opt/qe/bin/pw.x \
&& mkdir -p /opt/qe-runtime/bin \
&& cp -L /opt/qe/bin/* /opt/qe-runtime/bin/
FROM ubuntu:26.04 AS runtime
ENV DEBIAN_FRONTEND=noninteractive LANG=C.UTF-8
RUN apt-get update && apt-get install -y --no-install-recommends \
openmpi-bin libopenblas0-pthread liblapack3 \
libfftw3-double3 libgfortran5 libgomp1 \
&& mkdir -p /opt/qe-build-info \
&& dpkg-query -W > /opt/qe-build-info/packages.tsv \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /opt/qe-runtime/bin/ /opt/qe/bin/
COPY --from=builder /opt/qe-build-info/ /opt/qe-build-info/
RUN ldd /opt/qe/bin/pw.x > /opt/qe-build-info/pw-libraries.txt \
&& ! grep -q 'not found' /opt/qe-build-info/pw-libraries.txt \
&& test -x /opt/qe/bin/pw.x
LABEL org.opencontainers.image.version="7.6" \
org.opencontainers.image.source="https://github.com/QEF/q-e"
ENV PATH="/opt/qe/bin:${PATH}" OMP_NUM_THREADS=1 OPENBLAS_NUM_THREADS=1
WORKDIR /work
CMD ["/bin/bash"]
ビルドと構成の要点
Dockerを使う場合は、Dockerfileを置いたディレクトリで次を実行します。BUILD_JOBSはビルド時の並列ジョブ数です。
docker build --progress=plain --build-arg BUILD_JOBS=2 -t qe-cpu:7.6-all .
make allはQEのビルドターゲットです。./configureではMPI・OpenMPを有効にし、BLAS/LAPACKにOpenBLASとLAPACK、FFTにFFTWを指定しています。今回の構成ではFFTW_INCLUDEとFFT_LIBSの両方を指定してFFTバックエンドを選択しました。
QEのbinにはシンボリックリンクがあるため、cp -Lでリンク先の実体を実行用ステージへコピーします。最終イメージにはコンパイラー、Git、QEのソースツリーを含めません。取得したコミット、サブモジュール、パッケージ版、make.inc、config.logは/opt/qe-build-info/に残します。
手元のwslc環境での実測サイズは1,544,562,220 bytes(約1.54 GB)でした。
動作確認できた範囲
このDockerfileでmake allは終了コード0でした。生成された84個の実行ファイルは、いずれもlddで不足ライブラリがないことを確認しました。pw.xではSiのSCF計算が終了コード0、JOB DONE.、全エネルギーが妥当な値で終了しています。84プログラムすべての機能テストや、MPI複数プロセスでの実計算は行っていません。
pw.x -in /dev/nullを起動するとProgram PWSCF v.7.6というバナーは見られますが、入力不足で終了コード1となります。
擬ポテンシャルはイメージに入れず、計算時に外部フォルダをマウントします。入力のpseudo_dirにはコンテナー内のLinuxパスを指定します。SCF入力、擬ポテンシャルの取得方法、wslcからの実行コマンドは以下の記事で紹介しています。

コメント