仮想化とコンテナ
🐱 この章の目次
ハードウェア仮想化
ハードウェア仮想化(hardware virtualization) は、ハイパーバイザが物理マシン上に複数の仮想マシン(VM)を作り出す技術です。 各 VM は独自のカーネルを持ち、完全に隔離された環境として動作します。 『インフラ大全』第 9 章では、Type 1(ベアメタル型)と Type 2(ホスト型)の 2 種類のハイパーバイザが解説されています。
OS レベル仮想化(コンテナ)
コンテナ(container) は、ホスト OS のカーネルを共有しながら、namespaces と cgroups でプロセスを隔離する仕組みです。 VM と比較して起動が高速で、イメージサイズも小さくなります。 『詳解システムパフォーマンス』第 11 章では、コンテナのオーバーヘッドが VM よりも小さい理由をカーネル共有の観点から説明しています。
VM とコンテナの使い分け
| 観点 | VM | コンテナ |
|---|---|---|
| 隔離レベル | カーネルレベル | プロセスレベル |
| 起動時間 | 数十秒〜数分 | 数秒以下 |
| リソース効率 | 低い(カーネル重複) | 高い |
| セキュリティ境界 | 強い | ホストカーネル共有 |
| ユースケース | マルチテナント、レガシー OS | マイクロサービス、CI/CD |
セキュリティ境界が厳格に必要な場合は VM を、デプロイ速度と密度を優先する場合はコンテナを選択します。
OCI イメージフォーマット
OCI(Open Container Initiative) は、コンテナイメージとランタイムの標準仕様を定める団体です。 OCI イメージはレイヤー構造を持ち、各レイヤーはファイルシステムの差分として保存されます。 Docker、Podman、containerd など複数のランタイムが OCI 仕様に準拠しています。
Docker の基本操作(おさらい)
# イメージのビルド
docker build -t myapp:v1 .
# コンテナの起動
docker run -d -p 8080:8080 myapp:v1
# 実行中コンテナの確認
docker ps
# ログの確認
docker logs <container-id>
Dockerfile では FROM でベースイメージを指定し、COPY / RUN でレイヤーを積み重ねます。
レイヤーキャッシュを活かすため、変更頻度の低い命令を上に配置するのがベストプラクティスです。
参考文献
- 『インフラ大全』第 9 章 — 仮想化技術の全体像
- 『詳解システムパフォーマンス』第 11 章 — コンテナのパフォーマンス特性