"I know two things about Docker: It uses Linux containers and the Internet won't shut up about it."
Solomon Hykes, founder of Docker, had this quote on a slide when he talked at linuxcon / cloudopen recently. I know at least one more thing about Docker: today, it is only supported on 64-bit Intel / AMD64 systems. I work on 64-bit ARM servers and so this is a bit of a problem for us.
There are two sides to this: one is that Docker is implemented in Go, and the usual Go toolchain does not (yet!) have a port to the 64-bit ARM architecture, and the second is that Docker does not keep track of the architecture of an image in any structured way; it just assumes all the world is an amd64.
I don't really have anything to report about the latter problem (other than to say, yes, it's interesting, and a lot of work to fix properly) but the happily I've made some progress on the former.
"The usual Go toolchain" alluded to above is not the only Go toolchain: there is also gccgo, the Go frontend to GCC. I'm quite used to working with gccgo -- it's how we enabled juju on ARM servers for Ubuntu Trusty. Unlike juju, Docker uses cgo extensively to interface with C libraries so first I had to enable cgo on AArch64, collect together some patches fixing some bugs in gccgo's cgo and finally enable building the cgo binary on gccgo-only platforms (all these fixes are available in Ubuntu Utopic currently and will hopefully get backported to Trusty in due course).
Once I'd done that, and understood Docker's build system a bit, I was able to build a docker binary, and then stand up in front of people (please ignore the title of the video) at Linaro Connect and demonstrate nodejs and mongodb, running inside docker running on a VM that was created by Openstack as deployed by Juju on real ARM server hardware running Ubuntu Trusty. As a demo of the readiness of ARM servers for a variety of workloads, I was pretty happy with this :)