LXDの使い方

技術情報

LXDについては仮想ゲストOSにコンテナのLXDを選ぶ理由に詳しく書いてあります。

まあ、一言で言ったらLinux環境でLinuxのゲストOSを簡単に作れるもの。みたいな感じです。Dockerとは思想が違って、ゲストOSの環境をどんどん作っていきます。そのへんはVirtual BoxとかVmwareに似ている。でも、コンテナなので高速に起動・終了ができ、管理も簡単です。

インストール

Ubuntu 20.04 ServerではデフォルトでLXDがインストールされています。

  • 環境 Ubuntu 20.04
  • LXD 4.0.1

初期設定

コンテナを作成するには、初期化しなければなりません。基本的に試しに使う分にはすべてデフォルトで大丈夫です。

$ lxd init

色々と質問がありますが、基本的にデフォルトでOKです。
ストレージだけは制限かけたい場合は、ストレージサイズを聞かれたときに設定しましょう。

$ lxd init
Would you like to use LXD clustering? (yes/no) [default=no]:
Do you want to configure a new storage pool? (yes/no) [default=yes]:
Name of the new storage pool [default=default]:
Name of the storage backend to use (lvm, ceph, btrfs, dir) [default=btrfs]:
Create a new BTRFS pool? (yes/no) [default=yes]:
Would you like to use an existing block device? (yes/no) [default=no]:
Size in GB of the new loop device (1GB minimum) [default=100GB]:
Would you like to connect to a MAAS server? (yes/no) [default=no]:
Would you like to create a new local network bridge? (yes/no) [default=yes]:
What should the new bridge be called? [default=lxdbr0]:
What IPv4 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
What IPv6 address should be used? (CIDR subnet notation, “auto” or “none”) [default=auto]:
Would you like LXD to be available over the network? (yes/no) [default=no]:
Would you like stale cached images to be updated automatically? (yes/no) [default=yes]
Would you like a YAML "lxd init" preseed to be printed? (yes/no) [default=no]:

コンテナの作成

いよいよコンテナの作成です。
コンテナイメージは、https://uk.images.linuxcontainers.org/ から選択できます。

$ lxc launch <コンテナイメージ> <コンテナ名>

例えばCentOS7のコンテナを作成する場合は、次のようにします。

$ lxc launch images:centos/7/amd64 centos7

コンテナの確認

コンテナができているか確認します。centos7というコンテナができています(紛らわしい名前をつけてしまいました)。

$ lxc list
+---------+---------+----------------------+----------------------------------------------+-----------+-----------+
|  NAME   |  STATE  |         IPV4         |                     IPV6                     |   TYPE    | SNAPSHOTS |
+---------+---------+----------------------+----------------------------------------------+-----------+-----------+
| centos7 | RUNNING | 10.121.27.206 (eth0) | fd42:e23:d7a0:53bc:216:3eff:fe24:65e1 (eth0) | CONTAINER | 0         |
+---------+---------+----------------------+----------------------------------------------+-----------+-----------+

コンテナの開始と終了

コンテナの開始は次のコマンドです。

$ lxc start centos7

コンテナの終了は次のコマンドです。

$ lxc stop centos7

コンテナの中に入る

いよいよコンテナの中に入ります。

$  lxc exec centos7 /bin/bash

/bin/bashを実行して、コンテナの中に入ります。この辺はDockerに似ています。

portフォワーディング(proxy)

外部からコンテナのアクセスをしたい場合は、ポートフォワーディングするのが一番手っ取り早いです。例えばhttpとかhttpsとか。

lxc config device add <コンテナ名> <サービス名> proxy listen=tcp:<HostのIP>:<HostのPort> connect=tcp:<GuestのIP>:<GuestのPort> bind=host

HostのIPは、0.0.0.0が無難です。GuestのIPはローカルIPでも大丈夫です。

ここでは、コンテナへSSHをポートフォワーディングしてみましょう。

$ lxc config device add centos7 ssh proxy listen=tcp:0.0.0.0:50022 connect=tcp:127.0.0.1:22 bind=host
$ lxc config device show centos7
ssh:
  bind: host
  connect: tcp:127.0.0.1:22
  listen: tcp:0.0.0.0:50022
  type: proxy

$ lxc config device rm centos7 ssh

ポートフォワーディングを削除するときは次のようにします。

$ lxc config device rm centos7 ssh

スナップショットとリストア

コンテナ内で作業する前にスナップショットを取っておけば、間違った場合にリストアで戻すことができます。すごく便利なので、サクッとスナップショットを取ってガリガリ修正して、壊れたらリストアで戻せます。

スナップショットのとり方です。

$ lxc snapshot <コンテナ名> <スナップショット名>

ちょっとバックアップのスナップショットを取ってみましょう。

$ lxc snapshot centos7 backup
$ lxc info centos7
Snapshots:
  backup (taken at 2020/05/04 00:49 UTC) (stateless)

リストアの仕方です。

$ lxc restore <コンテナ名> <スナップショット名>

たとえば、さっきのバックアップをリストアしてみましょう。

$ lxc restore centos7 backup

コンテナのイメージ化とエクスポート、インポート

スナップショットは、イメージにすることができます。つまり、スナップショットの状態で新たなコンテナを作成できます。
さっきのバックアップをイメージ化してみます。

$ lxc publish centos7/backup --alias centos7-custom
$ lxc image list
+----------------+--------------+--------+---------------------------------+--------------+-----------+----------+------------------------------+
|     ALIAS      | FINGERPRINT  | PUBLIC |           DESCRIPTION           | ARCHITECTURE |   TYPE    |   SIZE   |         UPLOAD DATE          |
+----------------+--------------+--------+---------------------------------+--------------+-----------+----------+------------------------------+
| centos7-custom | 324162c0a566 | no     |                                 | x86_64       | CONTAINER | 143.91MB | May 4, 2020 at 12:54am (UTC) |
+----------------+--------------+--------+---------------------------------+--------------+-----------+----------+------------------------------+
|                | fef345e57742 | no     | Centos 7 amd64 (20200503_07:08) | x86_64       | CONTAINER | 83.18MB  | May 3, 2020 at 11:56am (UTC) |
+----------------+--------------+--------+---------------------------------+--------------+-----------+----------+------------------------------+

イメージはエクスポートして、tar.gzとして出力できます。

$ lxc image export centos7-custom centos7-custom-archive

$ ls
centos7-custom-archive.tar.gz

そして、エクスポートされたイメージは別のLXDでインポートできます。環境のお引越しも簡単です。

$ lxc image import centos7-custom-archive.tar.gz

まとめ

lxdで簡単にLinuxのゲストOSを立ち上げたり、バックアップしたり、イメージの受け渡しができます。
環境を試しに作ってみる分にも、たくさんのゲストOSを立ち上げたいときにもすごく便利です。

コメント

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