LXC in Ubuntu 12.04 LTS by Stéphane Graber

7874 ワード

多くの人がUbuntu 12に尋ねている.04 LTSでLXCの更新状態になりました.
このブログは、過去6ヶ月の概要を表し、新しい機能についてより詳細に説明するブログへのリンクを提供しています.

LXCとは?


LXCはカーネルネーミングスペース(kernal namespaces)と制御グループ(cgroup)の特性を制御することによってシステムまたはアプリケーションコンテナ(application container)を作成するユーザ空間ツールである。


LXCは大体このようなことです.
LXCはchrootと仮想マシンの間に漂っているような感じがします「ホスト」のカーネルを使用して、完全なLINUXシステムを実行します.
容器内を走るプロセスは外部から見えるである.
特別なハードウェアを必要とせず、サポートされているすべてのアーキテクチャでA libvirt driver for LXC exists (libvirt-lxc), however it doesn’t use the “lxc” userspace tool even though it uses the same kernel features.

LXCをよりシンプルに


12.04 LTSの主な任務はLXCを脳障害にしても使うことだ.この偉大な目標を達成するために、既知の脆弱性を修復する一方で、LXCのデフォルト設定を向上させます.
以下のコマンドでUbuntu 12.04 LTS上に基本的なコンテナを作成して実行できます.
sudo apt-get install lxc
sudo lxc-create -t ubuntu -n my-container
sudo lxc-start -n my-container

LXCのデフォルトでは、ホストと同じバージョンとアーキテクチャが使用されます.追加のオプションは-helpを使用してリストできます.ログインユーザー名/パスワードはubuntu/ubuntuです.
もう一つのLXCをより簡単にする措置は、普通のシステムを容器に変える追加の作業(hack)をゼロに下げることです.
12.04から、私たちは何の変更もしなくてもコンテナの中で標準的なUbuntuシステムを実行することができて、しかも今意外にも1つのコンテナの中で直接VMミラーを走ることができます!
The ubuntu-cloud template also lets you get one of our EC2/cloud images and have it start as a container instead of a cloud instance:
sudo apt-get install lxc cloud-utils
sudo lxc-create -t ubuntu-cloud -n my-cloud-container
sudo lxc-start -n my-cloud-container

And finally, if you want to test the new cool stuff, you can also use juju with LXC:
[ ! -f ~/.ssh/id_rsa.pub ] && ssh-keygen -t rsa
sudo apt-get install juju apt-cacher-ng zookeeper lxc libvirt-bin --no-install-recommends
sudo adduser $USER libvirtd
juju bootstrap
sed -i "s/ec2/local/" ~/.juju/environments.yaml
echo " data-dir: /tmp/juju" >> ~/.juju/environments.yaml
juju bootstrap
juju deploy mysql
juju deploy wordpress
juju add-relation wordpress mysql
juju expose wordpress

# To tail the logs
juju debug-log

# To get the IPs and status
juju status

LXCをより安全にする


もう1つのUbuntu 12.04におけるLXCの主な目標は、より安全にすることである.
John Johansen did an amazing work of extending apparmor to let us implement per-container apparmor profiles and prevent most known dangerous behaviours from happening in a container.
John Johansenはapparmorを拡張してper-container apparmor profilesを実現し、容器で発生するほとんどの既知の危険行為を防止することができます.
注意:カーネルにユーザーネーミングスペースを適用しない限り、LXCはroot safeとは言いませんが、Ubuntu 12.04が発表したデフォルトのapparmor設定に従って、既知のセキュリティ問題をすべて封じ込めました.
This mostly means that write access to/proc and/sys are heavily restricted, mounting filesystems is also restricted, only allowing known-safe filesystems to be mounted by default. Capabilities are also restricted in the default LXC profile to prevent a container from loading kernel modules or control apparmor.
これは、/procおよび/sysの書き込み操作が大きく制限されていることを意味し、マウントファイルシステムも制限されており、デフォルトでは、既知の安全なファイルシステムのみがマウントされます.操作能力(Capabilities)はデフォルトLXC設定でも制限されており、システムモジュールのマウントやapparmorの制御などの危険を防止しています.
詳細は次のとおりです.
Serge’s blog post on LXC in 12.04 and apparmor
Wiki page on security and LXC

Other cool new stuff


Emulated architecture containers


It’s now possible to use qemu-user-static with LXC to run containers of non-native architectures, for example:
sudo apt-get install lxc qemu-user-static
sudo lxc-create -n my-armhf-container -t ubuntu -- -a armhf
sudo lxc-start -n my-armhf-container

かりようき


Quite a bit of work also went into lxc-start-ephemeral, the tool letting you start a copy of an existing container using an overlay filesystem, discarding any change you make on shutdown:
このツールを使用すると、上書きされたファイルシステム上で既存のコンテナのコピーを実行し、電源を切るとすべての変更が取り消されます.
sudo apt-get install lxc
sudo lxc-create -n my-container -t ubuntu
sudo lxc-start-ephemeral -o my-container

入れ子コンテナ


容器の中でもう一つの容器を実行することができます!For that to work, you first need to create a new apparmor profile as the default one doesn’t allow this for security reason. I already did that for you, so the few commands below will download it and install it in/etc/apparmor.d/lxc/lxc-with-nesting. This profile (or something close to it) will ship in Ubuntu 12.10 as an example of alternate apparmor profile for container.
sudo apt-get install lxc
sudo lxc-create -t ubuntu -n my-host-container -t ubuntu
sudo wget https://www.stgraber.org/download/lxc-with-nesting -O /etc/apparmor.d/lxc/lxc-with-nesting
sudo /etc/init.d/apparmor reload
sudo sed -i "s/#lxc.aa_profile = unconfined/lxc.aa_profile = lxc-container-with-nesting/" /var/lib/lxc/my-host-container/config
sudo lxc-start -n my-host-container
(in my-host-container) sudo apt-get install lxc
(in my-host-container) sudo stop lxc
(in my-host-container) sudo sed -i "s/10.0.3/10.0.4/g" /etc/default/lxc
(in my-host-container) sudo start lxc
(in my-host-container) sudo lxc-create -n my-sub-container -t ubuntu
(in my-host-container) sudo lxc-start -n my-sub-container

ドキュメント


Outside of the existing manpages and blog posts I mentioned throughout this post, Serge Hallyn did a very good job at creating a whole section dedicated to LXC in the Ubuntu Server Guide. You can read it here: https://help.ubuntu.com/12.04/serverguide/lxc.html

Next steps


Next week we have the Ubuntu Developer Summit in Oakland, CA. There we’ll be working on the plans for LXC in Ubuntu 12.10. We currently have two sessions scheduled:
LXC containers introduction, demo and Q&A
LXC work for Q
If you want to make sure the changes you want will be in Ubuntu 12.10, please make sure to join these two sessions. It’s possible to participate remotely to the Ubuntu Developer Summit, through IRC and audio streaming.
My personal hope for LXC in Ubuntu 12.10 is to have a clean liblxc library that can be used to create bindings and be used in languages like python. Working towards that goal should make it easier to do automated testing of LXC and cleanup our current tools.
I hope this post made you want to try LXC or for existing users, made you discover some of the new features that appeared in Ubuntu 12.04. We’re actively working on improving LXC both upstream and in Ubuntu, so do not hesitate to report bugs(preferably with “ubuntu-bug lxc”).