~~SLIDESHOW gorilla~~ ====== Linux Containers ======
===== あらかじめお断り ===== * 内部のコアなお話ありません ;-) * 2010/12/18 第21回まっちゃ139勉強会で発表したモノに少し修正を加えて,2011/2/20 の第1回カーネル/VM探検隊@関西で発表した資料です. * 発表後のツイートで lxc-gentoo で Gentoo コンテナも簡単! というのを教えていただきましたので,追記しました.:-) ===== 自己紹介 ===== * 加藤泰文 {{megane_green.png?80}} * http://www.ten-forward.ws/ * Twitter: @ten_forward * Wassr: @tenforward * [[http://plamo.linet.gr.jp/drupal6/|Plamo Linux]] メンテナ (64bit版開発真っ盛り :-)) * Jetspeed2 ドキュメント翻訳 * Asterisk ユーザ会 ===== コンテナ ===== * 「OSレベルの仮想化」([[http://en.wikipedia.org/wiki/Operating_system-level_virtualization|Wikipedia]]) * 一つの環境の中に他と隔離された複数の環境を動作させる. * 独立した名前空間,ネットワーク... * それぞれの環境に対するリソース制御. ===== コンテナの特徴 ===== * 動作するカーネルは一つ.ドライバ類も共有. * 異なる種類の OS を動かすことはできない. * ディストリビューションレベルであれば色々動かすことは可能. * 仮想化のオーバーヘッドが少ない. * シンプル. ===== 実装 ===== * OpenVZ * Parallels Virtuozzo Container * Linux VServer * FreeBSD jail * lxc * Solaris Container ===== OpenVZ / Virtuozzo ===== * 国内では一番メジャー (VPS サービス) * kernel にパッチを当てる + コンテナ操作ツール群 * 機能も豊富で安定しています ===== =====# apt-get install lxc (Ubuntu)
# yum install lxc (Fedora)
* cgroup ファイルシステムマウント# mkdir /cgroup
# mount -t cgroup cgroup /cgroup
* カーネルが新しい (v2.6.33以降) と,上記の cgroup マウントではリソース制限が利かなくなる事があります.(blkioサブシステムの制限のため.blkioを使わないようにマウントすればOK.) ← 2.6.38 で直ってます.
===== とりあえず使ってみよう =====
* 実用性はないけどとりあえず簡単に使えます.
* Fedora14[root@fedora14 ~]# yum install lxc-doc
[root@fedora14 ~]# cat /usr/share/doc/lxc/examples/lxc-empty-netns.conf
lxc.utsname = omega (コンテナのホスト名)
lxc.network.type = empty (ループバックインターフェースだけ作成)
lxc.network.flags = up (作成したインターフェースを起動)
[root@fedora14 ~]# lxc-execute -n test -f /usr/share/doc/lxc/examples/lxc-empty-netns.conf /bin/bash
[root@omega ~]# ps ax
PID TTY STAT TIME COMMAND
1 pts/0 S 0:00 /usr/lib/lxc/lxc-init -- /bin/bash
2 pts/0 S 0:00 /bin/bash
11 pts/0 R+ 0:00 ps ax
[root@omega ~]# ifconfig
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
[root@omega ~]# exit
exit
[root@fedora14 ~]#
===== コンテナ環境の構築 =====
* lxc の中に lxc-debian, lxc-ubuntu, lxc-fedora, lxc-gentoo 等,いくつかのディストリビューションのコンテナを作成するスクリプトが入っています.一番お気楽に使えます.(最新のUbuntuだとlxc-nattyなどバージョン毎のスクリプトが) こんな感じで使います.lxc-create -t natty -n natty01 -c /path/to/lxc.conf
* 普通にコンテナ動かしたい人は "yum --installroot" とか "debootstrap" で chroot 環境を作ったり,OpenVZ で配布されているコンテナアーカイブを使うと良いでしょう.
* 起動時に udev 実行しないとか,fstab の調整とか,inittab の調整をすればすぐに起動します.
* Ubuntu だと lxc 用の upstart 設定ファイルを一つ置けば OK かな.
===== 最後に =====
* イマドキの Linux kernel を使ってるディストリビューションだとコンテナも楽々.
* ググると結構 lxc で遊んでいる人の話が引っかかりますが,バージョンが少し古いので最新と少し違う所があるので注意しましょう.
* lxc のマニュアルの翻訳を勝手にやってます.https://github.com/tenforward/lxc-doc-ja
* 結構 OpenVZ とか使ってる人は多そうだけど,あまり表立ってコンテナの話って聞かない気がするので,色々情報交換しましょう!
===== 参考文献 =====
* http://en.wikipedia.org/wiki/Operating_system-level_virtualization
* http://www.openvz.org/
* http://lxc.sourceforge.net/
* http://www.libvirt.org/
* http://www.ne.jp/asahi/ka/to/comp/presentation/cgroup.html
* カーネル付属文書 (Documentation/cgroups, scheduler)
===== ありがとうございました =====