LXCとは
LXC(Linux Containers)は、ホストカーネルを共有しながら独立したファイルシステム・プロセス・ネットワークスタックを持つ、OSレベルの仮想化技術です。完全仮想マシンと異なり、カーネルを共用するため起動がミリ秒単位と極めて高速で、メモリオーバーヘッドも最小限です。
LXCとVMの比較
| 項目 | LXCコンテナ | VM(KVM/QEMU) |
|---|---|---|
| 起動時間 | ミリ秒〜数秒 | 数秒〜数分 |
| メモリ負荷 | アプリメモリのみ | ゲストOS全体 |
| ディスク使用量 | 100 MB〜1 GB | 2〜10 GB以上 |
| カーネル | ホストと共有 | 独立カーネル |
| 分離レベル | プロセスレベル | ハードウェアレベル |
| 主な用途 | Webサーバ、マイクロサービス、開発環境 | マルチテナント、異種OSカーネル |
テンプレートの管理
pveam コマンドでTurnKey Linuxなどのテンプレートを管理します:
pveam update
pveam available --section turnkeylinux
pveam download local ubuntu-22.04-standard_22.04-1_amd64.tar.zst
コンテナの作成
pct コマンドでコンテナを作成・起動します:
pct create 100 local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.zst \
--hostname web01 --password securePass123 \
--storage local-lvm --net0 name=eth0,bridge=vmbr0,ip=dhcp \
--unprivileged 1
pct start 100
ホスト名、rootパスワード、ストレージ、ネットワーク設定を指定します。作成後にCPUやメモリも調整可能です。
非特権コンテナと特権コンテナ
非特権コンテナはUID/GIDマッピング(subuid/subgid)を使い、コンテナ内のroot(UID 0)をホスト上の非特権UIDに変換します。これにより、コンテナがホストのroot権限を取得するのを防ぎます:
Container UID 0 → Host UID 100000
Container UID 1 → Host UID 100001
特権コンテナはホストのrootとして動作するため、ファイルシステムマウントなどが容易ですが、セキュリティリスクが高まります。
重要なトレードオフ: 非特権コンテナではNFSやFUSEのマウント、ホストディレクトリのバインドマウントができません。これらが必要な場合は特権コンテナを選択し、AppArmorで保護します。
リソース制限
cgroupsによるリソース制限を pct set で設定します:
pct set 100 --memory 2048 --swap 512 --cpulimit 50 --cores 2
| リソース | パラメータ | 例 |
|---|---|---|
| CPU制限 | cpulimit | 50(1コアの50%) |
| CPUコア数 | cores | 4 |
| メモリ | memory | 2048(MB) |
| スワップ | swap | 512(MB) |
| ディスクIO | bwlimit | 100(MB/s) |
バインドマウント
ホストのディレクトリをコンテナに共有するには mpX エントリを使います。非特権コンテナではUID/GIDのマッピングに注意が必要です:
mp0: /mnt/storage/data,mp=/srv/data,rootuid=1000,rootgid=1000
スナップショットとクローン
スナップショットで更新前の状態を保存し、ロールバック可能です:
pct snapshot 100 pre-upgrade --description "アップグレード前"
pct listsnapshot 100
pct rollback 100 pre-upgrade
pct clone 100 101 --hostname staging-web
ネットワーク
- ブリッジ(vmbr) — コンテナが物理ネットワークに直接接続。DHCPでIP取得。
- ルーテッド — ホスト経由でルーティング。
- NAT — プライベートIP + マスカレード。外向け通信のみ。
バックアップとリストア
vzdump 100 --mode suspend --compress zstd --storage backup-store
pct restore 200 /var/lib/vz/dump/vzdump-lxc-100-2024_05_22-00_00_00.tar.zst
ユースケース
- Webサーバの分離、データベースの軽量ホスティング、開発環境のスナップショット管理に最適です。Docker-in-LXCは特権コンテナで
nesting=1を設定すれば動作しますが、本番環境では推奨しません。
