目次
✅ 概要
コンテナはアプリケーションの開発・実行・運用に革命をもたらした技術です。
この記事では、コンテナの基本構造・仮想マシンとの違い・内部技術(名前空間やcgroups) まで、初心者でも理解しやすく解説します。
🖥️ 仮想マシンとコンテナの違い
| 項目 | 仮想マシン(VM) | コンテナ |
|---|---|---|
| 仮想化対象 | ハードウェア | OSレベル |
| 起動速度 | 数十秒〜数分 | 数秒 |
| リソース使用 | 高(OSごと) | 軽量(共有カーネル) |
| 独立性 | 高(OS単位で完全分離) | 中(ホストのカーネルを共有) |
| 代表的な技術 | KVM, VMware, VirtualBoxなど | Docker, containerd, Podmanなど |
📦 コンテナとは?
- コンテナはアプリケーションとその依存環境を一つのまとまり(イメージ)としてパッケージする技術です。
- OSのカーネルをホストOSと共有しながら、プロセスやファイルシステム、ネットワーク空間は分離(隔離)されます。
🗂️ コンテナのファイルシステムとイメージの関係
- イメージは、アプリと必要なライブラリなどを含む静的なテンプレート。
- コンテナは、イメージを元に起動した実行中の状態。
📌 レイヤー構造の例(Docker)
ubuntu:20.04 (ベースイメージ)
└─ Pythonレイヤー
└─ アプリケーションレイヤー
- 各レイヤーは差分のみ保存され、効率的に再利用されます。
- コンテナ起動時に一番上に書き込み可能なレイヤーが追加され、実行環境が構築されます。
🛠️ コンテナの仕組みを支える技術
1. 名前空間(Namespaces)
プロセスが使うリソースを個別に隔離するLinuxの仕組み。
| 名前空間の種類 | 隔離される対象 |
|---|---|
pid | プロセスID |
net | ネットワークインターフェース |
mnt | ファイルシステム |
uts | ホスト名・ドメイン名 |
ipc | プロセス間通信 |
user | ユーザーとグループID |
→ コンテナごとに“独自の環境”を持っているように見えるのはこのためです。
2. 制御グループ(cgroups)
CPUやメモリ、I/Oなどのリソース使用量を制限・管理する仕組み。
できること:
- メモリの最大使用量制限
- CPU使用率の制御
- I/O帯域の制限 など
→ ホストのリソースを“無秩序に消費させない”ための仕組みです。
💡 実際のイメージ:仮想マシン vs コンテナ構造図
[ホストマシン]
┌────────────────────┐
│ OSカーネル │← コンテナはこのカーネルを共有
├──────┬──────┬──────┤
│Container1│Container2│Container3│
│ App+依存 │ App+依存 │ App+依存 │
└────────────┴──────┴──────┘
- VMのように個別にOSを持たないため、軽量で高速なのが最大の利点です。
🔁 おさらい
| キーワード | 内容 |
|---|---|
| コンテナ | アプリ実行に必要な環境をまとめた軽量な仮想実行単位 |
| イメージ | コンテナの元になるテンプレート |
| 名前空間(namespace) | リソースの隔離 |
| cgroups | リソースの制御 |
| VMとの違い | OSを仮想化するか、プロセスレベルかの違い |
コメント