🐱 うさねこ教室 Python と可観測性の教室

仮想化とコンテナ

🐱 この章の目次

ハードウェア仮想化

ハードウェア仮想化(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 章 — コンテナのパフォーマンス特性