假设我们有一台安装了lxc的服务器和一个用作img /var/lib/lxc/ubuntu_base
的基础的lxc容器。 为了简单起见,让我们在复制基本图像后忘记configuration更改。
有些人build议使用子卷和快照来制作新的容器,但是可以很容易地做cp –reflink和类似的结果。
那么pipe理多个容器的方式是什么(或哪个更好)呢?
这种方式似乎是最好的,但像lxc-destroy这样的命令将无法工作,因为它将无法删除目录。
btrfs subvolume snapshot /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
我不确定这个或快照之间是否有任何性能差异
cp --reflink=always /var/lib/lxc/ubuntu_base /var/lib/lxc/container_1
编辑:
我在reflink选项中看到的一件事是,如果别人正在运行,那么你不能删除基本容器,因为/proc
和/dev
是被挂载的,并且永远不会改变,se引用总是相同的。 但closures所有的复合容器似乎有帮助。
我在Ubuntu LTS 14上运行以下(甚至是第一次),它的function就像一个魅力:
lxc-stop -n ubuntu_base lxc-clone -o ubuntu_base -n ubuntu_base_c1 -s lxc-start -n ubuntu_base_c1 -d # make changes if needed lxc-stop -n ubuntu_base_c1 lxc-snapshot -n ubuntu_base_c1
如果后备存储是btrfs(在你的情况下),使用-x和lxc-clone会得到一个快照。
validation新的克隆/快照
lxc-ls -f btrfs subvolume list /var/lib/lxc
希望有所帮助!
如果要为lxc使用btrfs子卷,则需要在/etc/fstab
添加选项user_subvol_rm_allowed
。 从一个fstab文件中提取的示例:
UUID=XXXXXXXXXXXXXXXXXXXXXX / btrfs subvol=@,user_subvol_rm_allowed,defaults 0 0
该选项将允许您可以删除subvol而不是root,只有普通用户。 lxc在快照进入btrfs子卷时使用此function
猜猜这取决于你的基本图像有多大。 我可能lxc-创build一个新的容器,并使用Salt / Puppet等configuration我的容器,只有lxc克隆相对较大的容器(例如安装和configuration了大量工具的dev容器)。
请注意, lxc-clone将使用与源相同的后备存储。 因此,要使用子卷,您将需要使用“-B btrfs”创build容器。 例如:
lxc-create -B btrfs -n mycontainer -t ubuntu
然后克隆它:
lxc-clone -s mycontainer mynewcontainer
如果您使用zfs来存储容器,则会有一个额外的--zfsroot
选项来进行lxc-create,以便您可以select默认“tank”以外的zpool。 例如:
lxc-create -B zfs --zfsroot=data/lxc
分享和享受!