イメージのダウンロード
テンプレートには,lxc-download
という名前のテンプレートが付属しており,
この機能は1.
このコンテナイメージは,
Dockerではあらかじめ作成したイメージが提供されており,
執筆時点で準備されているダウンロード用のイメージは以下の通りです。
ディストリビューション | バージョン | アーキテクチャ | バリアント |
---|---|---|---|
CentOS | 6 | amd64 i386 | default |
7 | amd64 | default | |
Debian | jessie sid wheezy | amd64 armel armhf i386 | default |
Fedora | 19 20 | amd64 armhf i386 | default |
Gentoo | current | amd64 armhf i386 | default |
openSUSE | 12. | amd64 i386 | default |
Oracle | 6. | amd64 i386 | default |
Plamo | 5. | amd64 i386 | default mini |
Ubuntu | lucid | amd64 i386 | default |
precise | amd64 armel armhf i386 | default | |
trusty utopic | amd64 arm64 armhf i386 ppc64el | default |
「バリアント」 とは
ディストリビューションによってはコンテナイメージ内に含まれるパッケージが異なる複数のイメージが準備されていることがあります。このイメージごとに名前が付けられており,
APIと各種言語のバインディングの提供
LXCにはlxc-
で始まるコンテナ用のコマンドが付属しています。これらは全てLXCライブラリのAPI
このAPIを使って自分でアプリケーション内からコンテナが操作できます。また,
- Python3
- Lua
- Go
- Ruby
このうち,
- ※2)
- その後,
公式ページにはバインディングとしてHaskellが追加されました。ただしlxc公式リポジトリ外の配布です。
LXCでインストールされるコマンドのいくつかはPython3とLuaで書かれています。
- Python3で書かれているコマンド
- lxc-device, lxc-ls, lxc-start-ephemeral
- Luaで書かれているコマンド
- lxc-top
- ※3)
- バージョン1.
1からlxc-deviceとlxc-topはCで書かれるようになりました。ソースにはLuaで書かれたlxc-topも同梱されています。
いろいろなストレージバックエンドのサポート
ストレージバックエンドは,
1.
- ディレクトリ (デフォルト)
- btrfs
- zfs
- lvm
- ループデバイス
- aufs
- overlayfs
作成時やクローン,
またlvmを使用する場合,
クローンとスナップショット
テンプレートを使ってコンテナを新規に作成するのでなく,
btrfsやzfsやlvmのような多機能なストレージバックエンドを使っている場合は,
通常のディレクトリを使用している場合でも,
また,
セキュリティ
コンテナごとの隔離がされていない部分などに対するセキュリティの確保や,
また,
一般ユーザでのコンテナの起動
第2回で説明したユーザ名前空間を使った一般ユーザでのコンテナの作成と起動が可能です。
root権限で実行するコンテナと全く同じことが一般ユーザでできるわけではありませんが,
ネストしたコンテナ
コンテナのネストが可能です。つまりLXCで作成し起動したコンテナの中でコンテナが動作します。
日本語マニュアルの付属
これは機能ではありませんし,
LXC 1.
- ※4)
- その後韓国語マニュアルがマージされました。次のバージョンには韓国語マニュアルが付属するでしょう。
LXCの気になる点
LXCの改良すべき点はたくさんあると思います。しかし,
短所は思いつきませんが気になる点はあります。現時点で筆者が一番気になる所はcgroupの設定です。
コンテナに対してcgroupでリソース制限をかける場合,
たとえばdevicesサブシステムの場合,devices.
とdevices.
というファイルに許可したいデバイス用のアクセス権を設定しました。これをLXCで設定すると以下のようになります。
$ cat /usr/share/lxc/config/ubuntu.common.conf : (略) # Default cgroup limits lxc.cgroup.devices.deny = a ## Allow any mknod (but not using the node) lxc.cgroup.devices.allow = c *:* m lxc.cgroup.devices.allow = b *:* m ## /dev/null and zero lxc.cgroup.devices.allow = c 1:3 rwm lxc.cgroup.devices.allow = c 1:5 rwm : (略)
lxc.
に続いて,
カーネルのバージョンやディストリビューションの設定によってcgroupfs以下に現れるファイルが異なることもあります。細かくコンテナのリソース制御を行いたい場合にはcgroupの知識が必要なことに加えて,
この辺りを改善する提案はでていましたので,
まとめ
今回はLXC開発の歴史について紹介したあと,
次回からは今回紹介した特徴の説明も含めて,
Ubuntuを使った基本的な機能の紹介が済んだ後に,
最近のLXCのリリース
第4回の記事を執筆中にLXC 1.
1.
一方で次のバージョンとなる1.
1.