LXD 資料一覧
2016/5/8更新
対応バージョン: 2.0
LXD 2.0上でコンテナを作成して各種管理を行う手順を示す。導入OSはUbuntu 16.04とする。
尚、LXD 1.0での手順は以下を参照のこと。
関連資料・記事
LXDインストール
インストール
# apt install lxd
初期化
まず最初にLXDの初期化を行う。必要とする環境に応じた設定を行う。
# lxd init (バックエンドのストレージを通常のディレクトリ階層(dir)かZFSから選択) Name of the storage backend to use (dir or zfs): <- ここではdir (LXDをネットワーク経由で使用するか) Would you like LXD to be available over the network (yes/no)? <- ここではyes (LXDをバインドするIPアドレス) Address to bind LXD to (not including port): <- ここではローカル(0.0.0.0) (LXDの待受ポート) Port to bind LXD to (8443 recommended): <- ここでは8443 (新しいクライアントを認証するパスワード) Trust password for new clients: <- ***** Again: <- ***** (LXD用にブリッジネットワークを構成するか) Do you want to configure the LXD bridge (yes/no)? <- ここではyes LXD has been successfully configured.
ここに画像入れる)
サービス有効化・起動
# systemctl enable lxd # systemctl start lxd
コンテナイメージの取得・インポートからコンテナ作成・起動・削除まで
コンテナイメージ取得・インポート、コンテナ作成・起動
コンテナのイメージはhttp://images.linuxcontainers.org/にて配布されているが、lxc launchコマンドでイメージのダウンロードからインポート、コンテナの作成・起動までを自動化できる。
ここではUbuntu 16.04(64bit)のイメージを取得して「u1」というコンテナを作成・起動する。
# lxc launch ubuntu:16.04 u1 # lxc image list +-----+------------+------+---------------------------------------------+------+--------+-----------------------------+ |ALIAS|FINGERPRINT |PUBLIC| DESCRIPTION | ARCH | SIZE | UPLOAD DATE | +-----+------------+------+---------------------------------------------+------+--------+-----------------------------+ | |f4c4c60a6b75|no |ubuntu 16.04 LTS amd64 (release) (20160420.3)|x86_64|137.54MB|May 8, 2016 at 3:36am (UTC)| +-----+------------+------+---------------------------------------------+------+--------+-----------------------------+ # lxc list +------+---------+---------------------+------+------------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +------+---------+---------------------+------+------------+-----------+ | u1 | RUNNING | 10.94.71.215 (eth0) | | PERSISTENT | 0 | +------+---------+---------------------+------+------------+-----------+ # lxc info u1 コンテナ名: u1 アーキテクチャ: x86_64 作成日時: 2016/05/08 03:36 UTC 状態: Running タイプ: persistent プロファイル: default Pid: 28674 IPアドレス: eth0: inet 10.94.71.215 vethADVXKT eth0: inet6 fe80::216:3eff:fea8:de06 vethADVXKT lo: inet 127.0.0.1 lo: inet6 ::1 リソース: プロセス数: 19 メモリ消費量: メモリ (現在値): 45.59MB メモリ (ピーク): 164.11MB ネットワーク使用状況: eth0: 受信バイト数: 1.23kB 送信バイト数: 1.68kB 受信パケット: 8 送信パケット: 12 lo: 受信バイト数: 1.48kB 送信バイト数: 1.48kB 受信パケット: 20 送信パケット: 20
コンテナは以下の場所に格納される。
/var/lib/lxd/containers/<コンテナ名>/
コンテナのルートファイルシステムは以下に作成され、bin、devなどひと通りのディレクトリ構成が作成される。
/var/lib/lxd/containers/<コンテナ名>/rootfs
# ls /var/lib/lxd/containers/u1/rootfs/ bin/ dev/ home/ lib64/ mnt/ proc/ run/ snap/ sys/ usr/ boot/ etc/ lib/ media/ opt/ root/ sbin/ srv/ tmp/ var/
容量にして660MB程度となる。
# du -sh /var/lib/lxd/containers/u1/rootfs/ 660M /var/lib/lxd/containers/u1/rootfs/
またコンテナ全体の設定は以下のファイルで行う。
/var/lib/lxd/containers/<コンテナ名>/metadata.yaml
コンテナ内のプログラムを実行する場合はlxc execコマンドを使用する。
# lxc exec u1 -- uname -n u1
コンテナ上ではSSHサーバが動作しているのでSSH接続が可能であるが、パスワード認証が許可されていないのでここではいったんコンテナのシェルを起動して接続する。
# ssh ubuntu@10.94.71.215 Permission denied (publickey). # lxc exec u1 -- bash root@u1:~#
SSH接続におけるパスワード認証が必要であればコンテナ上のSSHサーバの設定を変更する。
root@u1:~# vi /etc/ssh/sshd_config : 52 PasswordAuthentication no <- yesに変更 : root@u1:~# systemctl restart sshd
コンテナにはデフォルトでubuntuアカウントが定義されているのでパスワードを設定しておく。
root@u1:~# passwd ubuntu Enter new UNIX password: ***** Retype new UNIX password: ***** passwd: password updated successfully root@u1:~# exit
これでコンテナにSSH接続ができるようになる。
# ssh ubuntu@10.94.71.215 ubuntu@10.94.71.215's password: ***** : ubuntu@u1:~$
コンテナ終了
コンテナを終了させるにはlxc-stopを使用する。
# lxc-stop -n c1
コンテナ削除
コンテナを削除するにはlxc-destroyを使用する。
# lxc-destroy -n c1
コンテナ情報出力
コンテナの情報はlxc-lsやlxc-infoで確認できる。
# lxc-ls c1 # lxc-ls -f NAME STATE AUTOSTART GROUPS IPV4 IPV6 c1 RUNNING 0 - 10.0.3.45 - # lxc-info -n c1 Name: c1 State: RUNNING PID: 6077 IP: 10.0.3.45 CPU use: 0.21 seconds BlkIO use: 4.00 KiB Memory use: 12.89 MiB KMem use: 0 bytes Link: vethBNRV8T TX bytes: 1.34 KiB RX bytes: 914 bytes Total bytes: 2.23 KiB
topコマンドのような統計情報を表示するにはlxc-topを使用する。
# lxc-top Container CPU CPU CPU BlkIO Mem Name Used Sys User Total Used c1 0.22 0.12 0.07 4.00 KB 12.63 MB TOTAL 1 of 1 0.22 0.12 0.07 4.00 KB 12.63 MB
コンテナの状態を監視するにはlxc-monitorを使用する。
# lxc-monitor
例えば起動しているコンテナを停止(lxc-stop -n c1)すると以下のような出力が得られる。
# lxc-monitor 'c1' changed state to [STOPPING] 'c1' changed state to [STOPPED]
コンテナ内のプログラム実行
外部からコンテナ内のプログラムを実行するにはlxc-consoleでコンソール接続してもよいが単純に一つのプログラムを実行するだけならlxc-executeを使用すればよい。
しかもコンテナを起動している必要もなく(起動しているとエラーになる)、実行速度も申し分ない。
# lxc-execute -n c1 -- uname -n c1
コンテナ管理
コンテナのクローン作成
既存のコンテナをコピーしてクローンを作る場合lxc-copyを使用する(かつてのlxc-cloneの置き換え)。コピー元のコンテナは停止している必要がある。
# lxc-stop -n c1 # lxc-copy -n c1 -N c2 # lxc-ls -f NAME STATE AUTOSTART GROUPS IPV4 IPV6 c1 STOPPED 0 - - - c2 STOPPED 0 - - -
コンテナ内のプロセス制御
コンテナ内のプロセスを全て凍結するにはlxc-freezeを、凍結を解除するにはlxc-unfreezeをそれぞれ使用する。
# lxc-start -n c1 # lxc-freeze -n c1 # lxc-ls -f NAME STATE AUTOSTART GROUPS IPV4 IPV6 c1 FROZEN 0 - 10.0.3.45 - c2 STOPPED 0 - - - # lxc-unfreeze -n c1 # lxc-ls -f NAME STATE AUTOSTART GROUPS IPV4 IPV6 c1 RUNNING 0 - 10.0.3.45 - c2 STOPPED 0 - - -
コンテナのスナップショット管理
コンテナのスナップショットを取得したりリストアするにはlxc-snapshotを使用する。スナップショットを取得するにはコンテナが停止している必要がある。
# lxc-stop -n c1 # lxc-ls -f NAME STATE AUTOSTART GROUPS IPV4 IPV6 c1 STOPPED 0 - - - c2 STOPPED 0 - - - # lxc-snapshot -n c1
取得したスナップショットはsnapXとして/var/lib/lxc/<コンテナ名>/snaps配下に格納される。-Lオプションで一覧が参照できる。
# lxc-snapshot -n c1 -L snap0 (/var/lib/lxc/c1/snaps) 2016:05:07 20:18:33 # lxc-snapshot -n c1 # lxc-snapshot -n c1 # lxc-snapshot -n c1 -L snap0 (/var/lib/lxc/c1/snaps) 2016:05:07 20:18:33 snap1 (/var/lib/lxc/c1/snaps) 2016:05:07 20:19:12 snap2 (/var/lib/lxc/c1/snaps) 2016:05:07 20:19:44
複数あるスナップショットのうち特定の時点にリストアしたい場合は-rオプションとともにスナップショット名を指定する。
# lxc-snapshot -n c1 -r snap1
スナップショットをリストアしても削除はされないので削除したい場合は-dオプションでスナップショット名を指定して明示的に削除する。
# lxc-snapshot -n c1 -d snap0 # lxc-snapshot -n c1 -d snap1 # lxc-snapshot -n c1 -d snap2 # lxc-snapshot -n c1 -L No snapshots
その他にも様々なコマンドがあるがここでは割愛する。詳しくは公式サイトを参照のこと。
LXCコマンドManページ (Linux Conainers)
参考サイト
LXCドキュメント (Linux Conainers)
LXC技術情報 (Qiita)