Incus誕生の背景と移行を検討すべき理由
Linux Containers(LXC)を扱ったことがある方なら、LXDは馴染み深い存在でしょう。転機となったのは2023年半ば、Canonical社がLXDを自社専管体制へと移行させ、厳格なCLA(寄付者ライセンス同意書)を課したことでした。これを受け、Linux Containersの初期開発チームはプロジェクトをフォークし、完全にコミュニティ主導の独立プロジェクトであるIncusを立ち上げました。
最大の魅力は、Snapへの依存を完全に排除した点にあります。Canonicalのエコシステムに縛られることなく、APT、RPM、Pacmanなどから直接インストール可能な、純粋なオープンソースのデーモンとして利用できます。
筆者の個人ホームラボ環境では、12台のVMとコンテナを抱えるProxmox VEクラスタを運用しています。ProxmoxはWeb UIによるリソース監視が非常に便利ですが、エッジサーバーやCI/CDテスト環境を構築する場合、あるいはArch LinuxのノートPC上で直接作業する際には、より軽量なCLIツールが求められます。Incusはまさにそのニーズに応えてくれる存在です。超高速なコンテナ作成と、より厳密な分離が必要なKVM仮想マシンの起動を両立しています。
アーキテクチャの概要:Incusの仕組み
Incusは、性格の異なる2つの仮想化技術を単一の管理構文に統合しています:
- システムコンテナ(LXC):単一プロセスのみをカプセル化するDocker(プロセスコンテナ)とは異なり、Incusのコンテナは完全なOSとして動作します。ホストとカーネルを共有しながらも、専用の
systemdプロセス、cronジョブ、SSHデーモンを通常通り稼働させることができます。コンテナの起動時間は0.5秒未満、アイドル時のメモリ消費量もわずか25〜30MB程度に抑えられます。 - Micro-VM(QEMU/KVM):独立したカーネルが必須となる用途に使用します。特定のカーネルモジュールのロード、異なるディストリビューションカーネルの検証、ホストのセキュリティを損なわずにDockerを入れ子(Nested)で動かしたいケースなどが代表例です。Incusでは、コンテナと同じネットワークおよびストレージ構文を用いてKVM仮想マシンを操作できます。
Incusのインストールと初期設定手順
1. Zabblyリポジトリを使用したUbuntuおよびDebianへのインストール
Snapを介さずに導入するため、IncusプロジェクトリーダーのStéphane Graber氏が管理するZabblyリポジトリを利用するのが推奨されます。Ubuntu 22.04 / 24.04またはDebian 12での導入手順は以下のとおりです:
# 1. 依存パッケージのインストール
sudo apt update
sudo apt install -y curl ca-certificates
# 2. ZabblyのGPGキーを追加
sudo mkdir -p /etc/apt/keyrings/
sudo curl -fsSL https://pkgs.zabbly.com/key.asc -o /etc/apt/keyrings/zabbly.asc
# 3. APTリポジトリを登録
sudo sh -c 'cat <<EOF > /etc/apt/sources.list.d/zabbly-incus-stable.sources
Enabled: yes
Types: deb
URIs: https://pkgs.zabbly.com/incus/stable
Suites: $(. /etc/os-release && echo "${VERSION_CODENAME}")
Components: main
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/zabbly.asc
EOF'
# 4. パッケージリストの更新とIncusのインストール
sudo apt update
sudo apt install -y incus incus-ui-canonical
# 5. 現在のユーザーへの権限付与(sudoなしで実行可能にする)
sudo adduser $USER incus-admin
newgrp incus-admin
2. incus admin init による初期セットアップ
設定ウィザードを実行し、ストレージプールとネットワークブリッジを構成します:
incus admin init
ウィザードでストレージバックエンドを選択する際は、以下の2つのケースを考慮してください:
- 専用ディスクまたはパーティションがある場合:ZFSまたはBtrfsを選択してください。Copy-on-Writeの仕組みにより、コンテナのクローン作成や10GBのスナップショット作成がわずか1秒で完了し、余計な実容量も消費しません。
- 単一のルートパーティションのみの場合:手軽さを優先してdirを選択します。ただし、ファイル全体をコピーする必要があるため、スナップショットやクローンの処理速度は大幅に低下します。
3. 最初のシステムコンテナの起動
IncusはLinux Containersの公式images:サーバーから直接イメージを取得します。ここにはAlpine、Debian、Ubuntu、Rocky Linux、Arch Linuxに至るまで、主要なディストリビューションが網羅されています。
# Debian 12コンテナの起動
incus launch images:debian/12 debian-box
# ステータスとブリッジ経由で割り当てられたIPの確認
incus list
# コンテナ内のシェルに対話的に接続
incus exec debian-box -- bash
4. --vm フラグによるKVM仮想マシンの起動
virshで複雑なXMLを定義したりVirt-Managerを起動したりする代わりに、おなじみのコマンドに--vmオプションを付与するだけで作成できます:
# 2 vCPU・2GB RAM構成のUbuntu 24.04仮想マシンを作成
incus launch images:ubuntu/24.04 dev-vm --vm -c limits.cpu=2 -c limits.memory=2GiB
# インスタンス一覧の確認
incus list
Incusの公式イメージにはincus-agentがあらかじめ組み込まれています。そのため、VNCポートの開放やシリアルコンソールの設定を行うことなく、incus exec dev-vm -- bashを実行するだけで仮想マシンのターミナルに直接アクセスできます。
5. 実運用で役立つ3つの設定テクニック
コンテナ稼働中のCPU・メモリ制限
サービスを停止することなく、稼働中のコンテナのリソース上限を動的に変更できます:
# メモリ上限を1GB、CPUを2コアに制限
incus config set debian-box limits.memory=1GiB
incus config set debian-box limits.cpu=2
iptables不要のコンテナ向けポートフォワーディング
Incusはレイヤー4(トランスポート層)のプロキシデバイスをネイティブでサポートしており、即座に設定が反映されます:
# ホストの8080番ポートへのトラフィックをコンテナの80番ポートへ転送
incus config device add debian-box web-proxy proxy listen=tcp:0.0.0.0:8080 connect=tcp:127.0.0.1:80
LXDからIncusへの完全移行(マイグレーション)
既存のサーバーでSnap版LXDを稼働させている場合、公式に提供されている移行ツールを利用して環境をそのまま移行できます:
# 移行ツールのインストール
sudo apt install -y lxd-to-incus
# 移行前にコンテナを停止し、以下のコマンドを実行
sudo lxd-to-incus
スクリプトがストレージプールやネットワークプロファイルを自動検出し、すべてのデータをIncusデーモンへインポートしたうえで、LXDの完全削除まで案内してくれます。
まとめ
Incusは、Linuxコンテナ技術を「高速・軽量・中立」という本来あるべき姿へと回帰させました。UbuntuでSnap依存から脱却したい場合や、Linuxサーバー上でLXCとKVMを統一されたCLIからスマートに管理したい場合、Incusは現在最も実用的で信頼のおける選択肢です。

