仮想化技術#
仮想マシン#
仮想マシン(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#
コンテナイメージをもとに仮想環境を立ち上げる microVMs
AWSが中心的に開発しているOSSで、AWS LambdaやAWS Fargateなどで使われている
WebAssembly (WASI)#
WASMは実行環境を選ばないバイトコードベースの仮想マシン。 Javascript以外の言語で書かれたプログラムをブラウザ上でセキュアに実行するために作られた。
ブラウザ上だけでなく、単純に仮想マシンとしての活用も検討されている。こちらはWebAssembly System Interface (WASI) というもの。
WASMは起動が高速でサーバレス環境に向いている
サンドボックスとして、信頼できないコードを安全に動かせる
仮想環境として、Dockerよりもシンプル
DockerはlibcやopensslなどLinuxのライブラリが含まれていてそれらのライブラリの脆弱性も気にしないといけない
DockerはLinuxと同様にユーザ管理ができるが、ユースケースによっては不要な機能