Docker による Windows における OpenFOAM 利用環境の整備2015年10月29日 | |
はじめにDocker を使って Windows 上で OpenFOAM 利用環境を整備する方法について。 バージョン
ファイル
DockerDocker とは、コンテナ型仮想化技術の一つであり、VirtualBox のような仮想化に比べて動作が軽いのが特徴である。公式の Windows 版 OpenFOAM に用いられている。 Docker は、Linux のコンテナ技術を用いており、コンテナ型仮想化はホスト OS とゲスト OS のカーネルが共通である。したがってこれは Linux 上で Linux を仮想化するものである。Windows では、Docker Toolbox (旧 boot2docker) というもので Docker を利用できるが、これは VirtualBox で仮想化された Linux 仮想マシンにより実現されている。 OpenFOAM は Linux で動くし、Linux で動くものは Linux で動かしたほうがメンテは楽だし、Windows で Docker を動かせるようだし、同じ仮想化でも VirtualBox より Docker のほうが動作は速そうだし…ということで、公式では Docker による Windows 版の提供という判断になったのだろう。 Docker って?コンテナって?「コンテナ」と呼ばれる Linux 環境の入った仮想的な「箱」を実行すると思えばよろしい。Docker はその「箱」を管理するの。 OpenFOAM for WindowsOpenCFD 版 OpenFOAM for Windows は、現状では boot2docker ベースである。また、ソルバーのコンパイルには今のところ対応していないようだし (2016年3月8日追記: 最新版は対応している模様)、paraFoam も使えない。 いろいろ不満はあるのだが、同様の環境を自分で作れそうな気がしたので、やってみた。 基本情報ここで整備した環境についての基本情報は、以下の通りである。
注意: わたしの趣味に合った環境になっているので、気に入らなければ自分でなんとかすること。 セットアップ手順
$ ./build_image"docker images" と打って、"ubuntu-openfoam" という文字があれば OK。 $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu-openfoam latest 6bf11c9b8e1e 22 hours ago 3.047 GB ubuntu 14.04 0a17decee413 2 weeks ago 188.4 MB 作業環境の準備作業環境としては、SSH クライアントと X サーバーが必要である。以下の選択肢がある。
SSH クライアント + X サーバーSSH クライアントは (設定方法がわかるなら) なんでもよい。ただし、X を使うなら X11 Forwarding と DISPLAY 変数の設定が必要。よくわからなければ、上で用いた "ssh_container" スクリプトを使えばよい。 X サーバーについては、Xming や VcXsrv などがあるが、OpenGL にちゃんと対応していないと ParaView がきちんと動作しない。Xming の Xming-mesa が無難。ここ からダウンロードできる。 Xming の起動は "Xming" のアイコンをクリックすればよい。画面には何も出てこないが、起動していると画面右下の通知領域にアイコンが表示される。それを右クリックして "View Log" を選択すると出てくるログで、DISPLAY 変数の値を確認できる。 winInitMultiWindowWM - DISPLAY=127.0.0.1:0.0 MovaXtermMovaXterm は、X サーバーを内蔵した SSH クライアントである。ParaView も問題なく動く (少し動作がもっさりするけど)。見た目がゴテゴテしくて好みが分かれそうだが、いちいち X サーバーを立てなくてよいので楽である。 SSH の設定は、"Session" アイコンの "SSH" で行う。ユーザー名やアドレス、ポートについては、上の "基本情報" に書かれているものを設定する。鍵は、"Advanced SSH settings" タブの "Use private key" をオンにして、ユーザーフォルダの ".ssh" の中にある "id_rsa" を指定すればよい。 使い方使い方は 2 通りある。
SSH でログインして作業作業環境の準備が済んでいれば、以下のようにふつうに OpenFOAM を実行できるはずである。 $ ssh_container ... cfd $ cp -r $FOAM_TUTORIALS/incompressible/simpleFoam/pitzDaily . cfd $ cd pitzDaily cfd $ blockMesh cfd $ simpleFoam > log cfd $ paraFoam コンパイルもできる。 cfd $ cp -r $FOAM_SOLVERS/incompressible/simpleFoam . cfd $ cd simpleFoam cfd $ vi Make/files ... "$(FOAM_APPBIN)" を "$(FOAM_USER_APPBIN)" に修正 ... cfd $ wmake ... cfd $ which simpleFoam /home/cfd/user/work/OpenFOAM/cfd-2.4.0/platforms/linux64ClangDPOpt/bin/simpleFoam バイナリが "work" の中に (つまり Windows 側に) 作成されていることに注意。 Windows からコマンドを実行して作業見かけ上、コンテナにログインせずに Windows 上で作業することもできなくはない。そのために "ssh_exec" というスクリプトを用意している。以下はすべて Windows 上のコマンドライン。 $ cd ~/work $ ssh_exec cp -r '$FOAM_TUTORIALS'/incompressible/simpleFoam/pitzDaily . $ cd pitzDaily $ ssh_exec blockMesh $ ssh_exec simpleFoam > log $ ssh_exec paraFoam けっして使いやすくはないが、まあ一応できるということで。 アイコンの作成作業開始時にいちいちコマンドを打つのも面倒なので、"Docker Quickstart Terminal" をもとに起動アイコンを作ってみる。 "Docker Quickstart Terminal" を 2 つコピーして、たとえば "run container"、"terminal" などという名前にする。"run container" のリンク先を "start_docker.sh" に修正し、"terminal" のリンク先を "start_ssh.sh" に修正する。 "start_docker.sh" は、"Docker Quickstart Terminal" が実行している "start.sh" の最後の行を変更したものである。 #exec "$BASH" --login -i docker/run_container "run container" を実行すると、Docker 仮想マシンが起動し、コンテナがなければ作成して実行、コンテナがすでにあればそれを再開する。そのあと、"terminal" を実行すると、コンテナに SSH 接続される。 CPU 数とメモリサイズコンテナの CPU 数とメモリサイズは、Docker 仮想マシンの設定に従う。設定を変えたい場合は、VirtualBox を起動して、仮想マシンをシャットダウンし (メニュー[仮想マシン]-[閉じる]-[ACPI シャットダウン])、[設定] の [システム] で設定を行う。 その他コンテナについてコンテナは、最初の実行で作成され、あとは削除されるまで存在する。コンテナ内部の作業データは、コンテナが存在する限り保持される。 コンテナは Docker 仮想マシンが停止したら当然停止するが、消えるわけではなくて、Docker 仮想マシンが起動したらまた使えるようになる。ただし、仮想マシン起動時はコンテナは停止したままなので、コンテナを使うためには再度実行させる必要がある。 コンテナはコマンドひとつであっさり削除できるため、念のため作業データは Windows 側に置いておくのがよい。 コンテナの再起動SSH の鍵を作り直したときなど、コンテナの再起動が必要な場合は、次のようにする。 $ docker restart cfd-machine コンテナの削除コンテナを初期化したいときは、コンテナを削除すればよい。次のようにする。 $ docker stop cfd-machine $ docker rm cfd-machine コンテナ内の作業データはすべて消えるので、注意して行う。Windows 側にある作業フォルダのデータは影響を受けない。 SSH がつながらなくなった場合イメージの作成を再実行した場合など、SSH がエラーでつながらなくなる場合がある。そのときは、ユーザーフォルダの ".ssh" の中にある "known_hosts" を消せばよい。 SSH の接続ポート番号を変えたい"docker" フォルダの "params" ファイルの中の "PORT" の値を変えればよい。 パスワードを変えたいおおもとを変えるには、Dockerfile の以下の行のコロンのあとの文字列を変えればよい。 RUN echo cfd:cfd | chpasswd ただし、イメージを作り直す必要がある。 コンテナが生きている限りでよければ、ログインして passwd でふつうに変えればよい。 時計がずれるソルバーコンパイル時に時刻がずれている旨の警告が出る場合は、コンテナと Windows の時計がずれている。その場合、コンテナのほうではなくて、Windows のほうの時計を時刻サーバーと同時させる。 | |
| PENGUINITIS | |