ここでは、Docker を用いて DCPAM および Gphys を Mac(M1, 2020)上で動かすための方法を紹介する。
DockerfileまではGphys を動かすの内容と同様のため、割愛する。
ホストマシン上に適当なディレクトリ (~/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 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 を動かすの「ボリュームを作成する」の章や、他のサイトなどを軟膏にしてほしい。
一度停止したコンテナを再び起動する際は、
docker container start [コンテナ名]
をしてから
docker container exec -it [コンテナ名] bash
をすることで先程と同様にコンテナを立ち上げることができる。