インストール

リリースを選択する

LXD では 3 つのリリースブランチが並行してメンテナンスされています:

  • 長期サポート(LTS)リリース: LXD 5.0.x or LXD 4.0.x
  • フィーチャーリリース: LXD 5.x

LTS リリースは本番環境での使用におすすめです。定期的なバグフィックスとセキュリティアップデートが行われますが、新しい機能の追加や動作が変わるような変更は行われないためです。

LXD の新機能のすべてと月次の更新を取得したい場合は、フィーチャーリリースをお使いください。

パッケージのインストール

Linux

Linux で LXD をインストールするもっとも簡単な方法は snap パッケージ をインストールすることです。snap パッケージは色々な Linux ディストリビューションで利用できます。

他の方法が良い場合は、他のインストール方法 をご覧ください。

Snap パッケージ

LXD 開発元では、多くの Linux ディストリビューションで動作する snap パッケージを作成し、テストしています。例えば、Ubuntu、Arch Linux、Debian、Fedora、OpenSUSE などで動作します。

以下の手順で snap をインストールします:

  1. provided distributions をチェックして、お使いの Linux ディストリビューションで snap が利用できるかを見ます。
    もし利用できない場合は、他のインストール方法 でインストールしてください

  2. snapd をインストールします。方法は snapcraft.io の installation instructions をご覧ください

  3. snap パッケージをインストールします
    フィーチャーリリースの場合は、次のように実行します:

    sudo snap install lxd
    

    LXD 5.0 LTS リリースの場合は、次のように実行します:

    sudo snap install lxd --channel=5.0/stable
    

LXD の snap パッケージに関する詳細な情報(その他のバージョン、アップデート管理など)については、フォーラムの Managing the LXD snap をご覧ください。

注意


以前、LXD の deb パッケージをインストールしていた場合は、次のような方法で既存データをすべて移行できます:

sudo lxd.migrate

他のインストール方法

Linux ディストリビューションによっては、snap パッケージ以外のインストール方法を提供している場合があります。


Alpine Linux で LXD のフィーチャーブランチをインストールするには、以下を実行します:

apk add lxd


Arch Linux で、フィーチャーブランチの LXD をインストールするには、次のように実行します:

pacman -S lxd


Fedora の LXC/LXD の RPM パッケージは COPR リポジトリ から提供されています。


フィーチャーブランチの LXD パッケージをインストールするには、次のように実行します:

dnf copr enable ganto/lxc4
dnf install lxd


さらに詳しいインストール手順は Installation Guide をご覧ください。


Gentoo で LXD のフィーチャーブランチをインストールするには、次のように実行します:

emerge --ask lxd

他のオペレーティングシステム

注意


他のオペレーティングシステムのビルドはクライアントのみで、サーバーはありません。


LXD の開発元では macOS 用の LXD クライアントのビルドを Homebrew を通して提供しています。


LXD のフィーチャーブランチをインストールするには、次のように実行します:

brew install lxc


Windows の LXD クライアントは Chocolatey パッケージとして提供しています。インストールするには:

  1. installation instructions に従って Chocolatey をインストールします
  2. LXD クライアントをインストールします:

    choco install lxc
    

GitHub 上には、ネイティブビルドの LXD クライアントも存在します。特定のビルドをダウンロードするには:

  1. GitHub アカウントにログイン済みか確認します
  2. 目的のブランチやタグでフィルターします(例えば、最新リリースやmaster
  3. 最新のビルドを選択し、適切なバイナリをダウンロードします

ソースからのインストール

ソースから LXD をビルドしてインストールするには、公式ドキュメントInstalling LXD from sourceの手順にしたがってください。

初期設定

注意


「インスタンス」はコンテナと仮想マシンの両方を指します。

インスタンスを作成する前に、LXD を設定する必要があります。

次のようにコマンドを実行して、対話型の設定を開始します:

sudo lxd init

各種設定オプションについては対話型の設定オプションをご覧ください。

デフォルトオプションを使った、最適化されていない最小セットアップを行うには、--minimal オプションを指定して対話的な設定プロセスをスキップできます:

sudo lxd init --minimal

注意


対話型で行うセットアップに比べると、最小セットアップは動作が遅く、機能も少なくなります。特に(デフォルトで使う) dir storage backend は遅く、高速なスナップショット、高速なコピー・起動、クォータ、最適化されたバックアップが使えません。

最適化された設定で使いたい場合、最小セットアップの代わりに対話型の設定プロセスを実行することをおすすめします。

セキュリティとアクセス制御

LXD のアクセスコントロールは、グループメンバーシップに基づいて行います。root ユーザおよび lxd グループのメンバーはローカルデーモンと対話できます。

lxd グループがシステムにない場合は、作成した後、LXD デーモンを再起動します。そして、信用するユーザを lxd グループに追加します。このグループに属するユーザ全員が、LXD を完全に制御できます。

グループメンバーシップはログイン時にのみ追加されるので、追加後にあなたのユーザセッションを閉じて再度開くか、LXD と通信したいシェル上で newgrp lxd コマンドを実行する必要があります。

警告


LXD ソケットにアクセスできる人であれば誰でも LXD を完全にコントロールできます。これには、ホストのデバイスやファイルシステムにアタッチする権限も含まれます。したがって、ホストへの root アクセスで信頼できるユーザにのみ与えられるべきです。


さらに LXD のセキュリティについて学びたい場合はドキュメントのセキュリティのセクション(日本語版) (または英語版)をご覧ください。

対話型の設定オプション

LXD の初期設定のときは、次のオプションを設定できます。

デフォルト=noはデフォルトではその機能が無効化されていることを意味します。

機能 説明 基本的な設定 備考
クラスタリング クラスターは複数のLXDサーバーを組み合わせます。サーバーは同じ分散データーベースを共有し、LXDクライアント(lxc)やREST APIを使って一様に管理できます デフォルト=no
yesに設定すると、既存のクラスターに接続するか新しいクラスターを作るかのどちらかが選べます
LXDドキュメント:
- クラスタリング
MAAS server 「MAASはオープンソースのツールで、ベアメタルサーバーからデータセンターを作れます」 デフォルト=no
yesに設定すると、nameURLAPI keyを指定して既存のMAASサーバーに接続します
- maas.io
- maas - install with lxd
ネットワークブリッジ インスタンスにネットワークアクセスを提供します 既存のブリッジ(もしくはインターフェース)を使うことも、LXDに新しいブリッジを作らせる(推奨オプション)こともできます。追加でブリッジを作成して、あとでインスタンスに割り当てることもできます LXDドキュメント:
- ネットワーク
- ネットワークインターフェース
ストレージプール インスタンスなどがストレージプールに保存されます テスト用途であればloopbackストレージプールを作成してもよいでしょう。
しかしプロダクション環境ではloopbackストレージではなく空のパーティション(もしくはディスク全体)の使用を推奨します(理由:loopbackプールは遅くてサイズを縮小できない)
推奨のバックエンドはZFSとbtrfsです。あとから追加のストレージプールを作成することもできます
LXDドキュメント:
- ストレージプールについて
- ストレージドライバ
ネットワークアクセス LXDサーバーにネットワーク経由でアクセスする デフォルト=no
yesに設定すると、ネットワーク経由でサーバーに接続できます。
パスワードを設定するか、手動でクライアント証明書を受け付けることができます
-
イメージの自動更新 イメージサーバーからイメージがダウンロードでき、この場合イメージは自動的に更新されます デフォルト=yes
yesに設定すると、LXDはダウンロードしたイメージを定期的に更新します
LXDドキュメント:
イメージの扱い
"YAML lxd init preseed" 選択した設定オプションの概要をターミナルに表示します デフォルト=no -

インスタンス

LXD は 2 種類のインスタンスをサポートします:

これらのインスタンスタイプの比較は Virtual machines vs. system containers をご覧ください。

コンテナ

コンテナは LXD のデフォルトのインスタンスタイプです。コンテナは現時点では LXD インスタンスのもっとも完全な実装であり、仮想マシンよりも多くの機能をサポートしています。

コンテナは liblxc(LXC)を使って実装されています。

仮想マシン

LXD 4.0 から、LXD はネイティブに仮想マシンもサポートします。そしてビルトインのエージェントのおかげで、ほぼコンテナのように使えます。

LXD は VM の機能を提供するために qemu を使います。

注意


現時点では、仮想マシンの機能はコンテナより少ないです。しかし、将来的には両方のインスタンスタイプで同じ機能をサポートする計画です。


仮想マシンで有効な機能を確認するには、ドキュメントのインスタンスの設定項目の表の「条件」のカラムをチェックしてください(英語ドキュメントはこちら)。

インスタンスの起動

lxc launch コマンドを使ってインスタンスを起動できます。起動したいイメージと、作成するインスタンスの名前を指定しなければなりません。

色々なオペレーティングシステムのイメージがビルトインのイメージサーバーから利用できます。詳細はイメージの項目をご覧ください。イメージサーバー名とイメージの名前を指定しなければなりません。

コンテナの起動

コンテナを起動するには次のようなコマンドを実行します:

lxc launch <image_server>:<image_name> <instance_name>

例えば、images サーバーから Ubuntu 20.04 イメージを取得し、ubuntu-container という名前のインスタンス名でコンテナを起動するには、次のようなコマンドを実行します:

lxc launch images:ubuntu/20.04 ubuntu-container

仮想マシンの起動

仮想マシンを起動するには次のようなコマンドを実行します:

lxc launch <image_server>:<image_name> <instance_name> --vm

例えば、images サーバーから Ubuntu 20.04 イメージを取得し、ubuntu-vm という名前のインスタンス名で仮想マシンを起動するには、次のようなコマンドを実行します:

lxc launch images:ubuntu/20.04 ubuntu-vm --vm

インスタンスの管理

LXD インスタンスを管理するには LXD のクライアントツールである lxc を使います。

次のように実行すると、利用できるすべてのコマンドの概要とオプションが表示できます:

    lxc

フラグやオプションのような各コマンドの詳細な情報は lxc <command> --help と実行します。

インスタンスのリスト

すべてのインスタンスを一覧するには次のコマンドを実行します:

lxc list

例えば、タイプやステータスを使って表示するインスタンスをフィルタリングするには:

lxc list type=container
lxc list status=running

名前でフィルタリングすることもできます。複数のインスタンスを表示するには、名前で正規表現を使います。例えば:

lxc list ubuntu.*

すべてのフィルターオプションを見るには lxc list --help を実行してみてください。

インスタンスの情報を見る

インスタンスについての詳細な情報を確認するには次のコマンドを実行します:

lxc info <instance_name>

インスタンスの最新のログを表示するには、コマンドに --show-log を追加します:

lxc info <instance_name> --show-log

インスタンスの起動と停止

インスタンスを起動するには次のコマンドを実行します:

lxc start <instance_name>

インスタンスが存在しない場合やすでに起動している場合はエラーが表示されるでしょう。

インスタンスを停止するには次のコマンドを実行します:

lxc stop <instance_name>

インスタンスが存在しない場合や起動していない場合はエラーが表示されるでしょう。

インスタンスの削除

もうインスタンスが必要でない場合は削除できます。削除する前にインスタンスが停止している必要があります。

インスンタンスを削除するには次のコマンドを実行します:

lxc delete <instance_name>

警告


このコマンドはインスタンスとそのインスタンスのすべてのスナップショットを削除します。


誤ってインスタンスを削除しないようにするには、「インスタンスの誤った削除を防ぐ」をご覧ください。

インスタンスの設定

インスタンスに設定できる設定オプションのリストは LXD ドキュメントの「インスタンスの設定」をご覧ください。

インスタンスの設定は様々なカテゴリーから構成されています:

プロパティ
インスタンス作成時に設定されるプロパティ。例えばインスタンス名やアーキテクチャーがあります。これらのプロパティは他の設定オプションと同じような方法で変更はできません。
インスタンスオプション
インスタンスに直接関係する設定オプション。例えば起動時の設定、セキュリティの設定、ハードウェア制限、カーネルモジュール、スナップショット、ユーザー設定の値などがあります。
インスタンスデバイス
インスタンスにアタッチされているデバイス。例えば、ネットワークインターフェース、マウントポイント、USB や GPU デバイスなどです。これらのデバイスはインスタンスデバイスの種類に応じて インスタンスデバイスオプション を持つことができます。

対象のインスタンスタイプでそれぞれの設定オプションが使えるかどうかは、インスタンスの設定ページの表の「条件」列をチェックしてください。

これらのオプションは、インスタンスの起動時か実行時に設定できます。また、プロファイルを作成して、設定オプションのセットを保存し、適用できます。

インスタンス起動時に設定を指定する

インスタンスを起動する時にインスタンスに対するオプションを指定するには、--config(もしくは短い形式の -c)フラグを lxc launch コマンドで使用してください。--config ではインスタンスオプションのみが指定できることに注意してください。この方法でインスタンスデバイスの追加や設定はできません。

例えば、1vCPU と 192MiB RAM をコンテナの制限値として設定するには、次のようなオプションを追加してください:

lxc launch images:ubuntu/20.04 ubuntu-limited -c limits.cpu=1 -c limits.memory=192MiB

完全な設定を指定してインスタンスを起動するには .yaml ファイルを使って設定を指定します(インスタンスデバイスも含めることができます)。必要な変更のために既存のインスタンスの設定内容をチェックします(インスタンス設定の表示を参照)。

例えば、config.yaml から設定を読んでコンテナを起動するには、次のコマンドを実行します:

lxc launch images:ubuntu/20.04 ubuntu-config < config.yaml

ひとつ以上のプロファイルを適用して、インスタンスを起動するときに設定を指定することもできます。詳しくはプロファイルの使用をご覧ください。

実行時の設定の更新

インスタンス実行中にインスタンスオプションを更新するには、lxc config set コマンドを使います。インスタンス名とインスタンスオプションの設定項目(キー)と値の指定が必要です。

lxc config set <instance_name> <option_key>=<option_value> <option_key>=<option_value> ...

例えば、コンテナのメモリー制限値を変更するには次のコマンドを実行します:

lxc config set ubuntu-limited limits.memory=128MiB

インスタンスのインスタンスデバイスの追加し設定を行うには、lxc config device add コマンドを使います。インスタンス名、デバイス名、デバイスタイプ、デバイスオプション(デバイスタイプによる)の指定が必要です:

lxc config device add <instance_name> <device_name> <device_type> <device_option_key>=<device_option_value> <device_option_key>=<device_option_value> ...

例えば、インスタンス内の /opt にホストシステムの /share/c1 を追加するには次のコマンドを実行します:

lxc config device add ubuntu-container disk-storage-device disk source=/share/c1 path=/opt

すでに追加されているインスタンスデバイスのインスタンスデバイスオプションを設定するには、lxc config device set コマンドを使います。

インスタンス設定の表示

インスタンスの現在の設定を表示するには次のコマンドを実行します:

lxc config show <instance_name> -e

設定は YAML フォーマットで表示されます。

プロファイルの使用

プロファイルは設定オプションのセットを保存します。インスタンスオプション、インスタンスデバイス、インスタンスデバイスオプションを含めることができます。

1 つのインスタンスにいくつでもプロファイルを適用できます。複数のプロファイルは指定した順に適用されるので、特定の設定項目(キー)を指定した最後のプロファイルが優先されます。しかし、インスタンス固有の設定は常にプロファイルによる設定よりも優先されます。

インスタンスタイプに適合しない設定オプションを含むプロファイルを適用する場合、適合しないオプションは無視されエラーにはなりません。

新しいインスタンスを起動するときにプロファイルを何も指定しない場合は、default プロファイルが自動的に適用されます。このプロファイルはネットワークインターフェースとルートディスクを定義します。default プロファイルは名前を変更したり削除したりできません。

プロファイルの参照

利用可能なすべてのプロファイルのリストを表示するには次のコマンドを実行します:

lxc profile list

プロファイルの内容を見るには次のコマンドを実行します:

lxc profile show <profile_name>

空のプロファイルの作成

空のプロファイルの作成は次のコマンドを実行します:

lxc profile create <profile_name>

プロファイルの編集

特定の設定オプションを設定するか、もしくは YAML フォーマットのプロファイルの全体を編集することもできます。

プロファイルの特定のオプションを設定する

プロファイルのインスタンスオプションを設定するには lxc profile set コマンドを使います。このコマンドの実行には、インスタンスオプションのプロファイル名、設定項目(キー)、値の指定が必要です。

lxc profile set <profile_name> <option_key>=<option_value> <option_key>=<option_value> ...

プロファイルのインスタンスデバイスを追加しして設定するには lxc profile device add コマンドを使います。このコマンドの実行にはプロファイル名、デバイス名、デバイスタイプ、(デバイスタイプに依存する)デバイスオプションの指定が必要です。

lxc profile device add <instance_name> <device_name> <device_type> <device_option_key>=<device_option_value> <device_option_key>=<device_option_value> ...

すでにプロファイルに追加されているインスタンスデバイスのインスタンスデバイスオプションを設定するには lxc profile device set コマンドを使います。

プロファイル全体の編集

設定オプションごとに別々に設定する代わりに、YAML フォーマットですべてのオプションを一度で編集できます。

必要な変更を行うために既存のプロファイルやインスタンスの設定をチェックします。例えば、default プロファイルは次のようになります:

config: {}
description: Default LXD profile
devices:
  eth0:
    name: eth0
    network: lxdbr0
    type: nic
  root:
    path: /
    pool: default
    type: disk
name: default
used_by:

インスタンスオプションは config 配下の配列として与えられます。インスタンスデバイスとインスタンスデバイスオプションは devices 配下で与えられます。

標準のターミナルエディタを使ってプロファイルを編集するには次のコマンドを実行します:

lxc profile edit <profile_name>

代わりに、設定が書かれた YAML ファイル(例えば profile.yaml というようなファイル)を作成し、次のコマンドを実行してプロファイルに設定を書き込むこともできます:

lxc profile edit <profile_name> < profile.yaml

プロファイルのインスタンスへの適用

プロファイルをインスタンスに適用するには次のコマンドを実行します:

lxc profile add <instance_name> <profile_name>

Tip


プロファイルを追加した後に設定をチェックします: lxc config show <instance_name>


すると、profiles 配下に適用したプロファイルがリスト表示されるでしょう。しかし、プロファイル内の設定オプションは config 配下には見えません(-e フラグを追加した場合を除く)。これは、設定がプロファイルから取得したものであり、インスタンスの設定ではないからです。


これは、もしプロファイルを編集した場合、変更はそのプロファイルを使っている自動的にすべてのインスタンスに適用されることを意味します。

インスタンスを作成して起動する(launchする)ときに --profile (や短い形式の -p)フラグを追加し、プロファイルを指定できます。

lxc launch <image> <instance_name> -p <profile> -p <profile> ...

インスタンスからのプロファイルの削除

インスタンスからプロファイルを削除するには次のコマンドを実行します:

lxc profile remove <instance_name> <profile_name>

コマンドの実行

インスタンス上でコマンドを実行するには、ホストマシンから実行するか、コンテナにログインするかのどちらかで行います。

ホストからコマンドを実行

ホストマシンのターミナルから単一のコマンドを実行するには、lxc exec コマンドを使います:

lxc exec <instance_name> -- <command>

例えば、コンテナ上でパッケージのリストを更新するには次のようにコマンドを実行します:

lxc exec ubuntu-container -- apt-get update

シェルアクセスの取得

注意


次の説明は、コンテナが /bin/bash コマンドを持っていると仮定しています。もし /bin/bash コマンドがない場合は、適切なコマンドに置き換えてください。

コンテナ内で直接コマンドを実行するためにコンテナ内のシェルを起動します。次のようにコマンドを実行します:

lxc exec <instance_name> -- /bin/bash

デフォルトでは、root ユーザーでログインします。もし、違うユーザーでログインしたい場合は次のコマンドを実行します:

lxc exec <instance_name> -- su --login <user_name>

注意


多くのコンテナでは、最初にユーザーを作成しなければなりません。

コンテナのシェルを抜けるには、exit と入力するか Ctrl+d を押します。

仮想マシンへのログオン

仮想マシンを実行しているのであれば、次のコマンドでコンソールログオンできます:

lxc console <vm_name>

デタッチするには、Ctrl+a-q を押します。

ファイルへのアクセス

コンテナのファイルにアクセスして、コンテナからホストマシンに pull したり、ホストマシンからファイルをコンテナに push したりできます。

コンテナからのファイルの Pull

次のコマンドを使ってコンテナからファイルを取得します:

lxc file pull <instance_name>/<path_to_file> <location_on_host>

例えば、/etc/hosts ファイルをカレントフォルダに pull するには、次のコマンドを実行します:

lxc file pull ubuntu-container/etc/hosts .

ホストシステム上にコンテナのファイルを pull する代わりに、stdin に pull して他のコマンドに pipe で渡せます。これは、例えばログファイルをチェックするような場合に有用です:

lxc file pull ubuntu-container/var/log/syslog - | less

フォルダ内のすべてを pull するには次のコマンドを実行します:

lxc file pull -r <instance_name>/<path_to_folder> <location_on_host>

コンテナへのファイルの Push

コンテナへファイルを push するには次のコマンドを実行します:

lxc file push <location_on_host> <instance_name>/<path_to_file>

フォルダ内のすべてを push するには次のコマンドを実行します:

lxc file push -r <location_on_host> <instance_name>/<path_to_folder>

イメージ

インスタンスはイメージをベースにしています。これは基本的なオペレーティングシステム(例えば Linux ディストリビューション)と LXD に関係する情報を含んでいます。

次でビルトインイメージーサーバーを使った例を紹介します(後述)。

さらなるオプションについては Advanced Guide - Advanced options for Images をご覧ください。

Use remote image servers

もっとも簡単にイメージを扱う方法は、ビルトインのリモートイメージサーバーを使うことです。

ビルトインのイメージサーバーは次のように取得できます:

lxc remote list

LXD はデフォルトで 3 つのサーバーが登録されています:

  1. ubuntu: (stable の Ubuntu イメージ )
  2. ubuntu-daily: (Ubuntu イメージのデイリービルド )
  3. images: (他の多数のディストリビューション))

イメージサーバー上のイメージのリスト

イメージサーバー images 上のイメージリストを取得するには次のようにします:

lxc image list images:

詳細

リストの見方は大部分は見るだけでわかります。

イメージの検索

イメージは特定の要素(例えばディストリビューション名)を指定して検索できます。

すべての Debian イメージを検索するには:

lxc image list images: debian

すべての 64bit の Debian イメージを検索するには:

lxc image list images: debian amd64

仮想マシンのイメージ

イメージの cloud バリアントを使うことをおすすめします(ALIAScloud タグで確認できます)。このようなイメージは LXD エージェントと cloud-init を含んでいます。また、サイズは自動的に大きくなり、毎日テストされています。

さらなる情報とリンク

さらに詳細な情報を見るには次のページをご覧ください:


  1. Running virtual machines with lxd, including a short howto for a Microsoft Windows VM.