helloworlds

not a noun, it's a verb

【LXD】爆速でLXD環境を構築する!!

LXDとは?

コンテナと言えばDockerが有名ですが、LXDというシステムコンテナマネージャーもあります。

イメージとしては、仮想マシンと認識していれば大丈夫でしょう。 LXDを使用すれば、多数のKinuxディストリビューションを使用し、容易に開発環境が構築できます。

無料で利用できることや、起動が高速なこと、Dockerを利用する際の1コンテナ1プロセスといったベストプラクティスはないのが特徴でしょうか。

ググってみると、"LXC"という単語もヒットしますが、これはLXDの機能強化前のものです。 なので、LXDでできることはLXCでも実現可能です。

使ってみる

ここでは、とりあえず早くローカル環境にLXDを構築し、試しにCentOSのコンテナをたててみることを目的としています。

(※ VirtualBoxなどのインストール方法は割愛していきます。)

わたしの環境は、macOSです。

用意する

VirtualBox

まず、VirtualBoxをインストールします。

Downloads – Oracle VM VirtualBox

vagrant

vagrantもインストールしておきます。

Download - Vagrant by HashiCorp

Boxの追加

UbuntuのBoxをインストールします。

ubuntu - Vagrant Cloud

推奨されているのは、xenial64ですがお好きなメーカーのヴァージョンを選択します。

選択したらURLを控えましょう。控えたら、以下のように修正します。

https://vagrantcloud.com/ubuntu/boxes/<xenial64>/versions/<20170929.0.0>/providers/virtualbox.box
※ "<>"で囲んだ部分が任意のものに変わります。

任意のディレクトリに移動し、以下を実行します。 ボックスの追加には、時間がかかるかもしれません。

$ vagrant box add ubuntu/xenial64 https://vagrantcloud.com/ubuntu/boxes/xenial64/versions/20170929.0.0/providers/virtualbox.box
$ vagrant init ubuntu/xenia164
※ ボックスの名前など、コマンドのオプションで指定可能


# vagrantコマンドで、ubuntuを起動
$ vagrant up

VagrantFIleが作成されていて、エラーが出ていなければ順調です。

LXDのインストール

Ubuntuに入って、lxdをsnapを使用してインストールします。

$ vagrnat ssh


## 以下、Ubuntuでの実行


# 最新にアップデート
$ sudo apt update


# インストール
$ sudo su - 
$ snap install lxd


# vagrantユーザーでもlxcコマンドが使用できるようにする(任意)
$ sudo gpasswd -a vagrant lxd 
$ id                     ## 確認
uid=1000(vagrant) gid=1000(vagrant) groups=1000(vagrant),110(lxd) 

LXDが動くか確認

なにも起動させていないので、空の表だけでればOK。

# コンテナ&イメージ確認
$ lxc list
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |


$ lxc image list
| ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCH | SIZE | UPLOAD DATE |

LXDの初期設定

コンテナの起動の前に、設定をしてきます。 ここでは、細かい設定方法は省きます。

ただし、IPv6の設定のみnoを選択し、他はデフォルトを選択していきます。

# vagrantユーザーに戻っても、rootで実行しても大丈夫ですが、
# ここでは、vagrantユーザーで実行

# 途中の設定項目で、UIが変わって紫色の画面に移行しますが、表示されたIPなどをEnterで選択していきます。
$ sudo lxd init


LXD has been successfully configured.   ##  これが出たら完了

CentOSのコンテナをたてる

# リモートから取得できるイメージを確認
$ lxc image alias list images: | grep centos
| centos/6                            | 8b47ce0dd288 |                       |
| centos/6/amd64                      | 8b47ce0dd288 |               |
| centos/6/default                    | 8b47ce0dd288 |                 |
| centos/6/default/amd64              | 8b47ce0dd288 |         |
| centos/6/default/i386               | 4fc4ed167966 |             |
| centos/6/i386                       | 4fc4ed167966 |                   |
| centos/7                            | ef750fe8dd4c |                         |
| centos/7/amd64                      | ef750fe8dd4c |                 |
| centos/7/arm64                      | 2418b61d1c47 |               |
| centos/7/armhf                      | 4112b64d31c2 |                 |
| centos/7/default                    | ef750fe8dd4c |                    |
| centos/7/default/amd64              | ef750fe8dd4c |            |
| centos/7/default/arm64              | 2418b61d1c47 |          |
| centos/7/default/armhf              | 4112b64d31c2 |           |
| centos/7/default/i386               | 22f770b50316 |           |
| centos/7/default/ppc64el            | 91279dabc143 |        |
| centos/7/i386                       | 22f770b50316 |                |
| centos/7/ppc64el                    | 91279dabc143 |             |




# コンテナを起動 (今回はcentos/7を選択してみました)
$ lxc launch images:centos/7 centos7
Creating centos7
Starting centos7


# 確認 (作成されていればOK)
$ lxc list

これで完了です。

まとめ

Dockerとは違うコンテナを触ってみました。

私は業務の開発環境としても使用しています。(※ コスト面にも良いです笑 )

例えばAWSサービスを利用して、最小のインスタンスを建ててVPCにてセキュアなネットワークを構築。

LXDをインストールし、欲しい環境をインストール。

リモートからのアクセスを確立し、みんなで開発!

なんてことも、容易ですしVPCまわりをやったことない人にとっては勉強にもなりますし、みんなに喜んでもらえる環境にもなりそう!しかも、安い!

Ubuntuに依存してしまうということを除けば、扱いも共有も便利です。

作成した環境のイメージをエクスポートしたりすることも可能です。また、ホスト(自身のラップトップ)から、LXDで管理している環境に直でSSHすることも可能です。

LXDはDockerのイメージもありますので、コンテナonコンテナも可能。

Dockerよりは有名ではありませんが、この記事でやった環境を1回整えてしまえば開発も楽ちんですね!!

以上.