LXD 資料一覧

LXD 1.0導入手順

2015/7/5更新

対応バージョン: 0.7 via Ubuntu15.04

LXD 1.0上でコンテナを作成してコンソール接続するまでの一連の手順を示す。

尚、LXC 2.0での手順は以下を参照のこと。

関連資料・記事

インストール、サービス有効化 & 起動

インストール
% sudo apt install lxd
サービス有効化
% sudo systemctl enable lxd.service
Synchronizing state for lxd.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d lxd defaults
Executing /usr/sbin/update-rc.d lxd enable
サービス起動
% sudo systemctl start lxd.service

% sudo systemctl status lxd.service
● lxd.service - Container hypervisor based on LXC
   Loaded: loaded (/lib/systemd/system/lxd.service; enabled; vendor preset: enabled)
   Active: active (running) since 日 2015-07-05 20:15:47 JST; 8s ago
 Main PID: 19582 (lxd)
   Memory: 276.0K
   CGroup: /system.slice/lxd.service
           ‣ 19582 /usr/bin/lxd --group lxd --tcp [::]:8443

 7月 05 20:15:47 k1 systemd[1]: Started Container hypervisor based on LXC.
 7月 05 20:15:47 k1 systemd[1]: Starting Container hypervisor based on LXC...

コンテナイメージインポート、コンテナ作成

コンテナのイメージはhttp://images.linuxcontainers.org/にて配布されており、lxd-imagesというPythonのフロントエンドを使うとダウンロードからインポートまでを自動化できる。

ここではCentOS 6(64bit)のコンテナイメージをインポートして「centos6」という名前を付ける。

% sudo lxd-images import lxc centos 6 amd64 --alias centos6
Downloading the GPG key for https://images.linuxcontainers.org
Downloading the image list for https://images.linuxcontainers.org
Validating the GPG signature of /tmp/tmppke5bbta/index.json.asc
Downloading the image: https://images.linuxcontainers.org/images/centos/6/amd64/default/20150619_02:16/lxd.tar.xz
Validating the GPG signature of /tmp/tmppke5bbta/centos-6-amd64-default-20150619_02:16.tar.xz.asc
Image imported as: afae698680fcf11b915cc3b6f06b3af6c085a59efa4b368b80ddcf9d66b73e3d
Setup alias: centos6

% sudo lxc image list
+---------+--------------+--------+-------------+--------+-----------------------------+
|  ALIAS  | FINGERPRINT  | PUBLIC | DESCRIPTION |  ARCH  |         UPLOAD DATE         |
+---------+--------------+--------+-------------+--------+-----------------------------+
| centos6 | afae698680fc | no     |             | x86_64 | Jul 5, 2015 at 9:16pm (JST) |
+---------+--------------+--------+-------------+--------+-----------------------------+

コンテナイメージが用意できたらコンテナを作成する。ここでは「c6」という名前で作成する。

% sudo lxc launch centos6 c6
Creating container...done
Starting container...done

% sudo lxc list
+------+---------+-----------+------+-----------+
| NAME |  STATE  |   IPV4    | IPV6 | EPHEMERAL |
+------+---------+-----------+------+-----------+
| c6   | RUNNING | 10.0.3.18 |      | NO        |
+------+---------+-----------+------+-----------+

% sudo lxc info c6
Name: c6
Status: RUNNING
Init: 25633
Ips:
  eth0:	 IPV4	10.0.3.18
  lo:	 IPV4	127.0.0.1
  lo:	 IPV6	::1

コンテナが作成されたら通常のコマンドが実行できる。

% sudo lxc exec c6 -- uname -a
Linux c6 3.19.0-21-generic #21-Ubuntu SMP Sun Jun 14 18:31:11 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

% sudo lxc exec c6 -- cat /etc/issue
CentOS release 6.6 (Final)
Kernel \r on an \m

尚、コンテナ上のファイルシステムはホスト上の/var/lib/lxd/lxc/<コンテナ>/rootfsに格納される。

% sudo ls -l /var/lib/lxd/lxc/c6/rootfs
合計 84
dr-xr-xr-x  2 100000 100000  4096  6月 19 11:21 bin/
dr-xr-xr-x  2 100000 100000  4096  9月 23  2011 boot/
drwxr-xr-x  4 100000 100000  4096  6月 19 11:21 dev/
drwxr-xr-x 49 100000 100000  4096  7月  5 22:11 etc/
drwxr-xr-x  2 100000 100000  4096  9月 23  2011 home/
dr-xr-xr-x  7 100000 100000  4096  6月 19 11:21 lib/
dr-xr-xr-x  7 100000 100000 12288  6月 19 11:21 lib64/
drwxr-xr-x  2 100000 100000  4096  9月 23  2011 media/
drwxr-xr-x  2 100000 100000  4096  9月 23  2011 mnt/
drwxr-xr-x  2 100000 100000  4096  9月 23  2011 opt/
dr-xr-xr-x  2 100000 100000  4096  9月 23  2011 proc/
dr-xr-x---  2 100000 100000  4096  7月  7 14:47 root/
dr-xr-xr-x  2 100000 100000  4096  6月 19 11:21 sbin/
drwxr-xr-x  2 100000 100000  4096  6月 19 11:21 selinux/
drwxr-xr-x  2 100000 100000  4096  9月 23  2011 srv/
drwxr-xr-x  2 100000 100000  4096  9月 23  2011 sys/
drwxrwxrwt  2 100000 100000  4096  7月  7 15:38 tmp/
drwxr-xr-x 13 100000 100000  4096  6月 19 11:21 usr/
drwxr-xr-x 17 100000 100000  4096  6月 19 11:21 var/

% sudo cat /var/lib/lxd/lxc/c1/rootfs/etc/issue
CentOS release 6.6 (Final)
Kernel \r on an \m

コンソール接続

コンテナが作成されたのでコンソールで接続してみる。接続は簡単でコンテナ上でシェルを実行すればよい。

% sudo lxc exec c6 bash

[root@c6 ~]# uname -n
c6

[root@c6 ~]# id
uid=0(root) gid=0(root) groups=0(root)

[root@c6 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
25: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:16:3e:67:2d:4b brd ff:ff:ff:ff:ff:ff
    inet 10.0.3.18/24 brd 10.0.3.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::216:3eff:fe67:2d4b/64 scope link 
       valid_lft forever preferred_lft forever

[root@c6 ~]# ip r
default via 10.0.3.1 dev eth0 
10.0.3.0/24 dev eth0  proto kernel  scope link  src 10.0.3.18 
169.254.0.0/16 dev eth0  scope link  metric 1025 

[root@c6 ~]# ps -ef
UID  PID PPID C STIME TTY         TIME CMD
root   1    0 0 08:19 ?       00:00:00 /sbin/init
root 226    1 0 08:19 ?       00:00:00 /sbin/dhclient -H c6 -1 -q -lf /
root 266    1 0 08:19 ?       00:00:00 /sbin/rsyslogd -i /var/run/syslo
root 296    1 0 08:19 console 00:00:00 /sbin/mingetty --nohangup consol
root 514    0 0 08:35 ?       00:00:00 bash
root 521    1 0 08:35 ?       00:00:00 /sbin/mingetty --nohangup /dev/t
root 522  514 0 08:35 ?       00:00:00 ps -ef

[root@c6 ~]# exit
exit

コンテナ起動・停止

コンテナの起動と停止はそれぞれlxc start、lxc sttopで行う。

% sudo lxc start c6

% sudo lxc list
+------+---------+------+------+-----------+
| NAME |  STATE  | IPV4 | IPV6 | EPHEMERAL |
+------+---------+------+------+-----------+
| c6   | RUNNING |      |      | NO        |
+------+---------+------+------+-----------+

% sudo lxc stop c6

% sudo lxc list
+------+---------+------+------+-----------+
| NAME |  STATE  | IPV4 | IPV6 | EPHEMERAL |
+------+---------+------+------+-----------+
| c6   | STOPPED |      |      | NO        |
+------+---------+------+------+-----------+

% sudo lxc exec c6 -- uname -a
error: Container is not running.

コンテナ削除

lxc deleteを使用する。

% sudo lxc delete c6
% sudo lxc list
+------+-------+------+------+-----------+
| NAME | STATE | IPV4 | IPV6 | EPHEMERAL |
+------+-------+------+------+-----------+
+------+-------+------+------+-----------+

Ephemeralコンテナ使用

LXD 0.7で実装されたEphemeralコンテナを使うとlxc stopでコンテナが停止するとコンテナ自体が削除される。

この機能を使うと揮発性のコンテナを作成することができる。

コンテナをEphemeralにするにはlxc launchコマンドに-eオプションを付けるだけでよい。

ここでは永続化コンテナのc1と揮発性コンテナのc2を作成してみる。

% sudo lxc launch centos6 c1
% sudo lxc launch centos6 c2 -e
% sudo lxc list
+------+---------+-----------+------+-----------+
| NAME |  STATE  |   IPV4    | IPV6 | EPHEMERAL |
+------+---------+-----------+------+-----------+
| c1   | RUNNING | 10.0.3.21 |      | NO        |
| c2   | RUNNING | 10.0.3.36 |      | YES       |
+------+---------+-----------+------+-----------+

この状態で2つのコンテナを停止させてみるとc2だけコンテナそのものが削除されているのが分かる。

% sudo lxc stop c1
% sudo lxc stop c2
% sudo lxc list
+------+---------+------+------+-----------+
| NAME |  STATE  | IPV4 | IPV6 | EPHEMERAL |
+------+---------+------+------+-----------+
| c1   | STOPPED |      |      | NO        |
+------+---------+------+------+-----------+

関連資料・記事