Docker で DCPAM を動かす

はじめに

ここでは、Docker を用いて DCPAM および Gphys を Mac(M1, 2020)上で動かすための方法を紹介する。

DockerfileまではGphys を動かすの内容と同様のため、割愛する。

使用環境

Dockerfile からイメージを作成する

ホストマシン上に適当なディレクトリ (~/dcpam など) を用意し、 Debian に DCPAM の実行+描画環境をインストールするためのコードを書いた、 以下の内容の Dockerfile を配置する。

                
                    FROM debian:bookworm

                    RUN apt-get update && apt-get upgrade -y && apt-get install -y debian-keyring ca-certificates wget netcdf-bin

                    # 公開鍵署名 ~ spml gphys のインストール
                    RUN echo 'deb http://www.gfd-dennou.org/library/cc-env/Linux/debian-dennou bookworm main \n\
                    deb-src http://www.gfd-dennou.org/library/cc-env/Linux/debian-dennou bookworm main \n ' >>/etc/apt/sources.list \
                    && gpg --keyring /usr/share/keyrings/debian-maintainers.gpg --export -a 891D7E07 | tee /etc/apt/trusted.gpg.d/debian-dennou.asc \
                    && apt-get update \
                    && apt-get install -y spml gphys \
                    && rm -rf /var/lib/apt/lists/*

                    # DCPAM ソースコードのダウンロード
                    RUN wget -P /dcpam https://www.gfd-dennou.org/library/dcpam/dcpam5/dcpam5-20180304-2.tgz \
                    && tar zxvf /dcpam/dcpam5-20180304-2.tgz -C /dcpam

                    # DCPAM のビルド (2024年 情報実験 第11回 実技資料 1. DCPAM5 を走らせよう に準拠)
                    ARG FC=spmfrt
                    RUN ./configure \
                    --with-netcdf=/usr/lib/x86_64-linux-gnu/libnetcdf.so \
                    --with-netcdff=/usr/lib/x86_64-linux-gnu/libnetcdff.a \
                    --with-netcdf-include=/usr/include \
                    --with-ispack=/usr/lib/x86_64-linux-gnu/libispack.a \
                    --with-gtool5=/usr/lib/x86_64-linux-gnu/gtool5/lib/libgtool5.a \
                    --with-spml=/usr/lib/x86_64-linux-gnu/spml/lib/libspml-lapack-lapack.a

                    # gphys irb 初期設定
                    RUN wget -P ~/ https://ruby.gfd-dennou.org//products/gphys/tutorial2/irbrc_ggraph.rb \
                    && echo 'require "~/irbrc_ggraph.rb"' > ~/.irbrc
                
            

それが完了したら、以下のコマンドで Docker イメージを作成する。

                
                    docker image build \
                    --platform linux/amd64 \
                    --tag dcpam:1 \
                    -f ~/dcpam/Dockerfile ~/dcpam
                
            

以上の作業をもって、DCPAM の実行環境および Gphys がインストールされた x86_64用 Debian のイメージが dcpam:1 という名前で保存される。 成功したかどうか気になる場合は、docker image ls コマンドによって確認することができる。

Dockerコンテナを作成・起動する

先ほど作成したイメージから、コンテナを立ち上げるには、以下のコマンドを使用する。

                
                    docker container run \
                    -it \
                    --env DISPLAY="host.docker.internal:0.0" \
                    --name dcpam_work \
                    dcpam:1
                
            

これにより dcpam_work という名前のコンテナが立ち上がり、カレントシェルでコンテナのシェル(bash)が立ち上がる。

注意docker container runコマンドはコンテナの初回起動時のみ使用する。 2回目以降は下記。

コンテナの停止・削除

コンテナを停止するときは、ログアウトする時と同様にexitしてコンテナ内のbashを終了すればいい。 起動時に --rm オプションを用いていた場合、 コンテナ停止と同時にコンテナは削除される。 これを使用しなかった場合は、 exit でコンテナは停止するが削除はされないので、 docker container rm [コンテナ名] で削除する必要がある。

もしコンテナを削除をしてしまった場合、基本的には コンテナ内の作業内容は元に戻らないので、くれぐれも注意してほしい。 これの回避策として、ボリュームマウントやバインドマウントを使用する方法があるので、 Gphys を動かすの「ボリュームを作成する」の章や、他のサイトなどを軟膏にしてほしい。

コンテナの起動(2回目以降)

一度停止したコンテナを再び起動する際は、 docker container start [コンテナ名] をしてから docker container exec -it [コンテナ名] bash をすることで先程と同様にコンテナを立ち上げることができる。

参考資料