It seems like everyone I speak to about Docker containers thinks they can’t replace virtual machines.
Well…….. I beg to differ!
I thought containers could only run a single process?
First up. Why do people think containers can’t replace VM’s?
Well…. from my extensive scientific research (a.k.a my gut-feel after conversations with various people) it seems the fact that containers are soooo great for single-process microservice type architectures, people just assume that’s all they’re good for. Add to that, a bunch of the messaging coming of out Docker Inc has subtle undertones that if you’re doing anything other than single-process containers, then you’re doing it wrong.
Well I disagree with the above.
Don’t get me wrong, I totally *get* the one-process per container thinking –
- One concern per container
- Totally magic for anything remotely associated with terms like web-scale and microservices
- A process crashes.. just restart the container
- Treat them like cattle ‘n all….
The list could go on…. and I’m totally cool with it all. But what I’m not cool with is the idea that this is all containers are good for. Just because containers are awesome at one thing, does not automatically mean they can’t be the bizzo for other use-case as well.
NOTE: Need to learn Docker? Check out my Docker Deep Dive course over at Pluralsight to get yourself up to speed!
Wait… containers can run more than one process!
The fact is, containers absolutely can run multiple processes. And lots do. In fact, projects like phusion/baseimage are all about containers running multiple processes.
The way I see it, stuff like phusion/baseimage are cracking examples of innovation on a new and revolutionary platform. And I’m expecting the future to be rich with init processes and forks of systemd hand crafted for running inside of containers! In fact the way I see it, container-focussed versions of apps and init systems might even dwarf their full-blown-OS cousins at some point in the future. And without getting too carried away…. gazing further into my crystal ball, I can see a potential future where everything’s container-optimized, with just the occasional VM in the corner.
Disagree? Think I’m off my Rocker?
I probably am.
Magic, you’re entitled to your opinion. But consider this…… a lot of the conversations I’m having about about containers and Docker are almost exactly the same as initial conversations I was involved with about virtualization and VMware.
It’s just like the early days with VMware
So wind the clock back 10-12 years, to the time I was first introduced to VMware….
Sure, my initial reaction was “wow this is cool“. But that reaction was immediately followed by “but its not for production!“. I specifically remember the discussions and thought patterns being pretty much – this is great for labs and testing, and may be some lightweight infrastructure services like DNS and the likes. But definitely not for mission critical stuff, definitely not for email, and definitely not for databases etc.
Well…. wind the clock forward 10-12 years to the present, and what have we got?
Most people now have a VM first approach to application deployment, and deploying to a physical server is frowned upon.
So what happened?
Well…. the VMware technology matured and so did the ecosystem. Not to mention users got more comfortable with it, and the vital fact that vendors started officially supporting their apps on VMs. Suddenly the camel had its foot inside the tent!
Well guess what….. I bet the same will happen for containers. Today people’s initial reaction is that containers are only for certain types of apps and use-cases, but not for others. Sound familiar?
Well I’m willing to bet that things will grow and mature to the point where we have a container first approach to app deployment, and deploying to a VM will be frowned upon!
Anyway, even if you disagree with me on the container first approach, the fact remains that containers absolutely can run multiple processes. And therefore are a threat to VMs.
Will multi-process containers be an interim solution?
Yes, almost definitely.
But that interim could end up being a loooong time. The world doesn’t change overnight. I’m sure we’d all love to be developing and running native scale-out microservice apps. But that’s a long-ways off for a lot of companies. Multi-process containers could well be a good interim solution for those customers.
Are VMs gonna become extinct?
No, just relegated to the same corner of the data centre as the Mainframe.
Am I a VM hater?
No. I’m actually a fan. But that doesn’t change the fact that they’ve had their day. And let’s be honest, it was a long a glorious day! But trying to stop the sun setting on it is a waste of time talent and energy.
Am I a container fanboy?
Yes, may be.
Thanks for reading.