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を立ち上げたいときにもすごく便利です。
コメント