この文書について
この文書は、連載記事「LXC 1.0: Blog post series」の一つである以下の記事を翻訳したものです。連載の目次や注意点はこちらを参照してください。
この文書のライセンスは原文と同じく、Creative Commons BY-NC-SA 2.5のもとに提供されています。
LXCとはなんぞや?
ほとんどの人はその問いに対する答えを既に知っていることでしょう。まとめますと:
LXCはLinuxカーネルの隔離機能に対するユーザー空間のインターフェースです(訳注1)。強力なAPIとシンプルなツールを用いて、Linuxユーザーは簡単にシステムやアプリケーションのコンテナーを作成・管理できます。
私は二人いるLXCのアップストリームのメンテナーのうちの一人であり、もう一人はSerge Hallynです。このプロジェクトは、毎月マイルストーンをリリースするほど活発に開発されており、安定版は次の2月にリリースする予定です。これまでに67人の、背景も会社も異なる幅広い貢献者が開発に携わっています。
- プロジェクトは主にgithubで開発しています: http://github.com/lxc
- ウェブサイトもあります: http://linuxcontainers.org
- メーリングリストはこちらです: http://lists.linuxcontainers.org
LXC 1.0
1.0のリリースはどういう意味を持つのでしょうか?
そうですね、簡単に言うとLXCにとって最初の安定版のリリースであり、5年間の不具合修正をサポートする最初のリリースです。2014年の4月にリリース予定のUbuntu 14.04 LTSで採用される予定のリリースでもあります。
安定したAPIとバインディング群も提供し、今後の記事で紹介する予定の新機能を搭載しており、Androidを含むさまざまなホスト・ゲストディストリビューションをサポートしています。
どうやって入手するの?
読者の多くはUbuntuを使っていると仮定します。ここから先の記事では、私自身はUbuntu 14.04上のアップストリームのデイリービルドを使っていますが、私たちは12.04や12.10、13.04、13.10、14.04用のデイリービルドもメンテナンスしているので、最新のアップストリームのコードが欲しければ、私たちのPPAを使うと良いでしょう。
他にも、Ubuntu 12.04 LTS以降であればUbuntuから直接LXCを使うこともできます。使用しているUbuntuのリリースによって選択できるバージョンは変わります。またバックポートバージョンを使用することもできます。
自分自身でビルドすることも可能です(使用しているディストリビューションにパッケージが存在するのであれば、この方法はおすすめしません):
git clone git://github.com/lxc/lxc
cd lxc
sh autogen.sh
# パスを指定したい場合は、まず--helpオプション付きでconfigureスクリプトを実行すると良いでしょう
./configure
make
sudo make install
最初のコンテナーとは?
そうでした。それがこの記事の本来の目的でしたね?
LXCが、できればUbuntuのパッケージを使って、インストールされたとしましょう。あとは本当に簡単です:
# 「ubuntu」テンプレートを使って、ホストと同じUbuntuのバージョンとアーキテクチャである
# 「p1」コンテナーを作成します。すべての利用可能なオプションを表示したい場合は、
# "-- --help"を指定してください。
sudo lxc-create -t ubuntu -n p1
# コンテナーを(バックグラウンドで)起動します。
sudo lxc-start -n p1 -d
# 以下の方法のいずれかでコンテナーの中に入れます。
## コンテナーのコンソールをアタッチする(Ctrl-A + Qでデタッチできます)
sudo lxc-console -n p1
## コンテナーの中で直接bashプロセスを生成する(コンソールログインを回避する)
## 3.8以上のカーネルが必要です
sudo lxc-attach -n p1
## SSHでログインする
sudo lxc-info -n p1
ssh ubuntu@<lxc-infoで表示されたIPアドレス>
# 以下の方法のいずれかでコンテナーを終了できます。
## コンテナーの中から終了する
sudo poweroff
## コンテナーの外から安全に終了する
sudo lxc-stop -n p1
## コンテナーの外からkillする
sudo lxc-stop -n p1 -k
これで、最初のコンテナーはできました。Ubuntuだとこれだけですべてがうまく動くことがわかるかと思います。私たちのカーネルはLXCが使うであろうすべての機能をサポートしていますし、私たちのパッケージはコンテナーが標準で使用するブリッジやDHCPサーバーの設定も行うようになっています。これらはすべて設定で変更可能で、今後の記事でその方法を紹介する予定です。
訳注1
(訳注:記事のコメントに回答する形で、LXCについてもう少し初心者向けの説明をしていたのでここに追記しておきます)
chrootについて知っているのであれば、LXCを独自のネットワーク環境や独立したプロセスツリーを持つ強化版chrootと考えるのが簡単です(実際はもっと多くの機能を持っていますが)。
chrootについて知らないのであれば、極めて柔軟ではあるもののホストとカーネルを共有する必要のある仮想化技術のみを使ったオーバーヘッドのないLinux、が不確かな近似となるでしょう。