仮想化とコンテナ
研究におけるデータ処理は、往々にしてその処理が実行される計算機システムが持つ様々なプログラム・ライブラリに依存しています。仮想化技術やコンテナを用いると計算機システムに依存する環境情報を明示的に記述することが出来るため、データ処理を別の計算機で実行したり、他の人が行った研究を再現する、といったことが容易に実現できます。
仮想化 vs コンテナ
- ハイパーバイザ型(VMware、VirtualBox、KVM など)
- ハードウェアを仮想化し、ゲストOSを独立した仮想マシンとして実行
- OSレベル仮想化(コンテナ)(Docker、Apptainer など)
- ホストOSの根幹部分(カーネル)を共有しつつ、プロセス空間やファイルシステムを分離
- ハイパーバイザ型より軽量で起動も高速なため、開発環境の再現性と共有に適している
Docker
- 最も普及しているOSレベルのコンテナ技術
dockerd
デーモンを介してイメージのビルド・配布・実行を行う
Apptainer (旧 Singularity)
- HPC 環境で多用される非特権ユーザー実行可能なコンテナ技術
- Dockerイメージの活用も可能
Development Containers
- 開発環境を
json
形式の設定ファイルで定義するオープン仕様 - プロジェクト直下の
.devcontainer/
内に、devcontainer.json
等を配置して環境管理 - VS Code、GitHub Codespaces、devcontainer CLIなどで同一定義の環境を起動可能
- 拡張機能、設定、ポートフォワーディング、ボリュームマウント、環境変数などを一括設定可能