lxc by default uses /container as the directory to store container images and metadata. /container/[containername]/rootfs and /container/[containername]/config. You can specify an alternative pathname using -P. To make it easy I added an extra disk to my VM that I use to try out containers (xvdc) and then just mount that volume under /container.
- Create btrfs volume
If not yet installed, install btrfs-progs (yum install btrfs-progs)
# mkfs.btrfs /dev/xvdc1 # mount /dev/xvdc1 /containerYou can auto-mount this at startup by adding a line to /etc/fstab
/dev/xvdc1 /container btrfs defaults 0 0
- Create a container
# lxc-create -n OracleLinux59 -t oracle -- -R 5.9This creates a btrfs subvolume /container/OracleLinux59/rootfs
Use the following command to verify :
# btrfs subvolume list /container/ ID 260 gen 33 top level 5 path OracleLinux59/rootfs
- Start/Stop container
# lxc-start -n OracleLinux59
This starts the container but without extra options your current shell becomes the console of the container.
Add -c [file] and -d for the container to log console output to a file and return control to the shell after starting the container.
# lxc-start -n OracleLinux59 -d -c /tmp/OL59console # lxc-stop -n OracleLinux59
- Clone a container using btrfs's snapshot feature which is built into lxc
# lxc-clone -o OracleLinux59 -n OracleLinux59-dev1 -s Tweaking configuration Copying rootfs... Create a snapshot of '/container/OracleLinux59/rootfs' in '/container/OracleLinux59-dev1/rootfs' Updating rootfs...'OracleLinux59-dev1' created # btrfs subvolume list /container/ ID 260 gen 34 top level 5 path OracleLinux59/rootfs ID 263 gen 34 top level 5 path OracleLinux59-dev1/rootfs
This snapshot clone is instantaneous and is a copy on write snapshot.
You can test space usage like this :
# btrfs filesystem df /container Data: total=1.01GB, used=335.17MB System: total=4.00MB, used=4.00KB Metadata: total=264.00MB, used=25.25MB # lxc-clone -o OracleLinux59 -n OracleLinux59-dev2 -s Tweaking configuration Copying rootfs... Create a snapshot of '/container/OracleLinux59/rootfs' in '/container/OracleLinux59-dev2/rootfs' Updating rootfs...'OracleLinux59-dev2' created # btrfs filesystem df /container Data: total=1.01GB, used=335.17MB System: total=4.00MB, used=4.00KB Metadata: total=264.00MB, used=25.29MB
- Adding Oracle Linux 6.5
# lxc-create -n OracleLinux65 -t oracle -- -R 6.5 lxc-create: No config file specified, using the default config /etc/lxc/default.conf Host is OracleServer 6.5 Create configuration file /container/OracleLinux65/config Downloading release 6.5 for x86_64 ... Configuring container for Oracle Linux 6.5 Added container user:oracle password:oracle Added container user:root password:root Container : /container/OracleLinux65/rootfs Config : /container/OracleLinux65/config Network : eth0 (veth) on virbr0 'oracle' template installed'OracleLinux65' created
- Install an RPM in a running container
# lxc-attach -n OracleLinux59-dev1 -- yum install mysql Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package mysql.i386 0:5.0.95-3.el5 set to be updated .. Complete!
This connects to the container and executes # yum install mysql inside the container.
- Modify container resource usage
# lxc-cgroup -n OracleLinux59-dev1 memory.limit_in_bytes 53687091 # lxc-cgroup -n OracleLinux59-dev1 cpuset.cpus 0-3 # lxc-cgroup -n OracleLinux59-dev1 cpuset.cpus 0,1
Assigns cores 0 and 1. You can also use a range 0-2,...
# lxc-cgroup -n OracleLinux59-dev1 cpu.shares 1024 # lxc-cgroup -n OracleLinux59-dev1 cpu.shares 100 # lxc-cgroup -n OracleLinux59-dev1 cpu.shares 100 # lxc-cgroup -n OracleLinux59-dev1 blkio.weight 500 # lxc-cgroup -n OracleLinux59-dev1 blkio.weight 20
etc...
A list of resource control parameters : http://docs.oracle.com/cd/E37670_01/E37355/html/ol_subsystems_cgroups.html#ol_cpu_cgroups
Lenz has created a Hands-on lab which you can find here : https://wikis.oracle.com/display/oraclelinux/Hands-on+Lab+-+Linux+Containers