LXDでUbuntu16.04を動かしsnapshot運用

* この記事は古いです。[ubuntu16.04のLXD2.0でlxdbr0を利用しネットワーク接続 - Qiita](http://qiita.com/tukiyo3/items/f11df06516b20e5900d2)を参照してください。

----

* Dockerコンテナ生活に馴染めなかったらLXD使うのもひとつの手。
* VirtualboxにUbuntuをインストールして使うよりボトルネックがなくて良い

# ubuntu14.04でインストール

```bash:ubuntu14.04にて実施
apt-get -t trusty-backports install lxd
```

## ネットワーク設定

* 現在が以下とする。

```bash:/etc/network/interfaces
source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

auto enp3s0
iface enp3s0 inet manual

# https://github.com/lxc/lxd/issues/1343
auto br0
iface br0 inet static
    address 192.168.10.2
    netmask 255.255.255.0
    gateway 192.168.10.1
    dns-nameservers 8.8.8.8 8.8.4.4
    #
    bridge_ports enp3s0
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0
```

## 起動


```bash:イメージ提供元の追加
lxc remote add images images.linuxcontainers.org
```

これで[images.linuxcontainers.org](http://images.linuxcontainers.org/images/)で提供されているイメージを取得できる。

> error: Server certificate for host images.linuxcontainers.org:8443 has changed. Add correct certificate or remove certificate in /home/user1/.config/lxc/servercerts

と出た場合は
`rm /home/user1/.config/lxc/servercerts/images.crt`


```bash:コンテナ起動
lxc launch images:ubuntu/xenial/amd64 ubuntu
```

```bash:停止状態から起動する場合
lxc start ubuntu
```

```bash:IPアドレス確認
$ lxc list
+--------+---------+-------------------+------+-----------+-----------+
|  NAME  |  STATE  |       IPV4        | IPV6 | EPHEMERAL | SNAPSHOTS |
+--------+---------+-------------------+------+-----------+-----------+
| ubuntu | RUNNING | 10.0.3.170 (eth0) |      | NO        |         0 |
+--------+---------+-------------------+------+-----------+-----------+
```

```bash:コンテナに接続
lxc exec ubuntu -- /bin/bash
```

```bash:コンテナ内で作業
cat > /etc/apt/sources.list <<EOF
deb http://jp.archive.ubuntu.com/ubuntu/ xenial main restricted
deb http://jp.archive.ubuntu.com/ubuntu/ xenial multiverse
deb http://jp.archive.ubuntu.com/ubuntu/ xenial universe
deb http://jp.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
deb http://jp.archive.ubuntu.com/ubuntu/ xenial-updates multiverse
deb http://jp.archive.ubuntu.com/ubuntu/ xenial-updates universe
deb http://jp.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
EOF
apt-get update && apt-get install -y ssh
```

* 10.0.3.170

## 状態確認

```bash:
$ lxc profile show default
name: default
config: {}
devices:
  eth0:
    nictype: bridged
    parent: lxcbr0
    type: nic
```

----

# snapshot保存、復元、export

## snapshot

```bash:
$ lxc snapshot ubuntu
$ lxc list
+--------+---------+-------------------+------+-----------+-----------+
|  NAME  |  STATE  |       IPV4        | IPV6 | EPHEMERAL | SNAPSHOTS |
+--------+---------+-------------------+------+-----------+-----------+
| ubuntu | RUNNING | 10.0.3.170 (eth0) |      | NO        |         1 |
+--------+---------+-------------------+------+-----------+-----------+
Snapshots:
  /1.0/containers/ubuntu/snapshots/snap0
```

## rollback

```bash:スナップショットに戻す
$ lxc restore ubuntu snap0
```

## restore

```bash:スナップショットからイメージファイル化
$ lxc image list
+-------+--------------+--------+-----------------------+--------+----------+------------------------------+
| ALIAS | FINGERPRINT  | PUBLIC |      DESCRIPTION      |  ARCH  |   SIZE   |         UPLOAD DATE          |
+-------+--------------+--------+-----------------------+--------+----------+------------------------------+
|       | 69decdbccd33 | no     | Ubuntu xenial (amd64) | x86_64 | 66.65MB  | Dec 18, 2015 at 7:55am (JST) |
|       | dbbcf1d67e7d | no     |                       | x86_64 | 125.23MB | Dec 18, 2015 at 8:51am (JST) |
+-------+--------------+--------+-----------------------+--------+----------+------------------------------+
$ lxc image export dbbcf1d67e7d
Output is in dbbcf1d67e7d.tar.gz
```

* `dbbcf1d67e7d.tar.gz`が生成されるので大切に保管。

----

# ネットワーク設定

## 物理ネットワークに接続させたい場合

```bash:現状確認
$ lxc profile show ubuntu
name: default
config: (略)
devices:
  eth0:
    nictype: bridged
    parent: lxcbr0
    type: nic
```

```bash:
$ lxc list ubuntu
+--------+---------+-------------------+------+-----------+-----------+
|  NAME  |  STATE  |       IPV4        | IPV6 | EPHEMERAL | SNAPSHOTS |
+--------+---------+-------------------+------+-----------+-----------+
| ubuntu | RUNNING | 10.0.3.170 (eth0) |      | NO        |         2 |
+--------+---------+-------------------+------+-----------+-----------+
```

```diff:変更
 $ lxc config edit ubuntu
 name: default
 config: (略)
 devices:
   eth0:
     nictype: bridged
-    parent: lxcbr0
+    parent: br0
     type: nic
```

```bash:コンテナ再起動
lxc restart ubuntu
```

```bash:br0と同じネットワークに接続した
$ lxc list ubuntu
+--------+---------+------------------------+------+-----------+-----------+
|  NAME  |  STATE  |          IPV4          | IPV6 | EPHEMERAL | SNAPSHOTS |
+--------+---------+------------------------+------+-----------+-----------+
| ubuntu | RUNNING | 192.168.10.123 (eth0)  |      | NO        |         2 |
+--------+---------+------------------------+------+-----------+-----------+
```

## default profileの編集方法

```bash:
lxc profile show default
lxc profile edit default
lxc profile show default
```

----

## LXDで動かないもの

```bash:
fuse
sshfs
```