[Lxc-users] Create container as clone of host
Serge Hallyn
serge.hallyn at ubuntu.com
Tue Apr 2 12:37:46 UTC 2013
Quoting Fajar A. Nugraha (list at fajar.net):
> On Tue, Apr 2, 2013 at 10:48 AM, Cody Doucette <doucette at bu.edu> wrote:
>
> > Hi all,
> >
> > I'm a student and pretty new to LXC. I'm having a little bit of difficulty
> > and
> > hoping someone could point me in the right direction.
> >
> > A project that I'm working on has made some changes to the network stack
> > in the
> > Linux kernel, and we're looking to test those changes utilizing containers.
>
>
> What changes are they? You DO know that lxc uses the same kernel as the
> host, right?
>
> If you wanted to modify the kernel and test the changes, then
> KVM/virtualbox/whatever would be a better choice.
>
>
>
> > Each
> > of these containers should be a clone of the host system which is running
> > our
> > own custom version of the kernel under Ubuntu 12.10.
> >
> > So far I have a pretty simple LXC configuration file:
> >
> > lxc.utsname = my_container
> > lxc.tty = 4
> > lxc.network.type = veth
> > lxc.network.flags = up
> > lxc.network.link = br0
> > lxc.network.name = eth0
> > lxc.network.mtu = 1500
> > lxc.network.ipv4 = 0.0.0.0/24
> > lxc.rootfs = /var/lib/lxc/my_container
> > lxc.mount = /var/lib/lxc/fstab.lxc
> >
> > And a similarly simple fstab file:
> >
> > / /var/lib/lxc/my_container none bind 0 0
> >
> > And am (perhaps naively) trying to create a container with the above using:
> >
> > # lxc-create -f /var/lib/lxc/config.lxc -n my_container
> >
> > So naturally I was hoping after executing the above that
> > /var/lib/lxc/my_container would be a bind mount of / (root), but that was
> > not
> > the case. Eventually, each container of course does not need to be a
> > complete
> > copy of the host, but I figured I would start with trying to do a basic
> > clone of
> > everything and then pare it down to what is really needed.
> >
> > Could anyone nudge me in the right direction? Any tips would be
> > appreciated.
Apart from lxc-clone with btrfs or lvm, you could also use
lxc-start-ephemeral --keep-data to create overlayfs-based (or aufs
based, if your kernel supports it) clones. So I generally do:
lxc-create -t ubuntu -n a0
lxc-start-ephemeral --keep-data -o a0 -n a1
log in, set up shut down, now you can use a1 as a regular container.
You can also clone it, which will result in another overlayfs-based
container based on a0's rootfs (with a1's delta copied over to start).
This will soon be integrated into lxc-clone itself so you don't have to
do the lxc-start-ephemeral step.
> Even if it worked, you'd have major problems as programs (e.g. syslog) will
> try to write the same file that was already open in the host system.
>
> If your changes are kernel-related, just clone the storage (e.g. using dd),
> then use KVM.
>
> If your changes are NOT kernel-related, then the easy way is if the root
> filesystem is on a snapshot/clone-capable fs (e.g. btrfs,zfs). Otherwise
> just use plain tar/rsync/whatever to copy the filesystem. I do NOT
> recommend using LVM snapshot as (from experience) it's more hassle than
> what it's worthed.
Hi Fajar,
what do you mean? Apart from the fact that my systems tend to not start
out with a spare partition to into a PV :) I've not had trouble.
Since I'm getting ready to implement clone in the C api, if you're
having trouble I'd like to make sure I fix it while I'm doing so.
thanks,
-serge
More information about the lxc-users
mailing list