Docker containers are everywhere. Kubernetes is a household word (in geek households, at least). Yet the question remains: Will containers ever totally displace virtual machines?
That’s a question worth asking as Docker’s fifth birthday approaches. Predictions about Docker’s ability to displace virtual machines—and, especially, VMware—go back several years. And yet they clearly have not disappeared, or come close to it.
Indeed, although I have not seen any hard numbers about the market share, I’d bet that more workloads are currently hosted in virtual machines than in containers. (Many organizations use both technologies in parallel, of course, so it’s difficult even to talk about the “market share” of virtual machines or containers.) Not only have containers failed to kill off virtual machines, but they’re probably not even in the lead when it comes to adoption rates.
Docker vs. VMs
Why are containers not displacing virtual machines?
It’s not for lack of technical features. Containers offer a number of benefits over virtual machines:
- They’re more efficient.
- They’re faster to deploy.
- They’re fully open source, which is not the case with all virtual machines. (KVM is the only major open source VM hypervisor; other popular options, such as VMware and Hyper-V, are mostly closed.)
Why Virtual Machines Won’t Disappear
Despite the benefits that containers offer, it’s hard to argue that they will ever displace virtual machines entirely. VMware—along with other traditional virtualization companies—seems like a pretty safe bet for the foreseeable future.
There are several reasons for this:
- Persistent storage is more complicated using containers. That’s not to say you can’t do stateful apps with containers. You certainly can. But no matter how sophisticated Docker storage volumes get, or how many third-party vendors offer tools to help handle storage for containers, persistent storage is never going to be as simple as it is with virtual machines.
- Container security is less tight. This does not mean that containers are not secure, or that you can’t secure them. But as with persistent storage, no matter what you do, at the end of the day containerized workloads are just inherently less secure because there is less isolation.
- Containers can’t run everywhere. Docker only works on Linux and certain up-to-date versions of Windows. That may be fine for most people. But it’s never going to please everyone. There are always going to be folks who need a virtualization solution on more exotic *nix systems, or on older versions of Windows. Docker won’t cut it for them.
- Containers are less portable. On a similar note, you can’t take a containerized application for Linux and run it using Docker on Linux—unless, of course, you set up Linux inside a virtual machine on Windows, but then you have to start asking yourself why you are using Docker in the first place. Virtual machines are more portable. Generally speaking, you can run the same virtual machine on Linux or Windows.
These are all reasons why virtual machines are not going to go away. They’ll coexist—and complement each other—for a long time to come.