Some of you may already are in the know, or have even deployed or managed them. Some of you may have heard about them, heard of Docker, and even have a vague sense of what they are. But make no mistake – containers are coming!
The question first though is what exactly are they?
Containers challenge what you know about operating systems, VMs, applications, and such, because they really make you realize how much you bind into the definitions of these things without realizing it just because that’s how it’s been. Containers make you rethink much of what you know, just like VMs did when they were becoming the rage.
But let’s first make an analogy to help you understand what exactly containers are.
Let’s imagine a much simpler world of automobiles. Imagine you needed a vehicle to accomplish a task. While there were lots of brands, makes, models, and colors, there were really three basic types of vehicles in our hypothetical world:
- Monster truck
- Armored Humvee
What you would consider just a car didn’t exist. No SUV’s, no regular trucks, just those three basic types. Now, imagine your task was to get across town where you need to smash other cars, and see above traffic. That’s easy, you take the ridiculous monster truck. If you needed something to get you to see your grandmother to say hello, that monster truck or the humvee would be pretty hilarious to show up in, but they’d not be particularly practical, so you take the moped.
But what about going to the grocery store to get a few bags of groceries, and you go to the local market where you need to parallel park? Suppose the moped can’t carry all those groceries, so that’s out. The monster truck is WAY overkill, too. While the armored humvee would probably have a high safety rating, it’s overkill, and would kill you on gas mileage, but it’s the least ridiculous option you’ve got.
But then… a new option existed – a novel idea called a car. Except it’s not what most would typically think of. Instead, it was one of these:
AND… it was a hybrid, and hybrids hadn’t been invented yet. You start asking (what you would now consider since hybrids are ubiquitous) stupid questions like… “do I put gas in it?” “What kind of gas does it take?” “If I get in a wreck, will this happen?”
Welcome to containers! You used to run your applications (tasks) only on computers (monster trucks), but then we realized one application per physical computer was ridiculous, so we made VMs (humvee’s). And we didn’t just get more efficient. There were other inherent benefits to humvee’s. Parking, while still difficult, is easier in a humvee than that monster truck. VMs ease DR, etc.
But we’re so used to VMs, we don’t see their downsides and the fact that those are often overkill, too! Ever made for example six or one hundred redundant web servers for an application for high availability and to scale for the load? Ask yourself something… do you honestly think you really need the full OS six or one hundred times to achieve your redundancy and scale out? When you think about that, that’s pretty insane to store windows or linux that many times. Why do you think VDI environments often use linked clone techniques? (Not that containers are linked clones, they’re not at all.)
Go look at your VM inventory sometime. You’re bound to find some redundant VMs that store AND run entire operating systems multiple times, and there’s not necessarily a good reason other than, “I’m using VMs, what else am I supposed to do? Each of these VMs needs a unique name/MAC address/IP address to work, so I can’t run the same application twice within the same VM, it just won’t work.” That’s because you’re stuck choosing between grocery shopping with a monster truck, a humvee, and a moped.
And you’ve also just come to expect that the OS gets an identity on a network, not the applications within them. A NIC bound to an OS gets an IP address. If you want isolation between applications, they must be in separate OS’s. Nevermind you already know that’s not true because your hypervisor is an OS, so your VMs technically are running on the same hypervisor server are in a sense running under the same OS, yet we expect isolation between them.
Containers, just like when server virtualization became all the rage, cause you to rethink and realize that IP’s don’t necessarily coincide with OS’s, but you kinda knew that since a NIC can have multiple IP addresses, and a OS can have multiple NICs, and you can add virtualized NICs, too, right? Why does a computer name HAVE to refer to an OS instance on a physical or virtual machine? It doesn’t, and you already know this with DNS aliases, network load balancing technologies, etc., but it’s so ingrained in your brain, it’s hard for you to think it could be any other way.
Containers are essentially VM-esque in that they’re in some ways a virtualized instance of an application, with their own unique instance identities (container1, container2, etc.) complete with IPs, names, MAC addresses, etc., but they’re not completely independent like a VM is as far as its OS, as they depend upon a controlling OS instance that can and generally is shared between multiple containers simultaneously. It’s that notch on the dial between a VM and an individual application within an OS.
You may think this kind of technology is unnecessary and just causes confusion. It’s honestly similar in my mind to the whole smartphone/phablet/mini-tablet/tablet/laptop/desktop computer continuum. You may completely not participate in the use of one of those devices whatsoever because it doesn’t fit your needs, but it fits others. I personally use a smartphone, a tablet, a laptop, and a workstation class computer, and I find those cover my needs, and have no use for a phablet and mini-tablet. Some people find that they can go with a phablet instead of a smartphone and a tablet. That’s all well and good. Everybody doesn’t own every major type of automobile either.
But there’s a reason why each of those devices exists, and there’s a reason why container technology exists, too. And it’s becoming more popular. It’s been done for quite sometime in linux, and Microsoft is finalizing it’s first go with containers within Windows Server 2016. So, as IT pros, it’s better to be aware of it before you’re driving a car you don’t know how to drive, as my analogy goes.