CoreOS the Docker Based Linux Distro
CoreOS just caught my eye as news that they’ve reached beta hits the wires. I’ve been aware of Docker and the concept of containerization on Linux. Like many of you I’ve kept an eye on how the unicorns (Google, Netflix, Etsy, Facebook, Amazon, etc.) provision their infrastructure. CoreOS looks to take Docker, both as concept and product, and apply it to Linux to give you unicorn-like server infrastructure.
Quick Docker Primer
So what’s Docker? Docker is an open-source product that allows you to describe or “wrap” an application in a portable container. Docker containers have been likened to lightweight VMs in concept. They’re almost like a VM without the OS inside. This container has inside of it all the binaries, files, configs, databases, libraries or whatever else you need for your application.
The container gives you a layer of abstraction from the underlying OS so that you can avoid common pitfalls of software deployment. Does your app need a particular version of a particular library? Add it to your container. Even if there’s an incompatible version of the same library on the underlying OS or in a neighbouring container, there’s no conflict. Likewise you don’t have to worry about your dependant library not being installed on the underlying OS if it’s in your container.
For a slightly deeper look into Docker as well as Linux Containers (LXC), the technology behind Docker, I recommend Scott Lowe’s series of LXC blog posts, starting with A Quick Introduction to Docker.
The CoreOS Difference
So why use CoreOS as your underlying OS instead of your favourite Linux distro? CoreOS lives and breathes Docker. It has a lightweight core upon which etcd and Docker run. Basically everything else is a Docker container. In addition to this, CoreOS has decided to make clustering one of their core principles. Containers can run on one or multiple CoreOS instances via fleet and can connect together through service discovery via etcd.
Containers also allow CoreOS users to approach updates and patches differently. Rather than a many little patches, code changes, library updates, etc., you have a smaller number of controlled container replacements. Since you control the makeup and integrity of container ‘B’, when it comes time to replace container ‘A’ your update risk is based on the amount of testing you put into it. Even if you do have an issue during an update? Simply deploy the original container ‘A’ over your container ‘B’ and you’re back in business.
This is exciting stuff because it provides an open-source platform that has the potential to be adopted as a common delivery platform. Engineer your Docker applications to take advantage of CoreOS and the etcd based service discovery, and you could easily deploy distributed, cluster aware apps in your private data center or public cloud.
What Does This Mean?
Sure, we can do this today using traditional virtualization plus various technologies. The lightweight nature and container approach suggests a nimbleness that some solutions will benefit from versus other, heavier, methods. The perceived out-of-the-box developer “friendliness” of Docker doesn’t hurt those looking to take advantage of improved delivery and, dare I say it, adopt DevOps methodologies.
Bare in mind that CoreOS just hit beta and Docker still asserts that it’s not production ready (yet). That being said, the future looks very interesting!
Featured image photo by Jim Bahn