経緯
こんにちは、lkjsxcです。
冬の終わりを実感し始める今日この頃、私は大学のテスト勉強に追われていました。
そして、人は何かに追われているとき、身の回りを整理したくなるものです。
例に漏れず、私も部屋の掃除......もとい自宅サーバの整理を始めてしまいました。
現状、我が家はArchLinuxの入ったミニPC(Ryzen 7 7840HS / 64GB RAM / 2TB Storage)をサーバーとして運用しています。

ここで問題となるのは、このマシンを友人たちにも共有しており、その管理が少々杜撰になっていたということです。
各々のプライバシーや私の技術力との兼ね合いもあり、ルートレスなDockerによって棲み分けがなされていました。
しかしながら、筆者自身がコンソール画面での操作に慣れていなかったため、管理に苦労していました。
特に通信周りがひどく、マインクラフトのサーバーのために大量のポート番号が割り当てられたりなど、非常に厳しい状態にありました。
いつか整理すると友人たちへ宣言し、早1ヶ月。
この機を逃すわけには行くまいとChatGPTに相談したところ、LXDを紹介されました。
リソース管理に優れているLXDコンテナの上でDockerを導入すれば、今まで通りの使用感で開発できるとのこと。なるほど。
早速そのことを友人たちに相談し、116日間動き続けてくれたArchLinuxに感謝を告げ、私はマシンをシャットダウンしました。
導入の流れ
(ここは技術的な備忘録なので、興味のない方は読み飛ばしても問題ありません。)
ホストOS
私はターミナル操作がとても苦手なので、可能な限りWebブラウザから操作するような手順で進めます。
OSのインストール時、LXDのプリインストールにチェックを付けます。他の項目はよしなに。
インストールを終えたら忘れぬうちに、SSHの鍵を交換したり、パスワードによるログインを無効化したりなどします。
さて、ChatGPTの話によるとlxd initと実行するだけで、Webブラウザから管理できる何かが立ち上がるとのこと。
何か対話が始まりますが、全てEnterでスキップしていいとのことなのでEnter連打。
ストレージに関して、zfsはdockerのパフォーマンスを著しく低下させるという話がありますが、よほど古いカーネルを使っていなければ問題ないようです。
たったこれだけで、TCPの8443番にてLXD-UIが立ち上がりました。すごい。

プロファイル
インスタンス上でDockerを動かすために、プロファイルの設定を行います。
Webブラウザ経由では設定できない項目もあるようなので、ホストOSから設定します。
lxc profile set default security.nesting=true lxc profile set default security.syscalls.intercept.mknod=true lxc profile set default security.syscalls.intercept.setxattr=true
インスタンスを起動
インスタンスを立ち上げます。
今回、BaseImageはUbuntu 24.04を選択しました。
BaseImageには他にもデスクトップ版などありますが、間にエミュレータが挟まる(オーバーヘッドがとても大きい)vmなども並んでいるので、注意して選ぶ必要があります。
アドレスの固定
velocityなどのプロキシサーバーのために、インスタンスのアドレスを固定します。これもWebブラウザ経由では設定できないので、ホストOSから設定します。(lkjsxc_main, eth0, 10.161.59.3 は内容に応じて適宜書き換える必要があります)
lxc config device override lkjsxc_main eth0 ipv4.address=10.161.59.3
ポートフォワーディング
外からインスタンスへアクセスできるようにします。
設定画面からDevices、Proxyと進み、新しいプロキシデバイスを追加します。
注意すべき点として、ListenのAddressには外側のアドレス(基本的にはホストOSのアドレス)、ConnectのAddressには0.0.0.0が入ります。

Dockerのインストール
インスタンスのTerminalから、Dockerをインストールしていきます。
curl -fsSL https://get.docker.com | sh
この調子で、portainerやnginx、sambaやgiteaなどを導入し、環境を構築していきます(詳しく書くと長くなるので省略)
感想
LXDは本当に素晴らしいものでした。
ぱっと思いつくだけでも、導入が楽・ほとんどの用事がWebブラウザ経由で済む・インスタンス同士の通信が容易・リソースの管理が楽・オーバーヘッドが大きくない、などのメリットが挙げられます。
Webブラウザ経由で一部の設定にアクセスできないことを除けば、本当によくできたシステムだなあと感心します。
数人規模の開発環境において、LXDは最も好ましい選択肢の一つとなりそうです。


