LXDのコンテナイメージのエクスポート・インポート

はじめに

nginxとshibbolethでSAML2のシングルサインオンを試してみた で使ったCentOS7のLXDコンテナのイメージをエクスポートし、別のマシンにコピーしてインポートするのを試してみたのでメモです。

LXD 3.2で試しました。

Backup the container and install it on another server - LXD - Linux Containers Forum の手順ほぼそのままでOKでした。

リモートのLXDにアクセスできる場合は、このコメントのように lxc copy コマンド一発でコピーできるのですが、今回はエクスポートしてインポートする方式を試しました。

エクスポート

まずスナップショットを作成します。 以下のコマンドを CONTAINER_NAME を実際の環境に合わせて変更して実行します。

lxc snapshot CONTAINER_NAME

コンテナのスナップショット一覧は以下のコマンドで確認できます。

lxc info CONTAINER_NAME --verbose

実行例を示します。

$ lxc info --verbose centos7
Name: centos7
…(略)…
Snapshots:
  snap0 (taken at 2018/07/05 06:02 UTC) (stateless)

次に lxc publish でスナップショットをイメージに変換します。 以下のコマンドを CONTAINER_NAMESNAPSHOT_NAME を実際の環境に合わせて変更し --alias の引数の my-export をお好みの名前に変えて実行します。

lxc publish CONTAINER_NAME/SNAPSHOT_NAME --alias my-export

実行例です。

$ lxc publish centos7/snap0 --alias my-export
Container published with fingerprint: fd1e60e8d58e3bad3e67eb5de3ac1ad148718f2339ad3709ad35bd636d65cf770

lxc image list でローカルのイメージを一覧表示すると my-export というエイリアスを持つイメージが含まれることが確認できます。

あとはイメージをエクスポートするだけです。

lxc image export my-export .

Image exported successfully! と表示されたら成功です。カレントディレクトリに publish したときの fingerprint をベース名に持つtarballのファイルが作られていました。

$ ls
fd1e60e8d58e3bad3e67eb5de3ac1ad148718f2339ad3709ad35bd636d65cf77.tar.gz

インポート

事前準備として上記の手順でエクスポートしたtarballのファイルをインポートしたいマシンに何らかの方法でコピーしておきます。

まずtarballのファイルをイメージとしてインポートします。TARBALL の部分を実際のファイル名に置き換えて以下のコマンドを実行してください。

lxc image import TARBALL --alias my-export

あとはこのイメージを元にコンテナを作成します。NEW-CONTAINER の部分をお好みのコンテナ名に変更して以下のコマンドを実行してください。

lxc init my-export NEW-CONTAINER