Docker: Some days I love it. Some days I hate it. Most days, I love it and hate it at the same time.
Why? Let me explain. Here’s a list of the pros and cons of Docker containers, as I see them.
I like to think positive, so I’ll start with the pros. For my money, Docker does the following things well…
Docker is fast
When I was a kid, and until I started using Docker containers in my late twenties, virtualization was synonymous with lethargy. Running something inside a virtual environment meant waiting for a virtual machine to boot up, then waiting even longer to start whichever particular application I needed to run. Even emulating DOS applications in DOSBox took a while.
With Docker, all of that waiting is a distant memory. By cutting out the need to boot up a full virtual machine, Docker lets me start apps in a virtual, software-defined environment much more quickly.
Docker is well documented
Docker’s feature set changes rapidly. The Docker team churns out new releases at a dizzying pace. Each release tends to add new features, and deprecate old ones.
Fortunately, the Docker team also does a nice job of documenting everything. The Docker documentation is reliably up-to-date. The docs usually make it very clear if information applies only to specific versions of Docker.
Docker’s solid documentation merits praise because many other software projects do a poorer job in this respect—especially ones that evolve as rapidly as Docker.
Docker has public container registries
One of the coolest things about Docker that people tend to overlook, I think, is the way it has made public repositories the go-to way to distribute and install software. I’m referring to Docker Hub, which hosts thousands of container images that anyone can grab in just a single command.
The repository idea is not new to Docker, of course. GitHub has been doing the same thing for years. So have Linux distributions, which usually rely on public repositories as the main source for installing software.
But GitHub generally only lets you grab code, not ready-to-use apps. And Linux repositories work only on, well, Linux.
Through Docker Hub, Docker brings turn-key software distribution and installation to a new level. Repositories are no longer something you use just for source code or on Linux. With Docker, they become the default way to install software almost anywhere.
Of course, not all is perfect with Docker. Here are some features and characteristics that I dislike.
Docker storage is still hard
Better storage options for Docker containers are on the horizon. But the fact remains that today, there is no really seamless way to connect containers to storage. Docker Data Volumes require a lot of provisioning on the host and manual configuration. They solve the storage dilemma, but not in a really user-friendly or efficient way.
I have yet to try out most of the third-party storage solutions for Docker containers. I’m hoping they’ll smooth things over. But what I’d really like to see is a way to do storage with Docker itself that “just works.”
Docker has poor monitoring
Basically, the only type of monitoring solution that Docker offers is the stats command. That works fine if you need very basic information about your containers. But for more advanced monitoring, you’re out of luck.
There are third-party tools that offer more monitoring, such as CAdvisor. Here again, though, I wish Docker itself provided more robust monitoring. I’m not looking for a full-fledged data analytics platform, but at least a way to gather more data about containers in real-time, which I could then feed to data analytics.
Docker is platform-dependent
Docker now advertises itself as supporting Windows and Mac OS X as well as Linux. But it actually uses virtual machines to run on non-Linux platforms. At the end of the day, Docker is still Linux-only.
I’m a die-hard Linux guy at heart, and the free-software fan in me would like to see Docker continue to work only on Linux forever. However, the part of me that wants to get to the era where we can have 100 percent app-centric infrastructure wishes Docker offered real support for Windows and OS X. Until you can run Docker containers there without using a virtualization layer between the host OS and Docker, Docker containers won’t be truly platform-independent.