「LXC」の版間の差分
(同じ利用者による、間の5版が非表示) | |||
行1: | 行1: | ||
[[LXC]] (Linux Containers)とは、1つのコントロールホストの上で、複数の隔離された[[Linux]]システム(コンテナ)を実行する [[OS]]レベルの仮想化です。[[LXC]]は、個別のプロセス空間とネットワーク空間を持ちます。[[FreeBSD]]における[[jail]]の[[Linux]]版として捉えられます。 | [[LXC]] (Linux Containers)とは、1つのコントロールホストの上で、複数の隔離された[[Linux]]システム(コンテナ)を実行する [[OS]]レベルの仮想化です。[[LXC]]は、個別のプロセス空間とネットワーク空間を持ちます。[[FreeBSD]]における[[jail]]の[[Linux]]版として捉えられます。 | ||
− | |||
'''読み方''' | '''読み方''' | ||
行10: | 行9: | ||
[[LXC]]は、[[Linuxカーネル]] 2.6.29 から利用できます。 | [[LXC]]は、[[Linuxカーネル]] 2.6.29 から利用できます。 | ||
− | [[Linuxカーネル]] 3.0.0 | + | [[Linuxカーネル]] 3.0.0 では、[[コンテナ]]に対するセキュリティ対策が不十分です。コンテナ内の[[root]]権限で、ホストを操作できる穴があります。 |
− | + | ||
== インストール == | == インストール == | ||
{{apt|lxc}} | {{apt|lxc}} | ||
− | |||
== セットアップ == | == セットアップ == | ||
* /etc/init/lxc-net.conf | * /etc/init/lxc-net.conf | ||
行34: | 行31: | ||
sudo mount -a | sudo mount -a | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== テンプレートファイル == | == テンプレートファイル == | ||
+ | テンプレートファイルは、 lxc-templates で提供されます。 | ||
+ | |||
/usr/lib/lxc/templates/lxc-テンプレート名 のファイルが参照されます。 | /usr/lib/lxc/templates/lxc-テンプレート名 のファイルが参照されます。 | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
行43: | 行41: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | 上記は、すでに古いのか、2015-01-31では、/usr/share/lxc/templates/ にあります。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ dpkg -L lxc-templates | ||
+ | /. | ||
+ | /usr | ||
+ | /usr/share | ||
+ | /usr/share/doc | ||
+ | /usr/share/doc/lxc-templates | ||
+ | /usr/share/doc/lxc-templates/copyright | ||
+ | /usr/share/lxc | ||
+ | /usr/share/lxc/lxc-patch.py | ||
+ | /usr/share/lxc/templates | ||
+ | /usr/share/lxc/templates/lxc-plamo | ||
+ | /usr/share/lxc/templates/lxc-openmandriva | ||
+ | /usr/share/lxc/templates/lxc-gentoo | ||
+ | /usr/share/lxc/templates/lxc-centos | ||
+ | /usr/share/lxc/templates/lxc-ubuntu | ||
+ | /usr/share/lxc/templates/lxc-cirros | ||
+ | /usr/share/lxc/templates/lxc-debian | ||
+ | /usr/share/lxc/templates/lxc-ubuntu-cloud | ||
+ | /usr/share/lxc/templates/lxc-busybox | ||
+ | /usr/share/lxc/templates/lxc-alpine | ||
+ | /usr/share/lxc/templates/lxc-download | ||
+ | /usr/share/lxc/templates/lxc-opensuse | ||
+ | /usr/share/lxc/templates/lxc-oracle | ||
+ | /usr/share/lxc/templates/lxc-archlinux | ||
+ | /usr/share/lxc/templates/lxc-altlinux | ||
+ | /usr/share/lxc/templates/lxc-sshd | ||
+ | /usr/share/lxc/templates/lxc-fedora | ||
+ | /usr/share/doc/lxc-templates/changelog.Debian.gz | ||
+ | </syntaxhighlight> | ||
== 使い方 == | == 使い方 == | ||
=== コンテナの作成 === | === コンテナの作成 === | ||
行72: | 行101: | ||
'c1' created | 'c1' created | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== コンテナのリストを表示する === | === コンテナのリストを表示する === | ||
コンテナのリストは、lxc-listコマンドで表示します。 | コンテナのリストは、lxc-listコマンドで表示します。 | ||
行88: | 行116: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== コンテナを起動する === | === コンテナを起動する === | ||
コンテナを起動するには、lxc-startコマンドを使用します。 | コンテナを起動するには、lxc-startコマンドを使用します。 | ||
行101: | 行128: | ||
sudo lxc-start -n c1 -d | sudo lxc-start -n c1 -d | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== コンテナのコンソールを切断する === | === コンテナのコンソールを切断する === | ||
コンテナのコンソールを切断(デタッチ)するには、コンソールのログインプロンプトで以下のキーを入力します。 | コンテナのコンソールを切断(デタッチ)するには、コンソールのログインプロンプトで以下のキーを入力します。 | ||
行107: | 行133: | ||
C-a q | C-a q | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== コンテナのコンソールに接続する === | === コンテナのコンソールに接続する === | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
sudo lxc-console -n c1 | sudo lxc-console -n c1 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== コンテナをシャットダウンする === | === コンテナをシャットダウンする === | ||
コンテナのシャットダウンには、lxc-shutdownコマンドを使用します。 | コンテナのシャットダウンには、lxc-shutdownコマンドを使用します。 | ||
行118: | 行142: | ||
sudo lxc-shutdown -n c1 | sudo lxc-shutdown -n c1 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== コンテナを停止する === | === コンテナを停止する === | ||
強制的にコンテナを終了させる場合には、lxc-stopコマンドを使用します。 | 強制的にコンテナを終了させる場合には、lxc-stopコマンドを使用します。 | ||
行126: | 行149: | ||
コンテナは、 /var/lib/lxc/コンテナ名 で作られます。 | コンテナは、 /var/lib/lxc/コンテナ名 で作られます。 | ||
− | |||
=== コンテナを削除する === | === コンテナを削除する === | ||
コンテナのイメージを削除する場合は、 lxc-destroyコマンドを使用します。 | コンテナのイメージを削除する場合は、 lxc-destroyコマンドを使用します。 | ||
行132: | 行154: | ||
sudo lxc-destroy -n c1 | sudo lxc-destroy -n c1 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== クローンの作成 === | === クローンの作成 === | ||
コンテナc1を元にc2を作成します。 | コンテナc1を元にc2を作成します。 | ||
行143: | 行164: | ||
sudo lxc-clone -s -o c1 -n c2 | sudo lxc-clone -s -o c1 -n c2 | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
=== memo === | === memo === | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
行152: | 行172: | ||
sudo lxc-create -t ubuntu -n oneiric1 -- -r oneiric | sudo lxc-create -t ubuntu -n oneiric1 -- -r oneiric | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== ネットワークの設定 == | == ネットワークの設定 == | ||
自動で設定されたDNSネームサーバーでは、[[名前解決]]ができませんでした。 | 自動で設定されたDNSネームサーバーでは、[[名前解決]]ができませんでした。 | ||
行174: | 行193: | ||
sudo /etc/init.d/networking restart | sudo /etc/init.d/networking restart | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== LXCコンテナのIPアドレスを得る方法 == | == LXCコンテナのIPアドレスを得る方法 == | ||
− | + | dig コマンドで確認できます。c1は、適当なコンテナの名前に置き換えてください。 | |
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
dig @10.0.3.1 c1 +short | dig @10.0.3.1 c1 +short | ||
行184: | 行202: | ||
sudo lxc-attach --name c1 -- ifconfig | sudo lxc-attach --name c1 -- ifconfig | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | == エラー == | |
+ | === lxc-start: lxc_start.c: main: 296 Executing '/sbin/init' with no configuration file may crash the host === | ||
+ | lxc-create でコンテナを作らずに、lxc-start しようとすると下記のエラーがでます。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | $ sudo lxc-start --name=foo | ||
+ | lxc-start: lxc_start.c: main: 296 Executing '/sbin/init' with no configuration | ||
+ | file may crash the host | ||
+ | </syntaxhighlight> | ||
+ | === <4>init: setvtrgb main process (419) terminated with status 1 === | ||
+ | lxc-start でログインプロンプトの画面で、下記エラーが表示されました。 | ||
+ | <syntaxhighlight lang="bash"> | ||
+ | <4>init: setvtrgb main process (419) terminated with status 1 | ||
+ | </syntaxhighlight> | ||
+ | 原因と解決方法は、不明です。 | ||
== 関連項目 == | == 関連項目 == | ||
* [[Linuxカーネル]] | * [[Linuxカーネル]] | ||
行191: | 行222: | ||
* [[Chef]] | * [[Chef]] | ||
* [https://github.com/lxc] | * [https://github.com/lxc] | ||
− | <!-- | + | <!-- vim: filetype=mediawiki |
− | vim: filetype=mediawiki | + | |
--> | --> |
2016年1月11日 (月) 21:22時点における最新版
LXC (Linux Containers)とは、1つのコントロールホストの上で、複数の隔離されたLinuxシステム(コンテナ)を実行する OSレベルの仮想化です。LXCは、個別のプロセス空間とネットワーク空間を持ちます。FreeBSDにおけるjailのLinux版として捉えられます。
読み方
- LXC
- えるえっくすしー
- Linux Containers
- りなっくす こんていなーず
概要
LXCは、Linuxカーネル 2.6.29 から利用できます。
Linuxカーネル 3.0.0 では、コンテナに対するセキュリティ対策が不十分です。コンテナ内のroot権限で、ホストを操作できる穴があります。
インストール
Ubuntu/Debianにインストールする場合
apt-get コマンドでインストールする場合です。
sudo apt-get install lxc
セットアップ
- /etc/init/lxc-net.conf
- /etc/init/lxc.conf
- /usr/share/doc/lxc/examples
sudo mkdir /srv/lxclib /srv/lxccache sudo rm -rf /var/lib/lxc /var/cache/lxc sudo ln -s /srv/lxclib /var/lib/lxc sudo ln -s /srv/lxccache /var/cache/lxc
もしくは、bind mount を使用します。
sudo mkdir /srv/lxclib /srv/lxccache sudo sed -i '$a \ /srv/lxclib /var/lib/lxc none defaults,bind 0 0 \ /srv/lxccache /var/cache/lxc none defaults,bind 0 0' /etc/fstab sudo mount -a
テンプレートファイル
テンプレートファイルは、 lxc-templates で提供されます。
/usr/lib/lxc/templates/lxc-テンプレート名 のファイルが参照されます。
user@u1:~$ ls /usr/lib/lxc/templates/ lxc-busybox lxc-fedora lxc-sshd lxc-ubuntu-cloud lxc-debian lxc-opensuse lxc-ubuntu
上記は、すでに古いのか、2015-01-31では、/usr/share/lxc/templates/ にあります。
$ dpkg -L lxc-templates /. /usr /usr/share /usr/share/doc /usr/share/doc/lxc-templates /usr/share/doc/lxc-templates/copyright /usr/share/lxc /usr/share/lxc/lxc-patch.py /usr/share/lxc/templates /usr/share/lxc/templates/lxc-plamo /usr/share/lxc/templates/lxc-openmandriva /usr/share/lxc/templates/lxc-gentoo /usr/share/lxc/templates/lxc-centos /usr/share/lxc/templates/lxc-ubuntu /usr/share/lxc/templates/lxc-cirros /usr/share/lxc/templates/lxc-debian /usr/share/lxc/templates/lxc-ubuntu-cloud /usr/share/lxc/templates/lxc-busybox /usr/share/lxc/templates/lxc-alpine /usr/share/lxc/templates/lxc-download /usr/share/lxc/templates/lxc-opensuse /usr/share/lxc/templates/lxc-oracle /usr/share/lxc/templates/lxc-archlinux /usr/share/lxc/templates/lxc-altlinux /usr/share/lxc/templates/lxc-sshd /usr/share/lxc/templates/lxc-fedora /usr/share/doc/lxc-templates/changelog.Debian.gz
使い方
コンテナの作成
-t は、テンプレート名を指定します。
sudo lxc-create -t ubuntu -n c1
/usr/lib/lxc/templates/lxc-テンプレート名 のファイルが参照されます。
-n は、作成する環境の名前です。
デフォルトユーザー ubuntu がパスワード ubuntu で作成されます。
% sudo lxc-create -t ubuntu -n c1 ... 省略 Download complete Copy /var/cache/lxc/precise/rootfs-i386 to /var/lib/lxc/c1/rootfs ... Copying rootfs to /var/lib/lxc/c1/rootfs ... ## # The default user is 'ubuntu' with password 'ubuntu'! # Use the 'sudo' command to run tasks as root in the container. ## 'ubuntu' template installed 'c1' created
コンテナのリストを表示する
コンテナのリストは、lxc-listコマンドで表示します。
sudo lxc-list
user@u1:~$ sudo lxc-list RUNNING FROZEN STOPPED
コンテナを起動する
コンテナを起動するには、lxc-startコマンドを使用します。
コンソールにいきなりアクセスします。
sudo lxc-start -n c1
コンソールにアクセスせずに、デタッチした状態で起動します。
sudo lxc-start -n c1 -d
コンテナのコンソールを切断する
コンテナのコンソールを切断(デタッチ)するには、コンソールのログインプロンプトで以下のキーを入力します。
C-a q
コンテナのコンソールに接続する
sudo lxc-console -n c1
コンテナをシャットダウンする
コンテナのシャットダウンには、lxc-shutdownコマンドを使用します。
sudo lxc-shutdown -n c1
コンテナを停止する
強制的にコンテナを終了させる場合には、lxc-stopコマンドを使用します。
sudo lxc-stop -n c1
コンテナは、 /var/lib/lxc/コンテナ名 で作られます。
コンテナを削除する
コンテナのイメージを削除する場合は、 lxc-destroyコマンドを使用します。
sudo lxc-destroy -n c1
クローンの作成
コンテナc1を元にc2を作成します。
sudo lxc-clone -o c1 -n c2
-sオプションを使うと、オリジナルのスナップショットの新しいrootfsを作成します。
sudo lxc-clone -s -o c1 -n c2
memo
sudo lxc-create -t ubuntu -n CN
sudo lxc-create -t ubuntu -n oneiric1 -- -r oneiric
ネットワークの設定
自動で設定されたDNSネームサーバーでは、名前解決ができませんでした。 /etc/resolv.conf のnameserverを書き換えればいいのですが、直接編集すべきファイルではありません。 /etc/network/interfaces を編集します。192.168.0.1を適当に置き換えてください。
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp dns-nameservers 192.168.0.1
設定の反映は、以下の通りです。
sudo /etc/init.d/networking restart
LXCコンテナのIPアドレスを得る方法
dig コマンドで確認できます。c1は、適当なコンテナの名前に置き換えてください。
dig @10.0.3.1 c1 +short
sudo lxc-attach --name c1 -- ifconfig
エラー
lxc-start: lxc_start.c: main: 296 Executing '/sbin/init' with no configuration file may crash the host
lxc-create でコンテナを作らずに、lxc-start しようとすると下記のエラーがでます。
$ sudo lxc-start --name=foo lxc-start: lxc_start.c: main: 296 Executing '/sbin/init' with no configuration file may crash the host
<4>init: setvtrgb main process (419) terminated with status 1
lxc-start でログインプロンプトの画面で、下記エラーが表示されました。
<4>init: setvtrgb main process (419) terminated with status 1
原因と解決方法は、不明です。