Containers, virtual machines, or bare metal?

No readers like this yet.
No readers like this yet.
A maze

Opensource.com

Which technology will you use to deploy your next big application?

The data center is changing. Again. In the olden days, really not all that many years ago, pretty much every server that sat on a rack in a data center was fairly straightforward (if you could call it that). Each machine ran a single operating system, and often many programs, each requiring their own updates, upgrades, and patches. It was, putting it nicely, a hard situation to maintain, though many management tools emerged to help administrators keep all of their machines safe, secure, and up-to-date.

Then virtualization came along, and the world shifted a little. No longer were you limited to a single operating system per machine; you could stack many, many different applications, each running their own precisely-configured operating system with only the needed libraries onto a single commodity server, treating each as if it were its own server, because in effect each one was. Virtualization helped begin a shift, helped along by projects like OpenStack, from imagining each machine and application as a special snowflake, to one where applications became elastic and could grow and contract across machines as demand required and still function if one or more nodes suffered problems.

Finally, the new buzz: containers. As Docker entered the scene, making application deployment faster and easier, containers have been the rising star of the past few years as developers, system administrators, and architects must decide which applications are a good fit for building as small, composable parts run across many systems, and how they will take advantage of tools like Kubernetes to orchestrate these many pieces.

Not to be outdone, what's old is new again, and both virtual machines and bare metal solutions have kept up with their own sets of updated solutions. Bare metal and virtual machines can be managed with much of the ease of containers as the tools and technique and lessons learned from each technology cross-pollinates, and tools like Ansible, Puppet, and others can be used across all three. Tools like Vagrant bring much of the developer ease of Docker to virtual machines. And bare metal hasn't gone anywhere yet, as application use cases like big data require maximum performance from each machine they operate across.

In the modern world, we're now lucky to have three different tools, each specialized to excel as a particular type of problem, and each with many open source tools helping them to remain innovative solutions to any problem at hand. When we think about the future of the data center, we shouldn't be thinking about containers, virtual machines, and bare metal deployments as either/or choices. Instead, as each continues to innovate, we can choose the best tool for the job, depending on what the problem we are trying to solve is.

All three are probably here to stay, at least for the foreseeable future. But it's still interesting to ask those among us who administer systems and applications: For your next project, how do you plan to deploy? Bare metal, virtual machines, containers, or some combination of the three?

Creative Commons LicenseThis work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.
661 votes tallied
Virtual machines
30% (198 votes)
Containers
46% (304 votes)
Bare metal
24% (159 votes)

Results

Tags

Comments

6 Comments

I'm still experimenting with virtual machines. I wish I knew more about Docker and containers. Just last week I used Virtualbox to setup ownCloud and get familiar with the install on Ubuntu server so I could do that on a bare metal machine. Are there any Docker playgrounds for wannabes like me to get some experience in? I read an earlier article (month or so ago) about Vagrant here on the site. Is Vagrant a better option than going with a "bare metal" box? I need more experience to feel confident.

If you can bring up a virtualbox with ubuntu, then you can add docker to that and experiment:
https://docs.docker.com/engine/installation/linux/ubuntulinux/

Pretty straightforward.

Don,
I'm with you. I have used VM machines in the past and current but I'm not in a large enough company that does containers and such. I would love to play more with Docker and such. The "play" experience is how I learn the best.

Personally I find LXD (https://linuxcontainers.org/lxd/try-it/) the most interesting. Docker is (more or less) limited to a single process. LXD feels more like a VM even though it's a container. It even does live migration.

I can imagine Docker having advantages for developers, but for other uses LXD seems like a much better fit.

Just getting into containers vs VMs vs bare metal... timely article :-)

So pretend you have a billing application that consumes 5% of hardware recourses. In my case we needed a place where we can deploy a network monitoring application (Dude). That runs under mikrotik operating system. The machine with billing app runs windows. So simple virtualbox install on windows gave ability to install mikrotik with dude monitoring application! Pretty simple solution. So now I have machine with windows host and mikrotik guest and 10% resource utilization. Not bad consolidation...