SUSE’s Hackweek #9 is over. It has been an awesome week during which I worked hard to make docker a first class citizen on openSUSE. I also spent some time working on an openSUSE container that could be used by docker’s users.
The project has been tracked on this page of hackweek’s wiki, this is a detailed report of what I achieved.
Installing docker on openSUSE 12.3
Docker has been packaged inside of this OBS project.
So installing it requires just two commands:
There’s also a 1 Click Install for the lazy ones :)
Zypper will install docker and its dependencies which are:
lxc: docker’s “magic” is built on top of LXC.
bridge-utils: is used to setup the bridge interface used by docker’s containers.
dnsmasq: is used to start the dhcp server used by the containers.
iptables: is used to get containers’ networking work.
bsdtar: is used by docker to compress/extract the containers.
- aufs3 kernel module: is used by docker to track the changes made to the containers.
aufs3 kernel module is not part of the official kernel and is not
available on the official repositories. Hence adding docker will trigger the
installation of a new kernel package on your machine.
Both the kernel and the aufs3 packages are going to be installed from the home:flavio_castelli:docker repository but they are in fact links to the packages created by Michal Hrusecky inside of his aufs project on OBS.
Note well: docker works only on 64bit hosts. That’s why there are no 32bit packages.
If you are not familiar with SUSE Gallery let me tell you two things about it:
- you can download the appliance on your computer and play with it or…
- you can clone the appliance on SUSE Studio and customize it even further or…
- you can test the appliance from your browser using SUSE Studio’s Testdrive feature (no SUSE Studio account required!).
The latter option is really cool, because it will allow you to play with docker immediately. There’s just one thing to keep in mind about Testdrive: outgoing connections are disabled, so you won’t be able to install new stuff (or download new docker images). Fortunately this appliance comes with the busybox container bundled, so you will be able to play a bit with docker.
The docker daemon must be running in order to use your containers. The openSUSE package comes with a init script which can be used to manage it.
The script is
/etc/init.d/docker, but there’s also the usual symbolic link
To start the docker daemon just type:
This will trigger the following actions:
docker0bridge interface is created. This interface is bridged with
dnsmasqinstance listening on the
docker0interface is started.
- IP forwarding and IP masquerading are enabled.
- Docker daemon is started.
All the containers will get an IP on the
Playing with docker
Now is time to play with docker.
First of all you need to download an image:
docker pull base
This will fetch the official Ubuntu-based image created by the dotCloud guys.
You will be able to run the Ubuntu container on your openSUSE host without any problem, that’s LXC’s “magic” ;)
If you want to use only “green” products just pull the openSUSE 12.3 container I created for you:
Please experiment a lot with this image and give me your feedback. The dotCloud guys proposed me to promote it to top-level base image, but I want to be sure everything works fine before doing that.
Create your own openSUSE images with SUSE Studio
I think it would be extremely cool to create docker’s images using SUSE Studio. As you might know I’m part of the SUSE Studio team, so I looked a bit into how to add support to this new format.
– personal opinion –
There are some technical challenges to solve, but I don’t think it would be hard to address them.
– personal opinion –
If you are interested in adding the docker format to SUSE Studio please create a new feature request on openFATE and vote it!
In the meantime there’s another way to create your custom docker images, just keep reading.
Create your own openSUSE images with KIWI
KIWI is the amazing tool at the heart of SUSE Studio and can be used to create LXC containers.
As said earlier docker runs LXC containers, so we are going to follow these instructions.
First of all install KIWI from the Virtualization:Appliances project on OBS:
We are going to use the configuration files of a simple LXC container shipped
openSUSE_12_3_docker directory contains two configuration files used by
config.xml) plus the
The contents of this directory are going to be added to the resulting container.
It’s really important to create the
/etc/resolv.conf file inside of the
final image since docker is going to mount the
resol.conf file of the host
system inside of the running guest. If the file is not found docker won’t be able
to start our container.
An empty file is enough:
Now we can create the rootfs of the container using KIWI:
We can skip the next step reported on KIWI’s documentation, that’s not needed with docker because it will produce an invalid container. Just execute the following command:
This will produce a tarball containing the rootfs of your container.
Now you can import it inside of docker, there are two ways to achieve that:
- from a web server.
- from a local file.
Importing the image from a web server is really convenient if you ran KIWI on a different machine.
Just move the tarball to a directory which is exposed by the web server. If you don’t have one installed just move to the directory containing the tarball and type the following command:
This will start a simple http server listening on port 8080 of your machine.
On the machine running docker just type:
If the tarball is already on the machine running docker you just need to type:
Docker will download (just in the 1st case) and import the tarball. The resulting image will be named ‘my_openSUSE_image’ and it will have a tag named ‘latest’.
The name of the tag is really important since docker tries to run the image with the ‘latest’ tag unless you explicitly specify a different value.
Hackweek #9 has been both productive and fun for me. I hope you will have fun too using docker on openSUSE.
As usual, feedback is welcome.