「LXC」の版間の差分

提供: セキュリティ
移動: 案内検索
 
(同じ利用者による、間の7版が非表示)
行1: 行1:
 
[[LXC]] (Linux Containers)とは、1つのコントロールホストの上で、複数の隔離された[[Linux]]システム(コンテナ)を実行する [[OS]]レベルの仮想化です。[[LXC]]は、個別のプロセス空間とネットワーク空間を持ちます。[[FreeBSD]]における[[jail]]の[[Linux]]版として捉えられます。
 
[[LXC]] (Linux Containers)とは、1つのコントロールホストの上で、複数の隔離された[[Linux]]システム(コンテナ)を実行する [[OS]]レベルの仮想化です。[[LXC]]は、個別のプロセス空間とネットワーク空間を持ちます。[[FreeBSD]]における[[jail]]の[[Linux]]版として捉えられます。
[[LXC]]は、個別のプロセス空間とネットワーク空間を持ちます。[[FreeBSD]]における[[jail]]の[[Linux]]版として捉えられます。
 
  
 
'''読み方'''
 
'''読み方'''
行10: 行9:
 
[[LXC]]は、[[Linuxカーネル]] 2.6.29 から利用できます。
 
[[LXC]]は、[[Linuxカーネル]] 2.6.29 から利用できます。
  
[[Linuxカーネル]] 3.0.0 では、コンテナに対するセキュリティ対策が不十分です。コンテナ内の[[root]]権限で、ホストを操作できる穴があります。
+
[[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コマンドで表示します。
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
行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ネームサーバーでは、[[名前解決]]ができませんでした。
行173: 行192:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
 
sudo /etc/init.d/networking restart
 
sudo /etc/init.d/networking restart
 +
</syntaxhighlight>
 +
== LXCコンテナのIPアドレスを得る方法 ==
 +
dig コマンドで確認できます。c1は、適当なコンテナの名前に置き換えてください。
 +
<syntaxhighlight lang="bash">
 +
dig @10.0.3.1 c1 +short
 
</syntaxhighlight>
 
</syntaxhighlight>
  
 +
<syntaxhighlight lang="bash">
 +
sudo lxc-attach --name c1 -- ifconfig
 +
</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カーネル]]
行181: 行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におけるjailLinux版として捉えられます。

読み方

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

原因と解決方法は、不明です。

関連項目