Docker joins the Linux Foundation
blog.docker.io
blog.docker.io
I mean, congratulation guys, but why the hell didn't this happen earlier? I know I'm not the brightest bulb in the room but this has been a fundamentally dangerous feature to be missing. I don't get how anyone pretends that their Linux boxes are secure without some extremely personal contrived creations.
Vendors certainly seemed more focussed on getting people to use complicated virtualization schemes with proprietary hypervisors. I wonder if it was more a matter of man-power at that point.
In comparison, Sun was already selling systems so the value of selling virtualization separately so zones may have ended up being an elegant integrated solution. I'm not sure of the FreeBSD jail history but there may be a similar story to tell if you look at the source of the contributions.
The gist is that there were a lot of out of tree solutions (openvz is still used eg by Travis CI) but they had conflicting requirements and a lot of the suggestions were just "we need BSD jails" which is a very monolithic single purpose solution, like having a web server in the kernel (yes there was one) rather than having the kernel APIs in place so that was not needed.
What we have ended up with (mainly cgroups and namespacing basically) is much more flexible in that each piece is for a separate thing, eg you can just namespace networks without full isolation (which is really useful for eg testing network code without messing with the real config).
It did take a very very long time though.
In summary, I think it's because containers, although open source, are a relatively commercial technology. Interested in any comments from people were there in the 90's when lots of hosting providers started using Linux.
In the early 2000s, I was in the hosting business, and we started using UML (user-mode-linux), then vserver and openvz. When Xen came around, we switched to that, because it made more sense for us (and for our customers): more control, more "this is your machine" feeling.
"Yes, but containers are better because they are lightweight!" Of course, but this idea was pointless back then, because people who wanted really lightweight things went to shared hosting (and for massive PHP hosting, containers can't beat a single Apache instance serving tens of thousands of vhosts; at least not yet).
Maybe (maybe!) things changed with the rise of stacks like Python/Ruby/Node.js/etc for which there are no cheap shared hosting solutions like there is for PHP. Then containers are obviously cheaper than running your own VPS, and easier to setup (and isolate) than shared hosting on a single box.
LXC is built into the kernel directly, rather than a patch, which is very nice.
So far as I can see, Docker is just some nice wrapper scripts around LXC, nothing particularly revolutionary in and of itself.
What docker brings is a way for backend developers to package and distribute their app into portable, sandboxed containers (think "iphone apps for the server").
This is only possible now that linux has decent container support, because it means the vast majority of servers out there can potentially run a docker container unmodified.
You should be asking why Solaris/BSD never had something as useful as docker despite having zones/jails. And linux supports overlay filesystems (to clone containers cheaply) without the need for ZFS.
https://www.youtube.com/watch?feature=player_embedded&v=wW9C... gives a super quick overview. Very interesting technology.
Albeit this is a very simplified vision, I don't think the complete use cases for docker have been hashed out quite yet. tl;dr dev ops is about to get magnitudes easier.
Docker is a portable container engine. It gives you, the developer, a way to package your app and all its dependencies into a portable container which can be deployed on any modern Linux server: local VM, bare metal server, EC2 instance, doesn't matter. Containers are completely sandboxed and do not interfere with each other (think "iPhone apps for the server").
The specificities of each machine (location, distro, storage, networking) are abstracted away so you can focus on what your application requires (a known filesystem state, tcp ports to receive connections...) without having to worry about how those requirements will be met on each individual machine. This abstraction is based on common unix concepts - files, processes, tcp connections - and is therefore not language-specific, so it doesn't matter what programming language your application is written in.
To do this, Docker relies on a recent feature of the linux kernel called lxc. That's the part which allows sandboxing of applications from one another. The concept itself is not new - what is new is that it is now part of the mainstream kernel, which means almost every server in the world will soon be capable of running docker containers - hence the exciting possibility of "run anywhere".
Except doesn't it only run on Ubuntu? I looked at it to see if it might be useful for my servers, which are running Debian Wheezy, but the "Other Linux" instructions on the Docker site amount to "install VirtualBox and run Ubuntu" — which, yeah, anything will run anywhere if you just run it in a VM, but that was already true.
Docker is currently easier to run on certain distros than others. But it's not because it's distro-specific. It's because it has kernel requirements which are more easily met on certain distros than others. Those requirements are described at http://docs.docker.io/en/latest/installation/kernel/ (short version: aufs + lxc + (<=2.6 OR >=3.8))
Even just a list of software and kernel deps, then instructions on how to compile the rest of the software by hand would suffice.
For now I've had to muck around reading the Ubuntu packaging files to get a proper idea what/how you install this thing. Which isn't cool. :-(
The hardest part is to provide interchangeable, pluggable storage systems.
Merging aufs into mainline feels like the logical thing to do, but clearly someone in the chain disagrees. It's disappointing but it is what it is.
Btrfs seems like a more likely alternative for docker.