I wonder if Docker can replace Puppet.

I've finally spent a little time playing with Docker, and to be honest, the really simple

here's a list of commands that get run to set up the image

feels awesome.

to test it out, I wrote the simplest steps I could think of to create a working foswiki installation into a Dockerfile:

FROM ubuntu

MAINTAINER    Sven Dowideit svendowideit@home.org.au RUN echo deb http://fosiki.com/Foswiki_debian/ stable main contrib > /etc/apt/sources.

list.d/fosiki.list

RUN echo deb http://archive.ubuntu.com/ubuntu precise main restricted universe multive

rse >> /etc/apt/sources.list

RUN gpg –keyserver the.earth.li –recv-keys 379393E0AAEE96F6

RUN apt-key add //.gnupg/pubring.gpg

RUN apt-get update

RUN apt-get install -y foswiki #create the tmp dir

RUN mkdir /var/lib/foswiki/working/tmp

RUN chmod 777 /var/lib/foswiki/working/tmp

#TODO: randomise the admin pwd..

RUN htpasswd -cb /var/lib/foswiki/data/.htpasswd admin admin

RUN mv /etc/foswiki/LocalSite.cfg /etc/foswiki/LocalSite.cfg.orig

RUN grep –invert-match {Password} /etc/foswiki/LocalSite.cfg.orig > /etc/foswiki/Loca

lSite.cfg

RUN chown www-data:www-data /etc/foswiki/LocalSite.cfg RUN bash -c ‘echo “/usr/sbin/apachectl start” >> /.bashrc'

RUN bash -c ‘echo “echo foswiki configure admin user password is ‘admin'” >> /.bashrc'

EXPOSE 80

and then I can create the image with a simple:

docker build -t svendowideit/ubuntu-foswiki .

and run that image by calling:

docker run -t -i -p 8888:80 svendowideit/ubuntu-foswiki /bin/bash

Which (assuming that port 8888 is unused on my host computer) means I can do some testing by pointing my web client to http://localhost:8888/foswiki

When I exit the bash shell, which allows me to debug what is happening, everything is shutdown, and all changes are lost. If I make changes, I can commit them, but at this point, I prefer to make a new Dockerfile.

The interesting thing is that Docker seems to create an image tag for every command, so if I make add some RUN lines, or make changes, it doesn't need to re-do steps that it has done before…. which sounds to me just like Rex, Puppet, Ansible etc – but more re-useable.

And so, I'm curious to see how hard it would be to push out Docker versioned configuration changesets over ssh to ‘anywhere', with some kind of impotency via system ‘tags'.

PS, the docker image is available from https://index.docker.io/u/svendowideit/ubuntu-foswiki/ , and uses my debian packages, so you should install new extensions using apt-get install