コンテナ用のファイルシステムフレームワークの作成
次のコマンドを使用して、共通ファイルシステムの作成に必要な基本コンポーネントをインストールします。
$ apt-get install debootstrap lxc lxc-templates lxctl cgroup-lite rsync
次に、2つの制御オプションを有効にします。
ネットワーク構成で、コンテナのネットワークブリッジを有効にします。
$ nano /etc/init/lxc-net.conf USE_LXC_BRIDGE="true"
また、システム起動時の自動実行コンテナの場合、次を有効にします。
LXC_AUTO="true"
次のコマンドを使用して、lxc.confファイルで:
$ nano /etc/init/lxc.conf
次に、構成ファイルを編集します。
$ nano /etc/default/lxc
そして、次の行を追加します。
変数を紹介します:
$ lxcRoot="/lxc"
/ lxcディレクトリを作成します。
$ mkdir -p ${lxcRoot}
コンテナとその設定に関する情報を保存する場所と、配布データをキャッシュして多くのコンテナの作成を高速化する場所を作成します。
$ mkdir /${lxcRoot}/lxclib /${lxcRoot}/lxccache
古いディレクトリを削除します。
$ rm -rf /var/lib/lxc /var/cache/lxc
ディレクトリへのリンクを作成します。
$ ln -s /${lxcRoot}/lxclib /var/lib/lxc $ ln -s /${lxcRoot}/lxccache /var/cache/lxc
hNameという名前とTrustyバージョンを持つ基本的なUbuntuベースのLXCコンテナーを作成します。
$ lxc-create -t ubuntu -n hName -r trusty
次に、LXCコンテナの不変部分の作成を始めましょう。
作成されたコンテナのディレクトリに移動します。
$ cd /lxc/lxclib/hName/rootfs
その中で、共通部分を持つディレクトリを作成し、それを共通と呼びます:
$ mkdir common
不変のディレクトリを転送します:
$ mv bin lib lib64 sbin usr common/
それらへのシンボリックリンクを作成します。
$ ln -s common/bin $ ln -s common/sbin $ ln -s common/lib $ ln -s common/lib64 $ ln -s common/usr
LXCコンテナーの作成
システムの基本イメージを準備した後、システム内の最初のコンテナーの作成に直接進みます。 単に「Node1」と呼びます。
最初のコンテナのディレクトリを作成します。
$ mkdir -p /lxc/lxclib/Node1/rootfs
それに行きます:
$ cd /lxc/lxclib/Node1/rootfs
rsyncプログラムを使用して、不変部分を最初のコンテナーにコピーします。
$ rsync --exclude=/dev/* --exclude=/common/* -avz /lxc/lxclib/hName/rootfs/* ./
次に、最初のコンテナに対して、共通部分とデバイス用の2つのディレクトリを作成します。
$ mkdir /lxc/lxclib/Node1/rootfs/common $ mkdir /lxc/lxclib/Node1/rootfs/dev
バインドプログラムを使用してそれらをマウントします。
$ mount --bind /lxc/lxclib/hName/rootfs/dev /lxc/lxclib/Node1/rootfs/dev $ mount --bind /lxc/lxclib/hName/rootfs/common /lxc/lxclib/Node1/rootfs/common $ mount -o remount,ro /lxc/lxclib/Node1/rootfs/common
構成ファイルとfstabファイルをベースコンテナーから最初のコンテナーにコピーします。
$ cp /lxc/lxclib/hName/config /lxc/lxclib/Node1/ $ cp /lxc/lxclib/hName/fstab /lxc/lxclib/Node1/
最初のコンテナーの構成で名前をNode1に変更し、MACアドレスも変更します。
$ nano /lxc/lxclib/Node1/config