/lxf

Primary LanguagePython

Lxf

Lxf is a small python script to use the general idea of Dockerfiles with LXC/LXD. It's just a toy at the moment. Created because sometimes you want to think about containers as lightweight VMs rather than individual processes.

Lxffile Format

Top line:

image name eg: ubuntu/xenial/amd64

Next lines:

  • ADD source dest eg: ADD fakesource /moo/
  • command to run eg: mkdir /srv/foo
  • comments eg: # hello

Demonstration

[This repository has included a Vagrantfile, to make it easy to try LXF out]

jon lxf (master) $ vagrant up && vagrant ssh

ubuntu@ubuntu-xenial:/vagrant$ cat Lxffile

ubuntu/xenial/amd64
apt-get update
/bin/bash -c "echo \"a1\" > a2"
ADD fakesource /moo/
/bin/bash -c "echo \"b3\" > b4"

[lxf.py takes a single argument, the container name]

ubuntu@ubuntu-xenial:/vagrant$ ./lxf.py a1

[some output removed]
key 20b17e08ab94667a
No snapshot found
Creating new Container
config: {'mode': 'pull', 'source': {'type': 'image', 'alias': 'ubuntu/xenial/amd64', 'server': 'https://images.linuxcontainers.org'}, 'name': 'a1'}
Waiting for container to boot
Trying to contact container
stdout Hit:1 http://archive.ubuntu.com/ubuntu xenial InRelease
Fetched 601 kB in 0s (1431 kB/s)
Reading package lists...
key 729936be33cf6c04
key 49ab7b3948b88104
key 5af95bee295ffc9f

ubuntu@ubuntu-xenial:/vagrant$ lxc exec a1 bash

[check the commands have run (b4 is there)]

root@a1:~# ls /

a2  bin   dev  home  lib64  mnt  opt   root  sbin  sys  usr
b4  boot  etc  lib   media  moo  proc  run   srv   tmp  var

root@a1:~# ls /moo/fakesource/

moo.py test.txt

[Add a line to the Lxffile]

ubuntu@ubuntu-xenial:/vagrant$ echo '/bin/bash -c "echo \"testing\" > testing"' >> Lxffile

[Create a new container, using the modified Lxffile]

ubuntu@ubuntu-xenial:/vagrant$ ./lxf.py a3

[note this creates a container from a snapshot (5af95bee295ffc9f)]

all_snapshots defaultdict(<class 'list'>, {'c2b94885779b668f': ['a1'], '729936be33cf6c04': ['a1'], '5af95bee295ffc9f': ['a1'], '49ab7b3948b88104': ['a1'], '20b17e08ab94667a': ['a1']})
key 20b17e08ab94667a
key 729936be33cf6c04
key 49ab7b3948b88104
key 5af95bee295ffc9f
key 47e17d8755ddb040
Creating new Container
config: {'name': 'a3', 'source': {'source': 'a1/5af95bee295ffc9f', 'type': 'copy'}}
Waiting for container to boot
Trying to contact container
stdout
stderr

ubuntu@ubuntu-xenial:/vagrant$ lxc exec a3 bash

root@a3:~# ls /
root@a3:~# cat /testing
testing