仮想化技術#

仮想マシン#

仮想マシン(virtual machines: VMs) は、コンピュータ自体の抽象化(OSを含む抽象化)を行う

ホストマシンとは切り離した形でゲストOS(仮想環境のOS)を動かす。

コンテナ仮想化#

プロセスの抽象化を行う。

ホストマシンのLinux カーネルをゲストOSと共用し、ゲストOSで必要な部分だけ別途使用する。

ボトルネックが少なく、軽量で速い。

出所:入門 Docker

コンテナで使用される技術#

Linuxの機能を用いている

  • cgroup:メモリ・CPUのような計算リソースを隔離する機能

  • namespace:プロセスやネットワーク、ファイルアクセスなどの隔離を行う機能

  • Capability:ホストOSのrootユーザーの機能を制限し、コンテナごとの権限管理を行う

Open Container Initiative#

コンテナイメージの技術の標準化をする団体。Image Format SpecificationとRuntime Specificationを策定している。

OCI Image Format Specification#

例えばmanifest.jsonというイメージの概要を示すjsonなどを含むっぽい

Dockerとは若干異なるフォーマットだが、skopeoという変換ツールも存在する。

Docker ImageのOCI Imageへの変換などについては OCI Image Format Specification v1.0.1を読んで | うなすけとあれこれ がたいへんわかりやすい

Docker#

コンテナ仮想化の主要なツール

入門系資料

Firecracker#

Firecracker

コンテナイメージをもとに仮想環境を立ち上げる microVMs

AWSが中心的に開発しているOSSで、AWS LambdaやAWS Fargateなどで使われている

WebAssembly (WASI)#

WASMは実行環境を選ばないバイトコードベースの仮想マシン。 Javascript以外の言語で書かれたプログラムをブラウザ上でセキュアに実行するために作られた。

ブラウザ上だけでなく、単純に仮想マシンとしての活用も検討されている。こちらはWebAssembly System Interface (WASI) というもの。

  • WASMは起動が高速でサーバレス環境に向いている

  • サンドボックスとして、信頼できないコードを安全に動かせる

  • 仮想環境として、Dockerよりもシンプル

    • DockerはlibcやopensslなどLinuxのライブラリが含まれていてそれらのライブラリの脆弱性も気にしないといけない

    • DockerはLinuxと同様にユーザ管理ができるが、ユースケースによっては不要な機能