LXDはLinux用のシステムコンテナおよび仮想マシンマネージャになります。
要約すると、コンテナという仕組みを利用して、普段使っているパソコンの中に別のOSを動かす事が出来るようになります。
今回はRaspberry Pi OS(ラズベリーパイOS)で動いているパソコンで、Ubuntu(ウブントゥ)という別のOSを動かせるようにしながら、LXDの操作に慣れていくことにします。
環境
マシン : Raspberry Pi 5 8G
OS : Raspberry Pi OS(64-bit)
$ lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 12 (bookworm) Release: 12 Codename: bookworm
LXD : 5.0.2
Raspberry Pi 5 / 8GB — スイッチサイエンス
最初に下記のコマンドでラズベリーパイの方にLXDを入れます。
$ sudo apt update $ sudo apt install lxd # 下記のコマンドでLXDがインストールされたか?を確認する $ lxd --version
5.0.2
LXDのバージョンが出力されましたので、LXDのインストールが終了したことを確認できました。
$ sudo gpasswd -a ${USER} lxd
を実行しておくことで、これから使用しますldcやlxcコマンドをsudoなしで実行する事ができるようになります。
次に、LXDの初期化を行います。
初期化には対話型等の方法がありますが、最初はシンプルにすべてを標準設定(default)にするために下記のコマンドで初期化します。
$ lxd init --minimal
次に、LXDの初期化後の設定内容を確認します。
設定内容の確認項目はprofile、networkとstorageになります。
標準のprofileの設定内容の確認は下記のコマンドになります。
$ lxc profile show default
config: {} description: Default LXD profile devices: eth0: name: eth0 network: lxdbr0 type: nic root: path: / pool: default type: disk name: default used_by: []
lxdbr0はLXDのネットワーク(network)の標準設定で作成されるデバイスになります。
以後、頻繁に出現しますので覚えておいてください。
lxdbr0の設定を下記のコマンドで確認します。
$ lxc network show lxdbr0
config: ipv4.address: 10.198.186.1/24 ipv4.nat: "true" ipv6.address: fd42:c8d4:ad5d:e9bd::1/64 ipv6.nat: "true" description: "" name: lxdbr0 type: bridge used_by: - /1.0/profiles/default managed: true status: Created locations: - none
詳細は端折りますが、lxdbr0はbridgeというタイプのネットワークで、これから作成するコンテナに10.198.186.1〜10.198.186.255のどれからのIPアドレスを振り分ける事がわかります。
しばらくは意識しなくて良いですが、ストレージ(storage)の標準設定も確認しておきます。
$ lxc storage show default
config: source: /var/lib/lxd/storage-pools/default description: "" name: default driver: dir used_by: - /1.0/profiles/default status: Created locations: - none
ストレージプール、ボリューム、バケットについて - LXD ドキュメント
ネットワークとストレージのどちらのused_byの値に/1.0/profiles/defaultがあるので、どちらもdefaultのプロフィールで参照されていることがわかります。
インスタンスを作成してみます。
LXDで作成した個々のコンテナはインスタンスと呼ばれ、インスタンスを作成する際に任意のインスタンス名を用います。
今回はインスタンス名を c1 にして話を進めます。
インスタンスの作成は下記のコマンドを入力することになっています。
lxc launch|init <image_server>:<image_name> <instance_name> [flags]
今回はインスタンス名を c1 にし、イメージ(コンテナ内で使用したいOS)をUbuntu 24.04にするので、コマンドは下記のようになります。
$ lxc launch ubuntu:24.04 c1 --profile default
ubuntu 24.04のイメージをダウンロードした後にインスタンス名を c1 にし、defaultプロフィールの設定を用いてインスタンスを作成します。
この時、defaultプロフィールを用いるのであれば、--profile defaultのフラグは不要です。
Creating c1 Starting c1
が出力されたら、
$ lxc list
のコマンドを実行して、
+------+---------+----------------------+-----------------------------------------------+-----------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +------+---------+----------------------+-----------------------------------------------+-----------+-----------+ | c1 | RUNNING | 10.198.186.17 (eth0) | fd42:c8d4:ad5d:e9bd:216:3eff:fed0:5308 (eth0) | CONTAINER | 0 | +------+---------+----------------------+-----------------------------------------------+-----------+-----------+
インスタンスが生成されていることを確認します。
ここで再び、defaultプロフィールの内容を確認してみると、
$ lxc profile show default
config: {} description: Default LXD profile devices: eth0: name: eth0 network: lxdbr0 type: nic root: path: / pool: default type: disk name: default used_by: - /1.0/instances/c1
used_byの値に先程作成しましたc1インスタンスの記述が追加されています。
作成したインスタンスを操作してみます。
今回は下記のコマンドを実行して、インスタンスにbashログインをしてみます。
$ lxc exec c1 bash
lxc execの後にインスタンス名とインスタンス内で実行したいコマンドを追加します。
このコマンドを実行すると、
root@c1:~#
になり、インスタンス内にログイン出来たことになります。
動作確認の為に下記のコマンドを実行してみます。
# cat /etc/lsb-release
※# はコメントではなく、rootアカウントで操作している意味になります
DISTRIB_ID=Ubuntu DISTRIB_RELEASE=24.04 DISTRIB_CODENAME=noble DISTRIB_DESCRIPTION="Ubuntu 24.04 LTS"
Ubuntu 24.04に切り替わっている事がわかります。
※上記の操作はインスタンス(コンテナ)内に入らずにlxcコマンドから実行する方法がありますが、当サイトでは丁寧に都度インスタンス内に入って操作することにしています。
最後にインスタンスの削除を見ていきます。
インスタンス内に入っているのであれば、
# exit
で抜けた後に、
$ lxc stop c1 $ lxc delete c1
を実行します。
$ lxc list
を実行し、c1インスタンスが削除されたことを確認しましょう。