Docker is the well-known tool for building, distributing, and launching containers.
I use it personally to run a chat-server, a graphite instance, and I distribute some of my applications with Dockerfiles too, to ease deployment.
Here are some brief notes on things that might not be obvious.
For a start when you create a container it is identified by a 64-byte ID. This ID is truncated and used as the hostname of the new guest - but if you ever care you can discover the full ID from within the guest:
~# awk -F/ '{print $NF}' /proc/self/cgroup 9d16624a313bf5bb9eb36f4490b5c2b7dff4f442c055e99b8c302edd1bf26036
Compare that with the hostname:
~# hostname 9d16624a313b
Assigning names to containers is useful, for example:
$ docker run -d -p 2222:22 --name=sshd skxskx/sshd
However note that names must be removed before they can be reused:
#!/bin/sh # launch my ssh-container - removing the name first docker rm sshd || true docker run --name=sshd -d -p 2222:22 skxskx/sshd
The obvious next step is to get the IP of the new container, and setup a hostname for it sshd.docker. Getting the IP is easy, via either the name of the ID:
~$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' sshd 172.17.0.2
The only missing step is the ability to do that magically. You'd hope there would be a hook that you could run when a container has started - unfortunately there is no such thing. Instead you have two choices:
- Write a script which parses the output of "docker events" and fires appropriately when a guest is created/destroyed.
- Write a wrapper script for launching containers, and use that to handle the creation.
I wrote a simple watcher to fire when events are created, which lets me do the job.
But running a deamon just to watch for events seems like the wrong way to go. Instead I've switched to running via a wrapper dock-run:
$ dock-run --name=sshd -d -p 2222:22 skxskx/sshd
This invokes run-parts on the creation directory, if present, and that allows me to update DNS. So "sshd.docker.local" will point to the IP of the new image.
The wrapper was two minutes work, but it does work, and if you like you can find it here.
That concludes my notes on docker - although you can read articles I wrote on docker elsewhere.
Tags: docker No comments