Proxmox 初心者がつまづく“LXC と Docker の違い”を実体験から解説

it-tech

Raspberry Pi 5 に Proxmox VE(以下 PVE)を導入し、VPN サーバと Zabbix サーバをまとめて構築しようとしたところ、私は大きな落とし穴にはまってしまいました。

原因はとてもシンプルで、 「PVE のコンテナ(LXC)を Docker のように扱ってしまった」 という勘違いです。

特に私は、 Tailscale の Exit Node を LXC で動かしていた という点が大きなトラブルの引き金になりました。

この記事では、私の実体験をもとに、 LXC と Docker の違い そして Proxmox でサービスをどう分離すべきか を初心者向けに分かりやすく解説します。

LXC と Docker は“似て非なるもの”

まず押さえておきたいのは、 PVE のコンテナ=LXC は OS レベルのコンテナ Docker は アプリケーションレベルのコンテナ という点です。

LXC(OS レベルのコンテナ)

  • ホストと カーネルを共有
  • systemd が動く
  • ネットワークは仮想 NIC を割り当てる
  • ほぼ「軽量な VM」に近い
  • 1つのコンテナに複数サービスを入れることも可能(ただし推奨されない)

Docker(アプリケーションレベルのコンテナ)

  • プロセス単位で隔離
  • イメージのレイヤー構造
  • ネットワークはコンテナ内部で完結
  • 1コンテナ=1プロセスが基本
  • サービスの分離が前提

つまり、 LXC は OS を動かす箱、Docker はアプリを動かす箱 という違いがあります。

私がつまづいたポイント:Exit Node と Zabbix を同居させた

私はこの違いを理解しないまま、 「LXC に VPN(Tailscale Exit Node)と Zabbix を同居させれば軽くて便利だろう」 と考えてしまいました。

しかし、実際には次のような問題が発生しました。

Tailscale Exit Node がネットワークを“握る”

Exit Node は以下のような動作を行います。

  • ルーティングテーブルの変更
  • NAT の設定
  • IP 転送の有効化
  • ファイアウォールルールの追加

つまり、 LXC 内で動かすと、そのコンテナ全体のネットワークを支配する という性質があります。

Zabbix の通信が不安定に

同じ LXC 内で動かしていた Zabbix は、

  • Web インターフェース
  • Zabbix Server
  • Zabbix Agent
  • DB(MariaDB/PostgreSQL)

など複数のコンポーネントが連携して動きます。

しかし Exit Node がルーティングを変更するため、

  • Zabbix の Web が開かない
  • DB との通信が途切れる
  • systemd の起動順によって Zabbix が起動しない

といった問題が頻発しました。

Docker 的な感覚で LXC を扱ったのが原因

Docker なら「VPN コンテナ」と「Zabbix コンテナ」を分離できますが、 LXC は OS レベルなので、 同じコンテナ内でネットワークを触るサービスと複雑なアプリを共存させるのは無理筋 でした。

正しい構成はこうすべきでした

Proxmox では、サービスごとに環境を分けるのが基本です。

VPN(Tailscale Exit Node)は専用 VM または専用 LXC

ネットワークを触るサービスは隔離が必須です。

特に Exit Node は 「ネットワークの主導権を握る」 ため、他サービスと同居させてはいけません。

Zabbix は専用 VM または Docker(Podman)

Zabbix は複数コンポーネントで構成されるため、

  • VM でまとめる
  • Docker で分離する

のどちらかが現実的です。

Raspberry Pi 5 なら VM でも十分動く

「VM は重い」というイメージがありますが、 Pi5 の性能なら軽量 Linux VM は問題なく動作します。

Proxmox の“コンテナ”は Docker ではありません

今回の経験から、私は次のことを強く実感しました。

  • LXC と Docker は役割が違う
  • PVE のコンテナはアプリ分離には向かない
  • ネットワークを触るサービスは必ず専用 VM に分離すべき
  • Exit Node を LXC に入れると他サービスが巻き込まれる
  • 初心者ほど Docker 的な感覚で LXC を扱ってしまう

この記事が、同じように Proxmox を触り始めた方の参考になれば幸いです。

おわりに

Proxmox はとても便利な仮想化基盤ですが、 「コンテナ」という言葉が誤解を生みやすい部分でもあります。

私のように “Docker のつもりで LXC を使ってしまう” というミスは多くの初心者が経験するポイントです。

この記事が、あなたの Proxmox ライフをより快適にする一助になれば嬉しく思います。

コメント

タイトルとURLをコピーしました