paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

LXDコンテナのカスタムイメージを作成する

またまたFireflyの話です。
LXD環境で運用していますが一度LXDプロセスが壊れてしまって作り直しました。
また同じことが会ってもすぐ復旧できるようにバックアップを取っておきたいところです。

リカバリだけではなくバージョンアップ用の土台にもなりますので今回はコンテナイメージの作成を行ってみます。

バックアップ内容

以下の順で作成します。

snapshotからコピーを取るのはyoutubeで動画があったので参考にしました。
わざわざ取らなくても良かったかもしれません。

  1. snapshot作成
  2. コンテナのコピー
  3. コピーからイメージ作成

LXDバージョン

ubuntuデスクトップ上で動かしてます。

masashi@PC-ubuntu:~$ lxc --version
4.13

snapshot作成

今運用しているFireflyコンテナのsnapshotを取ります。
停止してコマンド打つだけです。

masashi@PC-ubuntu:~$ lxc stop firefly
masashi@PC-ubuntu:~$ lxc snapshot firefly 
masashi@PC-ubuntu:~$ lxc info firefly
Name: firefly
Location: none
Remote: unix://
Architecture: x86_64
Created: 2021/02/04 14:31 UTC
Status: Stopped
Type: container
Profiles: default
Snapshots:
  snap0 (taken at 2021/05/08 01:54 UTC) (stateless)

コンテナのコピー

イメージ作成用のコンテナを作ります。
本番コンテナからでも良かったのですが一応コピーします。

masashi@PC-ubuntu:~$ lxc copy firefly/snap0 firefly-backup
masashi@PC-ubuntu:~$ lxc list
+----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+
|      NAME      |  STATE  |        IPV4         |                     IPV6                      |   TYPE    | SNAPSHOTS |
+----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+
| debian         | RUNNING | 10.28.57.205 (eth0) | fd42:24ab:b835:ae42:216:3eff:fe98:2560 (eth0) | CONTAINER | 0         |
+----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+
| dokuwiki       | RUNNING | 10.28.57.198 (eth0) | fd42:24ab:b835:ae42:216:3eff:fe2e:4f6a (eth0) | CONTAINER | 0         |
+----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+
| firefly        | STOPPED |                     |                                               | CONTAINER | 1         |
+----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+
| firefly-backup | RUNNING | 10.28.57.192 (eth0) | fd42:24ab:b835:ae42:216:3eff:feca:aaf9 (eth0) | CONTAINER | 0         |
+----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+
| lxd-proxy      | RUNNING | 10.28.57.177 (eth0) | fd42:24ab:b835:ae42:216:3eff:fecd:d475 (eth0) | CONTAINER | 0         |
+----------------+---------+---------------------+-----------------------------------------------+-----------+-----------+

できました。

イメージ作成前の準備

イメージ用のコンテナはDBを空にしておきたいのでスタートしてDBを初期化しておきます。

masashi@PC-ubuntu:~$  lxc start firefly-backup 

コンテナ内でDBを初期化します。
php artisanコマンドを使いますが、Fireflyの話なので割愛。

masashi@PC-ubuntu:~$  lxc exec firefly-backup bash

コピーからイメージ作成

再度コンテナを止めてイメージを作成します。

masashi@PC-ubuntu:~$ lxc stop firefly-backup 
masashi@PC-ubuntu:~$ lxc publish firefly-backup --alias firefly-image
Instance published with fingerprint: 754669c7e39f9a7cbb22a1c72ef8935b18a75f3c72c41d2f88e8db29305ae071

イメージ作成ができました。
ここからデプロイすればいつでもFireflyが復旧できますね。

masashi@PC-ubuntu:~$ lxc image list
+---------------+--------------+--------+---------------------------------------------+--------------+-----------+----------+------------------------------+
|     ALIAS     | FINGERPRINT  | PUBLIC |                 DESCRIPTION                 | ARCHITECTURE |   TYPE    |   SIZE   |         UPLOAD DATE          |
+---------------+--------------+--------+---------------------------------------------+--------------+-----------+----------+------------------------------+
| firefly-image | 754669c7e39f | no     | Ubuntu 20.04 LTS server (20210201)          | x86_64       | CONTAINER | 873.23MB | May 8, 2021 at 2:32am (UTC)  |
+---------------+--------------+--------+---------------------------------------------+--------------+-----------+----------+------------------------------+
|               | 90e2d54028dd | no     | ubuntu 20.04 LTS amd64 (release) (20210429) | x86_64       | CONTAINER | 361.08MB | Apr 30, 2021 at 8:52am (UTC) |
+---------------+--------------+--------+---------------------------------------------+--------------+-----------+----------+------------------------------+

ホスト環境にコピー

このままだとLXD環境にはイメージが残っていますが、また壊れたら回収できなくなるので今のうちにホスト側にもコピーしておきます。

masashi@PC-ubuntu:~$ lxc image export firefly-image .
masashi@PC-ubuntu:~$ ls -ltrh
…
-rw-rw-r--  1 masashi masashi 874M  58 12:26  754669c7e39f9a7cbb22a1c72ef8935b18a75f3c72c41d2f88e8db29305ae071.tar.gz

fingerprintの名前でファイルコピーができました。
結構サイズが大きいのでオンラインストレージに逃がすのはちょっと気が引けますね。
家のNASにでも退避させておきましょう。
ファイル名も分かりやすいように変えておきます。

まとめ

今回はカスタムコンテナのイメージ作成を行いました。
デプロイの確認はしていませんが別の機会に試したいと思います。

難しいことはやってませんが、LXDもナレッジが結構あるのでイメージ作成も詰まることなくできました。

別のLXDホストへデプロイ出来るかといった課題は残っていますが今回はここまでです。
しかしコンテナの技術は触ってて面白いですね。