There is a lot of buzz about a “new” technology called Docker. I say “new” in quotes, because most of us greybeards should remember a technology called “containers,” circa 2004, and the arguments about which was better: virtualization or containers.
Well, it seems that the wheel has turned full circle, and we are back in that same place again. Somebody in the Linux world has invented Docker and marketed it. But what is it? Basically, Docker is a containerization tool for Linux—wait, déjà vu, there’s a glitch in the matrix. Substitute the word “Docker” for “Solaris Containers,” and you have the same beast. But now containerization is open source, so it must be right, because all the cool kids are talking about it.
What is Docker not? It is not a replacement for virtualization. It could theoretically serve as a replacement, but I doubt the company will move that way.
Docker is not a true container like LXC, and it is not a configuration manager replacement for tools like Chef and Puppet.
Most importantly, it is not a PaaS.
Now, back to our original question: What is it? Docker is a tool for Linux, and only Linux. In my opinion, it suffers the same fundamental flaw as that of the original paradigm: a limited use case that ignores the rather large installed Windows Enterprise base.
Docker is not a replacement for virtualization. Virtualization can support multiple guests—that’s right, Microsoft and Linux guests in any combination. It can also support different kernels across multiple Linux guests running on the same host. Docker is tied to the particular kernel release the partition with which it was created.
To me, Docker is more akin to the application virtualization of the Linux world; it can give me easy portability of my Linux application sets across Linux machines, and even differing distributions. However, these machines must be running the same kernel level. See the diagram below to understand my position:
Now, look at the following diagram; you can see why Docker is not currently a virtualization replacement, but rather is much more aligned with the application virtualization stack.
Docker is a cloud product. Its use case answers a cloud problem, in that every time you spin up a VM in an IaaS cloud, you are racking up a bill, be that on AWS, GCE, or any other public cloud provider. If your VM is Linux-based, Docker can help you get more out of it by containerizing your applications and allowing them to scale in a single running guest. Perhaps an Apache server or a Rails or PHP instance. Mayhap you can even containerize your three-tier applications into the single box, but with the benefit of being pseudo-independent.
Is Docker useful? Yes, it is; it is useful just as application virtualization is useful in the Windows paradigm. Will it knock virtualization off its current pedestal? Not in its current form. If it morphs into a hypervisor, it may, but it will have vSphere, Xen, KVM, and Hyper-V to contend with. Docker does what it does very well.