Last week, thousands of developers woke up to an email informing them Docker Desktop would require an upgrade to a paid plan instead of the very agreeable price of free – cue panic, confusion, worry, and fear.
I feel your pain; our team has been scrambling to find an alternative for Docker. So, here are some options I’ve uncovered that you and your team might be able to use to get through these trying times.
First things first, note Docker Desktop is still free for:
If you and your team fall under these conditions, then you have nothing to worry about; continue to use Docker Desktop without worry (please note, I spend my time writing anonymous functions and not legal briefs, so don’t take my statement as legal advice).
If you happen to fall outside of these parameters, then allow yourself a moment to panic. Are you doing a headcount of how many devs use Docker? I bet if you squint, you can actually see the money fly out of the window, yes? Now let’s look at a few of the alternatives. Before we go through the options, it’s important to clarify that these alternatives will never give you 100% parity with Docker Desktop in terms of performance or feature-set. If you have no wiggle room in either of these criteria, then go ahead and upgrade - Docker Desktop is a great tool.
This project bills itself as a drop-in replacement for Docker. On their website, they have 100% parity with the Docker API so you can just “alias docker=podman” and keep on developing. Podman runs a daemonless OCI container engine, meaning that each container is its own process. In Docker, the “dockerd” program is the daemon that manages the runtime and the containers. Podman also runs rootless, which means containers can be started from the root user or a non-privileged user. This architecture gives a certain flexibility that could be a benefit if you choose to leverage it.
Installation is easy on MacOS. Just run “brew install podman”. If you want to install on Windows, you can either use WSL2 or a precompiled binary. Start the podman VM by running “podman machine init” and “podman machine start”. After that, you can start creating your containers. Installation may take a bit longer because as a part of the podman startup, you will download the VM image.
You run the nginx container like this: “podman run -d -p 8080:80 nginx”. The “nginx” image can run from docker.io, quay.io, or your own private container registry service. Podman doesn’t have support for “docker-compose.yml” files out-of-the-box; you need to install podman-compose via pip to use those files.
Rancher desktop application is based around Kubernetes and is definitely optimized for Kubernetes development. Under the hood, it exposes the command “nerdctl” which we talk about later on. Nerdctl has the same API as Docker (i.e., ps, build).
You build with “docker-compose.yml” files by running “nerdctl compose”. One of the pluses of Rancher Desktop is you get a very easy installation process across all platforms with a precompiled binary. It is quite a bit of overhead – a UI and K8 images – just to get access to a command in the terminal. Why not just download “nerdctl” itself?
This project provides a Docker-compatible API with containerd and some cutting-edge functionality like pushing images to an IPFS node and lazy-pulling images. Besides having a very funny and cool name, “nerdctl” is cross platform and provides easy installation for Windows and MacOS. If you are on a Mac, install “nerdctl” via the Lima VM project, a Linux VM that comes with “nerdctl” pre-installed. If you are using Windows, then download the precompiled binary.
Remember when I said there would be tradeoffs when using a Docker alternative? At least on MacOS, you will wait a long time to bring up containers. I waited around 256 seconds to bring up this “docker-compose.yml” file.
I also had some compose builds take up to five minutes, which is something that didn’t happen with Docker Desktop. There are also a good number of Docker commands that don’t have an equivalent in “nerdctl”. If you plan on using this option, it's a good idea to check if the workflow commands you use are supported.
There are a few additional projects I want to mention as they operate using container technology. The first is Github Codespaces, a new feature in beta for individual users. Accounts under the Github Enterprise Cloud and Github Team already have access enabled.
Github Codespaces is unique in that the Docker container is running on Azure. This allows developers either a web editor or VS Code to connect remotely. The downside is that pricing is per minute, and you must have a constant internet connection.
The other honorable mention is StackBlitz, a web-based web editor for making containers that run Javascript applications. Interestingly, StackBlitz is championing WebContainers, a technology that allows developers to start NodeJS servers within the browser. The downside is, this technology only works with Javascript-based projects (NodeJS, NextJS, etc). I include it here because WebContainers could easily be extended to support other languages via WASM, like Ruby. I’ll also add in Buildah, a tool for building OCI images. I won’t say much about this tool because it’s designed for building images; you still need another service, like Podman, to actually create the containers.
In the short term, I think the most prudent choice is to upgrade now as you evaluate your situation. You may discover a suitable alternative platform or that Docker Desktop meets your needs. Either way, you are now one step closer to making the right choice for your company.