LXC コンテナは、疑似仮想環境を作成するための非常に迅速な方法です。
以前の LXC の記事では、LXC Linux コンテナーをインストールして構成する方法について説明しました。
このチュートリアルでは、新しい Linux コンテナーを作成し、コンテナーを起動し、LXC 仮想コンソールにログインして新しいコンテナーを使用する方法について説明します。
デモンストレーションのために、このチュートリアルでは CentOS LXC 仮想コンテナーを作成しますが、必要なほぼすべての Linux ディストリビューション用の仮想コンテナーを作成できます。
1. LXC コンテナ テンプレート
Linux コンテナ LXC はデフォルトで、いくつかの一般的な Linux ディストリビューション用のコンテナ テンプレートを提供します。以下は、すぐに使用できる LXC テンプレートの一部です。
- CentOS
- Ubuntu
- フェドーラ
- OpenSUSE
- ジェンツー
- Debian
- オラクル Linux
- ArchLinux
利用可能な LXC テンプレートはすべて /usr/local/share/lxc/templates ディレクトリにあります。
# ls -1 /usr/local/share/lxc/templates lxc-alpine lxc-altlinux lxc-archlinux lxc-busybox lxc-centos lxc-cirros lxc-debian lxc-download lxc-fedora lxc-gentoo lxc-openmandriva lxc-opensuse lxc-oracle lxc-plamo lxc-sshd lxc-ubuntu lxc-ubuntu-cloud
2. lxc-create を使用してコンテナを作成する
コンテナーを作成するには、以下に示すように lxc-create コマンドを使用します。
次のコマンドで:
- –n オプションはコンテナー名を示します
- –t オプションは、コンテナーの作成に使用されるテンプレートを示します。この例では、lxc-centos テンプレートを使用して CentOS コンテナーを作成しています。
この例では、centos の最小インストールで CentOS コンテナーが作成されます。
これにより、最小限の CentOS を実行するために必要なすべてのパッケージ (たとえば、約 140 個のパッケージ) がダウンロードされ、MyCentOSContainer1 コンテナーの一部としてインストールされます
# lxc-create -n MyCentOSContainer1 -t /usr/local/share/lxc/templates/lxc-centos /usr/local/share/lxc/templates/lxc-centos Host CPE ID from /etc/system-release-cpe: cpe:/o:centos:linux:6:GA dnsdomainname: Unknown host Checking cache download in /usr/local/var/cache/lxc/centos/x86_64/6/rootfs ... Downloading centos minimal ... ... ... Installing : libgcc-4.4.7-16.el6.x86_64 1/142 Installing : setup-2.8.14-20.el6_4.1.noarch 2/142 Installing : filesystem-2.4.30-3.el6.x86_64 3/142 ... Verifying : gzip-1.3.12-22.el6.x86_64 139/142 Verifying : mingetty-1.08-5.el6.x86_64 140/142 Verifying : libxml2-2.7.6-20.el6_7.1.x86_64 141/142 Verifying : 1:findutils-4.4.2-6.el6.x86_64 142/142 ... Download complete. Copy /usr/local/var/cache/lxc/centos/x86_64/6/rootfs to /usr/local/var/lib/lxc/MyCentOSContainer1/rootfs ... Copying rootfs to /usr/local/var/lib/lxc/MyCentOSContainer1/rootfs ...
3. LXC コンテナの root パスワード
LXC コンテナの root パスワードは /usr/local/var/lib/lxc/{container-name}/tmp_root_pass に保存されています
上記の例では、先ほど作成した LXC コンテナの場合、一時的な root パスワードは次の場所にあります:
# cat /usr/local/var/lib/lxc/MyCentOSContainer1/tmp_root_pass Root-MyCentOSContainer1-pf7qMB
以下に示すように、コントロール ホストから chroot を使用してコンテナーがオフになっていても、いつでもコンテナーのルート パスワードを変更できます。
# chroot /usr/local/var/lib/lxc/MyCentOSContainer1/rootfs passwd Changing password for user root. New password: Retype new password: passwd: all authentication tokens updated successfully.
4. lxc-start を使用して LXC Linux コンテナを起動します
コンテナーが作成されたら、以下に示すように lxc-start を使用してコンテナーを開始します。
# lxc-start -n MyCentOSContainer1 lxc-start: cgfs.c: handle_cgroup_settings: 2077 Device or resource busy - failed to set memory.use_hierarchy to 1; continuing CentOS release 6.6 (Final) Kernel 2.6.32-431.el6.x86_64 on an x86_64 MyCentOSContainer1 login: init: rcS main process (8) killed by TERM signal Entering non-interactive startup Bringing up loopback interface: [ OK ] Bringing up interface eth0: Determining IP information for eth0... done. [ OK ] Starting system logger: [ OK ] Mounting filesystems: [ OK ] Generating SSH2 RSA host key: [ OK ] Generating SSH1 RSA host key: [ OK ] Generating SSH2 DSA host key: [ OK ] Starting sshd: [ OK ] CentOS release 6.6 (Final) Kernel 2.6.32-431.el6.x86_64 on an x86_64 MyCentOSContainer1 login:
次の「コンテナの開始に失敗しました」というエラー メッセージが表示された場合は、構成に問題があります。
# lxc-start -n MyCentOSContainer1 lxc-start: lxc_start.c: main: 344 The container failed to start. lxc-start: lxc_start.c: main: 346 To get more details, run the container in foreground mode. lxc-start: lxc_start.c: main: 348 Additional information can be obtained by setting the --logfile and --logpriority options.
構成の何が問題なのかを正確に調べるには、以下に示すように -F オプションを使用してフォアグラウンドで LXC コンテナーを実行します。
「ブリッジに接続できませんでした」、「netdev を作成できませんでした」、「ネットワークを作成できませんでした」というエラー メッセージが表示される場合は、システムでブリッジ アダプタが適切に構成されていません。
以前の LXC Linux コンテナーのセットアップの記事で説明した ifcfg-br0 の設定をチェックして、ブリッジ構成が適切にセットアップされ、機能していることを確認してください。
# lxc-start -F -n MyCentOSContainer1 lxc-start: conf.c: instantiate_veth: 2796 failed to attach 'veth8VPW29' to the bridge 'lxcbr0': Operation not permitted lxc-start: conf.c: lxc_create_network: 3079 failed to create netdev lxc-start: start.c: lxc_spawn: 935 failed to create the network lxc-start: start.c: __lxc_start: 1192 failed to spawn 'MyCentOSContainer1' lxc-start: lxc_start.c: main: 344 The container failed to start. lxc-start: lxc_start.c: main: 348 Additional information can be obtained by setting the --logfile and --logpriority options.
5. lxc-info を使用してコンテナー情報を表示
コンテナーに関する詳細情報を表示するには、以下に示すように lxc-info コマンドを使用します。
# lxc-info -n MyCentOSContainer1 Name: MyCentOSContainer1 State: RUNNING PID: 7696 IP: 192.168.100.101 CPU use: 1.61 seconds BlkIO use: 32.00 KiB Memory use: 2.63 MiB Link: vethLNI1UH TX bytes: 1.98 KiB RX bytes: 46.08 KiB Total bytes: 48.06 KiB
6. lxc-stop を使用して LXC Linux コンテナを停止します
LXC Linux コンテナーを停止するには、以下に示すように lxc-stop を使用し、停止するコンテナー名を指定します。
# lxc-stop -n MyCentOSContainer1
7. lxc-clone を使用して既存のコンテナを複製
複製は、コンテナーの構成に変更を加える前に、古いコンテナーのスナップショットを取得する場合に役立ちます。これは、コンテナー構成の簡単なバックアップ方法として使用できます。
コンテナーのクローン作成は、以下に示すように lxc-clone コマンドを使用して実行できます。この場合、新しいコンテナ名は MyCentOSContainer2 です
# lxc-clone -o MyCentOSContainer1 -n MyCentOSContainer2 Created container MyCentOSContainer2 as copy of MyCentOSContainer1
8. lxc-destory を使用して既存のコンテナを削除する
既存のコンテナを削除するには、以下に示すように lxc-destroy コマンドを使用します。
# lxc-destroy -n MyCentOSContainer2
9. LXC Linux コンテナ コンソールに接続
コンテナーのコンソールに接続するには、次の lxc-console コマンドを使用します。
# lxc-console -n MyCentOSContainer1 Connected to tty 1 Type Ctrl+a q to exit the console, Ctrl+a Ctrl+a to enter Ctrl+a itself CentOS release 6.6 (Final) Kernel 2.6.32-431.el6.x86_64 on an x86_64 MyCentOSContainer1 login:
10. lxc-config を使用して LXC 構成を変更する
LXC 構成を変更するには、lxc-config コマンドを使用できます。
まず、lxc-config -l オプションを使用します。これにより、以下に示すように、利用可能な構成がすべて表示されます。
# lxc-config -l lxc.default_config lxc.lxcpath lxc.bdev.lvm.vg lxc.bdev.lvm.thin_pool lxc.bdev.zfs.root lxc.cgroup.use lxc.cgroup.pattern
次に、以下に示すように lxc.default_config オプションを使用して、各構成ファイルとそれに関連するパラメーターに関する情報を表示します。
# lxc-config lxc.default_config /usr/local/etc/lxc/default.conf # cat /usr/local/etc/lxc/default.conf lxc.network.type = veth lxc.network.link = virbr0 lxc.network.flags = up
次のコマンドは、すべてのコンテナが保存されている LXC パッチを表示します。
# lxc-config lxc.lxcpath /usr/local/var/lib/lxc
以下に示すように、このディレクトリの下に作成した 2 つのコンテナーが表示されます。
# cd /usr/local/var/lib/lxc # ls MyCentOSContainer1 MyCentOSContainer2
コンテナー ディレクトリの下に、以下に示すように、特定のコンテナーのすべての基本的な構成情報を含む構成ファイルが表示されます。
# cd /usr/local/var/lib/lxc/MyCentOSContainer1 # vi config lxc.network.type = veth lxc.network.link = virbr0 lxc.network.hwaddr = fb:bb:f2:87:e8:17 lxc.network.flags = up lxc.rootfs = /usr/local/var/lib/lxc/MyCentOSContainer1/rootfs lxc.include = /usr/local/share/lxc/config/centos.common.conf lxc.arch = x86_64 lxc.utsname = MyCentOSContainer1