概要
勉強がてら lxc に触れてみました
バージョンによってエラーで動作しないケースがあったので、その辺も紹介します
環境
- Ubuntu 14.04 (ホストマシン)
- lxc 1.0.8-0ubuntu0.4
lxc のインストール
Ubuntu の場合パッケージが公開されているので、インストールは非常に簡単です
- apt-get -y install lxc
インストールが完了すると lxc-
というコマンドが使えるようになっています
lxc ではテンプレートと呼ばれるコンテナの雛形が準備されています
テンプレートは以下のディレクトリにあります
/usr/share/lxc/templates/
今回は ubuntu と centos テンプレートを使ってそれぞれのコンテナを起動してみます
Ubuntu コンテナの作成と起動
まずは ubuntu コンテナを起動してみます
- lxc-create -t ubuntu -n ubuntu0
でコンテナを作成します、-n はコンテナの名前なので好きな名前を指定してください
いろいろとコンテナの作成処理が走るので待ちます
作成が完了するとログインユーザのユーザ名とパスワードが表示されると思います
デフォルトだと ubuntu/ubuntu でログインできるようです
では、コンテナを起動してみましょう
- lxc-start -n ubuntu0 -d
で起動します
起動したらログインしてみます
コンテナのコンソール画面を起動するコマンドがあるので実行します
- lxc-console -n ubuntu0
これでログイン画面が表示されると思います
先程の ubuntu/ubuntu でログインしてみましょう
コンソールをコンテナからデタッチしたい場合は「Ctrl + a, q」でデタッチできます
Ctrl + a が prefix キーになっているようなのでコンソール上でカーソルを先頭に合わせたい場合は Ctrl + a を 2 回押します
ちなみにコンテナとして作成した ubuntu は
- Ubuntu 14.04.5 (jessie/sid)
- Linux ubuntu0 3.16.0-30-generic
となっていました
CentOS コンテナの作成と起動
では次に CentOS コンテナを作成してみましょう
ほぼ手順は同じですが、ホストマシン上で yum コマンドが実行できないとダメなようでない場合はインストールしましょう
- apt-get -y install yum
インストールできたらあとは ubuntu コンテナと同様の手順で作成、起動します
- lxc-create -t centos -n centos0
- lxc-start -n centos0 -d
- lxc-console -n centos0
CentOS の場合デフォルトのログインユーザが root でパスワードがホストマシン上の /var/lib/lxc/centos0/tmp_root_pass
に記載されているので確認してください
デタッチなどの方法は ubuntu と同様です
コンテナの CentOS の情報は以下の通りでした
- CentOS release 6.8
- Linux centos0.unassigned-domain 3.16.0-30-generic
その他よく使うコマンド
- lxc-ls -f
コンテナの一覧がステータス付きで表示されます
- lxc-stop -n centos0
コンテナを停止します
コンテナ上で shutdown コマンドを実行しても OK です
- lxc-destroy -n centos0
コンテナを削除します
トラブルシューティング
いろいろとエラーも発生したので初回します
conf.c:instantiate_veth:2590 - failed to attach 'veth1SFGYW' to the bridge 'lxcbr0': Operation not permitted
エラーの文面は一部抜粋ですが、上記のエラーが発生しました
これは当初 Ubuntu16.04 で試そうとしておりそのときに発生し続けたエラーになります
自分は諦めて Ubuntu 14.04 を使うことで解決しました
また、その場合 lxc も 2.0.6 から 1.0.8 になりました
2 系はまだ不安定なのかもしれないです
conf.c:instantiate_veth:3105 - failed to attach 'vethJN8CV2' to the bridge 'lxcbr0': No such device
これはホストマシンを再起動してそのあとで lxc-start しようとしたら出たエラーになります
lxc はホストマシン上にブリッジアダプタ「lxcbr0」を作成して、それを使ってホストマシンとコンテナが通信をします
lxc-start するときにコンテナ用の仮想インタフェースを作成するようなのですが、ブリッジアダプタがそもそも作成されていない場合に該当のエラーが発生するようです
原因は不明だったのですが、手動でブリッジアダプタを作成することで解決できました
- brctl addbr lxcbr0
- ifconfig lxcbr0 10.0.3.1 netmask 255.255.255.0 up
毎回再起動するたびに実施しなければいけないのでブリッジ用のネットワーク設定ファイルを作成してもいいかもしれません
ubuntu なのでホストマシンの udev の設定周りが怪しそうだったのですが、詳細には調査しなかったので原因は不明です
最後に
lxc を Ubuntu 14.04 で試してみました
昔からある技術ではあるので、シンプルで使いやすい感じはしました
ただ、やはり docker に比べると機能的にも性能的にもだいぶ劣っちゃうかなという印象です用途が違うと言えばそれまでですが、コンテナを使ってアプリを動かしたいのが目的なのであれば docker で十分です
lxc には他にも cgroup と連携してリソース制限なども行えるようですがそれはまだ別の機会にでも試してみたいと思います
0 件のコメント:
コメントを投稿