Consider Docker Alternatives
As you may have heard a few months ago, Docker announced a change to its pricing model that will only affect Docker Desktop for enterprises starting in February 2022. This article takes this as an opportunity to talk about Docker alternatives. One focus is Docker Desktop. Even if the pricing changes do not affect you, I am sure there is something in here for you.
First, we will refresh our memory about Docker and discuss what it is all about. This will also help us distinguish the different products of Docker to separate Docker Desktop from the rest of Docker. After that, we will discuss Docker Desktop alternatives. Lastly, we’ll discuss how to replace Docker entirely. I’ve listed some links throughout the article that provide more details on the topics addressed here.
Okay, Docker Desktop is going commercial for enterprises. But what is Docker Desktop actually? Let’s put it in context.
Docker pricing changes
I suspect you are reasonably familiar with the concepts of Docker if you are reading this article, however I will give a brief refresher. This will make sure we are on the same page and also help us to highlight the parts that are affected by the pricing changes.
Docker refresher 🐋
Docker is all about containers. Without going too far, a container is a lightweight operating system process isolation technique for running applications that do not interfere with each other. Unlike a virtual machine (VM), it does not bring its own kernel and does not need a hypervisor to run. A container is much more lightweight. It’s not meant to replace VMs, but to complement them whenever you want to run an isolated process on the same kernel as your host. It’s pretty cool and is used everywhere. I encourage anyone curious about more technical details to do some research!
With Docker, the idea of containers has become mainstream over the years and many projects have sprung up. It can be said that it was through the success of Docker that Kubernetes became possible and with it the Cloud Native landscape we find today! Docker is not the only way to leverage container technology, but Docker has democratized the use of containers. Options to replace Docker will be discussed later, first we will look at the parts of Docker, or if you will, the high-level architecture.
The diagram above roughly illustrates Docker’s components in action. Let’s go through it briefly. At the heart of Docker is the Docker Engine, which runs as a daemon service and is also called Docker Daemon or dockerd. dockerd is the central component of Docker which provides an API that the user can interact with via a client. This client can be the Docker Desktop application we talked about, but it can also just be the Docker CLI. You have probably used the Docker CLI before to run commands in the terminal like
docker build. Since multiple clients are available to us, it is possible to use Docker without Docker Desktop, but more on that later. Let’s finish the diagram first. dockerd takes care of creating container images, pulling and pushing container images, as well as starting and stopping containers. There is much more to it, but as a refresher, this should suffice for now.
Since the price changes only affect Docker Desktop, let’s look at what this tool actually provides.
Docker Desktop offering
Docker Desktop is primarily a graphical user interface (GUI) to simplify the use of your Docker workloads. However, it is complemented by other useful features. The following diagram »zooms in« on the Docker Desktop offering and shows the most important features.
Docker Desktop features
- GUI to interact with containers: List, delete and display details for container images as well as starting and stopping containers running on your system (see docs).
- Build in container virtualization: Without any extra configuration by the user its possible to run containers locally. This will be important in the next chapters when we consider docker alternatives (see docs).
- Docker dev environments: Feature to simplify the colloboration and workflow of container images currently being worked on (see docs).
- GUI to manage files in volumes: An build in graphical file manager to access files in your containers more easily.
- Integration with Azure container instance(ACI): Build in integration to run containers on Microsoft’s cloud – Azure, using the serverless service ACI.
- Docker scan with snyk: Automatic container image vulnerability scanning using snyk (see docs).
- Local Kubernetes cluster: Deploy a Kubernetes cluster locally with docker containers. Containers will be run as pods in a Kubernetes cluster (see docs).
Now it should be clear what Docker Desktop offers and where it is placed in the „Docker ecosystem“. Let’s discuss alternatives.
Docker Desktop alternatives
First, let me comment on something shortly. Sometimes not paying for something ends up being more expensive than paying for it in the first place. What I mean by that is that even if there are free alternatives to Docker Desktop, that can still be the cheaper alternative depending on what all is included in the calculation.
Alright now let’s take a look at the alternatives to Docker Desktop.In the previous chapter, we listed the main features of Docker Desktop. There are a lot of tools available that offer the same features as Docker Desktop. However, there is not really one that shares all the features of Docker Desktop. I suspect that not all of Docker Desktop’s features are typically used anyway. Docker Desktop feels a bit like a one tool fits all situation. Before alternatives are discussed, we will look at who is likely to use Docker Desktop and from what point of view.
Assumptions why Docker Desktop is used and by whom
I do not use Docker Desktop but I can imagine why:
- Docker Desktop is a good starting point to get to know containers
- Docker Desktop is a user friendly way to run containers on windows and macos
- Docker Desktop replaces partially the CLI and looks more pleasing.
- Docker Desktop is used by the company and an established tool
- Docker Desktop is used because one of the features are interesting to you (e.g. the Kubernetes integration, ACI, …)
This list is somewhat arbitrary and does not come from a broader study. Maybe I missed something here, but that shouldn’t bother us too much here. Judging by the list, I can see two categories here.
- beginners who are new to container technology.
- engineers who are used to using Docker Desktop or follow corporate policies.
The first group probably doesn’t need to worry about the price change, as trying out a new technology as a student or hobbyist doesn’t come with a price tag.The second group, on the other hand, uses Docker Desktop in an enterprise context and will now have to pay for it.
I would imagine that enterprises are now looking around and switching to alternatives in order to not incur further costs. So what are the features that are most essential to Docker Desktop?
I assume the two most used features are easy virutalization to get containers running locally and an easy to manage interface to work with the containers.Let’s quickly introduce some GUI alternatives to Docker Desktop. After that, we’ll look at how to get containers running without Docker Desktop. At the end of this section, I will briefly say on local Kubernetes clustering, which is also one of the features of Docker Desktop.
There are quite a few options to visualize your containers. The repository awesome-docker lists a long list of web tools related to Docker. One section in the list discusses web applications that fall into the same category as Docker Desktop. Most of the tools are open source and free. Let’s take a look at a few!
- Portainer Community Edition is a lightweight service delivery platform for containerized applications that can be used to manage Docker, Swarm, Kubernetes and ACI environments (see github.com/portainer/portainer).
- DockStation is a developer-centric application for managing projects based on Docker. Instead of lots of CLI commands you can monitor, configure, and manage services and containers while using just the GUI (see github.com/DockStation/dockstation).
- Lazydocker is a terminal UI which is not as comprehensive as some of the other tools but a cool project. You can manage your docker containers and docker compose with the tool. See the github project repository lazydocker for more infos.
- Rancher Desktop is an open-source project that manages Kubernetes and containers over a GUI. It has a strong focus on the work with Kubernetes and could be a good option if your containers are run on Kubernetes at the end. See rancherdesktop.
Run your containers without Docker Desktop
Moving away from Docker Desktop also requires finding another way to run containers on your machine. Depending on how experienced you are with using Linux terminals, virtual machines, and the like, that may not be an easy task. Let’s talk about some options you have on Windows and macOS. If you want to stick to the Docker Engine on your OS (Operating System), it boils down to using some sort of Linux virtualization. On Windows, you can use the Linux subsystem, see this article to get started. But wait, let’s take a step back and first get all the options in sight here.
I see four options shown in the diagram below:
- Stick with Docker Desktop. This is not really a Docker alternative, but I just wanted to remind you that you can still use Docker Desktop, as mentioned at the beginning.
- Spin up a Linux virtual machine.
- Move away from Docker entirely and use another container management tool like podman (see next chapter for more details).
- Probably the least attractive option would be to use a Linux-based operating system.
Let’s talk about the second option a bit more since the others do not need to be discussed much more or will be discussed in the next chapter.
To run a virtual machine on your Windows or macOS machine you have a couple of options. As briefly mentioned before, Windows introduced the Linux sub system which makes things a lot easier. You can follow this article dev.to/bowmanjd to set everything up. For both Windows and macOS you also have the option to spin up a VM using the good old virtual box, QEMU a newer tool or even vagrant. I also came across one alternative for macOS which involves two tools, nerdctl + lima. You can follow this guide for more details.
Let’s see how we can replace the Docker engine as suggested in the third option.
Replace the Docker Engine
So, we can replace Docker Desktop. It’s also possible to take it further and replace Docker entirely. This is not a problem since the OCI (Open Container Initiative) standard has been established around container formats and runtimes. As said in the beginning Docker is not the only option to run containers. Podman is another option and arguably better since it does not need a Daemon to run in the background and does not need root privileges. There is a workaround to run docker on Linux rootless but it is intended to run as root, see docker rootless on linux. Podman uses the same API definition to interact with containers and images. You can simply replace your Docker CLI calls with podman. The diagram below illustrates that podman and docker share and rely internally on the same features. To use podman on windows you can follow this guide. On macOS there is also a guide available.