What’s Wrong With Docker? Introduction to the Dockerless Course


Course Introduction
There are a few collocations that bother me a lot: "Docker container", "Docker Image" and "Docker registry".
We've all been using Docker for so long that we stopped thinking "container" and instead we think "Docker".
In reality, these are just "containers", "container images" and "container registries". And this is the terminology we should use.
Take "Git" as an example. GitHub revolutionized the way we work with Git repositories.
But we normally say "git repository" and we clearly see the difference between "git", which is an industry standard version control system and "GitHub", which is just one of many services that make collaborative work with "git repositories" way nicer.
We need a similar mental shift for containers. We need to realize what containers really are and draw a line between containers and the tools we use to work with them.
Dockerless course will help you to do exactly that.
In this course, you will learn about the open standards for containers and everything around them.
We will dive deep into how containers work and how they are structured and built.
Most importantly, we will learn and try half a dozen production-ready tools to work with containers - you will see that you don't need Docker to build and run containers neither in development, nor in production environments.
Finally, If you wondered why Amazon, RedHat and even the Kubernetes itself deprecated Docker support and how is it going to work without it - this topic is covered as well.
What You Need to Know
To fully benefit from this course, some knowledge of Linux is required - you need to know your way around the terminal, be familiar with the most often used commands and have an idea of how this operating system is structured. At the very least, you should know how to install packages, change file ownership and permissions, be familiar with the systemd and have a rough understanding of what Linux namespaces are.
Any up to date Linux distribution should be sufficient to replicate all the practical tasks of the course.
My personal Linux distribution of choice is Fedora Workstation, but it doesn't matter that much. Many of the concepts and tools will apply and work to certain extent on Windows and MacOS, but I give you no promises about this. To re-produce the examples and go through the labs, I recommend you to at least boot the virtual machine with some Linux distribution inside.
If you don't know Linux well, you will still benefit from the course - at very least, you should get a better understanding of containers in general.
Finally, it will definitely help if you know Docker, because that would allow you to put all the new concepts and tools into the right context.
What's Wrong With Docker?
We should start our path to understanding the Dockerless world by talking about Docker.
Judging by the title of the course, you might get an impression that I will try to tell you that Docker is bad. I won't.
Docker is a great tool and it has dramatically improved the developer experience. If there is a single tool that has sky rocketed the container usage in the world, it’s Docker.
There was no lack of various ways to isolate system resources before the initial Docker release in 2013.
LXC appeared back in 2008, chroot command appeared decades ago, Solaris zones were released in 2005 and FreeBSD jails exist since 2000. But, just like virtualisation, containerisation was a bit of a Wild West.
There was no open standard, just lots of different approaches and technologies around the general concept of "resource isolation without the full virtualisation".
Ironically, it took another tool in this messy landscape to eventually get us to the proper standards around containers.
Docker focused on the ease of use and the development experience - it became very convenient to spin up containers, build container images and, shortly after that, deploy them, even to production.
In fact, it was so enjoyable to use Docker, that the adoption of containers exploded. As a result of this explosion, the line between what containers are and what Docker is became very blurred.
When someone wants to say "tissue", quite often they would say "Kleenex".
When someone wants to say "containers", most like they would say "Docker" instead.
Kleenex the company is also making paper towels, diapers, tampons and what not. It's very easy for us to draw a line between Kleenex the tissue and Kleenex the brand. We say "pass me some Kleenex" and most likely we will get a relief for the greasy hands.
We realise that "Kleenex" is just a widely accepted name for a particular type of a paper product. If we will see the tissue from another brand, we won't get confused, we will still know what to do with it.
But is that the same with Docker? What do we mean by saying "Docker container"? Is it some generic container or is it something Docker specific? What about the "Docker image"? Do we know what's the real tissue behind this?
There is nothing bad with the Docker - it was and it still is a great tool, and the company behind it keeps improving this product, from both the usability and security points of view.
So this course is not about getting rid of Docker, but it is about seeing beyond Docker.
During the same period of time when Docker was making containers more popular, containers themselves became standardised.
The industry - including the Docker company - managed to move beyond different implementations of the same idea, figured the most popular patterns and approaches and came up with the open standards around how containers should be built and run.
But before we talk about those standards, we need to make sure we understand what containers really are. This will be the topic of the first proper lesson of the course next week.