You probably have heard of Docker or have seen their whale (Moby) logo somewhere. Or perhaps you have been looking to find out what containers are and found Docker as one of the container engines out there.
So what the heck is a container or Docker and what’s all the fuzz about and why is it so popular.
Who is Docker
Docker can be separated in to two “parts”: Docker Inc. and Docker.
Docker Inc. this is the company behind the Docker project. They sell for example Docker Datacenter or supported versions of the Docker Engine, Docker Swarm, Support etc. And they are one of the sponsors of the open source Docker project.
The Docker project is the open source project that develop the Docker Engine the first part takes care of the open source parts of Docker like the Docker Engine/Swarm (or the other software parts that exist on GitHub) and you have Docker Inc. this is the commercial part of Docker that for example sells Docker Datacenter and a supported Docker Engine/Swarm.
What is Docker
According to a quote on their website, this is on a high level pretty much what Docker is all about;
“Docker is an open platform for developing, shipping, and running applications. Docker is designed to deliver your applications faster. With Docker you can separate your applications from your infrastructure and treat your infrastructure like a managed application. Docker helps you ship code faster, test faster, deploy faster, and shorten the cycle between writing code and running code.”
So it’s for developers only? Should you as an operations person stop reading? No not at all, this technology is important for both developers and operations.
But first let’s take a closer look at what containers are;
What are Containers
Containers create a barrier between the host OS and the apps that are running, so you might ask yourself is it a new form of virtualization? Well no, it has some of the same benefits and features that virtualization brings it is not the same thing as virtualization however containers are definitely not the same thing as virtualization. It’s more like running a single process inside a separated bubble.
For example with Virtual Machines you extract the Operating System from the underlying hardware. With Containers you’re doing the same thing except you extracting the application and all the runtime from the Operating System.
Some of the benefits that containers give you; – isolation – Sharing – Rapid application deployment – Version control and component reuse – Simplified maintenance – Portability across machine – Lightweight footprint and minimal overhead
So containers is a new technology? No not at all. Docker is new, however containers technology are not a new technology at all. LXC has been released in August 2008, so that’s not new at all, it has been released years before Docker. And if you dig a little deeper you will find out that the good old mainframes have some sort of container technology running and they are even older than LXC 😉
Why do we need Docker if we have LXC
Short answer, if you have ever worked with LXC you might understand that LXC is very complex and not that easy in use. For example starting a container is far more complex than just run “docker run -it centos bash” to start a CentOS based container. With Docker things get less complex as with LXC, so everyone can create containers/images and run them on any node.
So what’s different? First of all Docker makes it easy to use container technology, they have built an easy to use framework/tooling around the container engine.
Besides that they do far more than just running containers on a machine, for example they have created Docker Swarm/Datacenter (in short; a container platform that schedules containers across multiple nodes). And one of the best things they have a so called App Store called Docker Hub, here you can find official container images like CentOS, NGINX, WordPress, Redis etc. and it’s possible to upload you’re own images or use a image create by someone else (as always, please check the content of the container when it’s create by someone else, for example check the Dockerfile).
Because Docker is more like a framework around container technology lets take a brief moment to take a look on what containers actually are.
Is Docker unique?
Well it depends what you define as unique. Docker made containers available for everyone, they kick started the container revolution. However at the moment there are few big players in the container engine space;
- Docker Engine
- Rkt (Rocket from CoreOS)
If you want to get an up to date picture of the container landscape I would highly recommend you to check out the Cloud Native Computing Foundation – Cloud Native Landscape on Github, you will find all the relevant container engines in section Container Runtime.