Docker Desktop Alternatives (Mac Focused)

Since Docker announced it was [changing its subscriptions](https://www.docker.com/blog/updating-product-subscriptions/) and that **Docker Desktop** terms would also be affected, there have been numerous articles suggesting alternatives to it.

I'm quite late, but I decided to take a look into what people are suggesting as alternatives. So, my idea is to list those options here along with some short explanations.

# Docker Desktop

Docker Desktop is basically a product targeting Mac and Windows. It contains the **Docker CLI** and the **Docker Engine**, and both were not affected by the changes and can still be used freely. But, that product packages the related tools nicely to work without effort on the user's end, as Docker requires features from a Linux Kernel (to run Linux containers) and Docker Desktop does the job of running it on a virtual machine behind the scenes for the tool to work.

Well, if it's a requirement for the job, I think it's a great product worth the price of the licensing, but it's always good to have alternatives for those of us who need them for one reason or another. So, I was curious to see what other options are there and I'm glad I did because I was not aware of some of them.

I did my research focusing more on the Mac side of things. So, there may be options that are not meant to work on Windows, but I also came across solutions that only works on Windows. Since it has **WSL2,** Docker Engine can be installed there independently from Docker Desktop, according to some articles.

Just a disclaimer that I've never used these options for actual work. Also, I didn't even test some of these options and the little test that I did was certainly not enough to find their limitations.

# minikube

[https://minikube.sigs.k8s.io/docs/](https://minikube.sigs.k8s.io/docs/)

I must confess I had never thought of **minikube** as an alternative to Docker Desktop. When searching for alternatives, I came across the article [An Overview of Docker Desktop Alternatives](https://matt-rickard.com/docker-desktop-alternatives/) where the author says:

> it is the only tool that is a drop-in replacement for Docker Desktop.
> 

I also confess I didn't understand it immediately at first, but the idea was quite simple. minikube includes the Docker daemon so, if we install the Docker CLI on the Mac host, we can send instructions to that Engine.

## Testing minikube

- Install Homebrew: [https://brew.sh/](https://brew.sh/)
- Install Docker: `brew install docker`
- Install minikube: [https://minikube.sigs.k8s.io/docs/start/](https://minikube.sigs.k8s.io/docs/start/)
- Install Hyperkit: [https://minikube.sigs.k8s.io/docs/drivers/hyperkit/](https://minikube.sigs.k8s.io/docs/drivers/hyperkit/)
- Start minikube:

```bash
$ minikube start --driver hyperkit
```

- Point the Docker CLI to use the Docker daemon inside minikube. (`minikube-docker-env` includes the engine endpoint and other configurations).

```bash
$ eval $(minikube docker-env)
```

- And that's it. We can now run Docker commands against the engine in minikube:

```bash
$ docker container ls

# a bunch of minikube related containers will be listed

$ docker run hello-world
```

Since we are dealing with the actual Docker itself, there are no concerns regarding compatibility and we can work the way we are used to. Since its main goal is to allow us to use Kubernetes locally, I think we can say minikube covers most of the important functionality of Docker Desktop by itself.

Now, the concern with minikube is that, as an official Kubernetes project, it may deprecate Docker as a container runtime the same way Kubernetes did in late 2020.

## Resource on minikube

- [Free Docker Desktop Alternative For Mac And Windows](https://www.youtube.com/watch?v=LGNEG-t96eE)

# Lima

[https://github.com/lima-vm/lima](https://github.com/lima-vm/lima)

Many articles mention **Lima** as an alternative. Lima launches Linux virtual machines and it was created to promote **containerd** and [**nerdctl**](https://github.com/containerd/nerdctl) (**contaiNERD ctl**) to Mac users. Considering its goal and that it has those tools built-in, the most obvious usage scenario is to simply use nerdctl as a Docker CLI alternative to run commands against containerd.

Another option or, actually, the option that is mentioned the most is to use Lima combined with Docker. The idea is simple: install the Docker Engine in the VM created by Lima, install Docker CLI on the Mac itself and do the setup necessary to make them communicate. In this case, we can certainly use other tool instead of Lima (like VirtualBox, Vagrant or Multipass), but more work will probably be necessary. 

As with minikube, this alternative also has the benefit of using Docker components themselves so, once it is setup, there are no changes in the way we work. Because we create an environment similar to what is delivered by Docker Desktop by ourselves, we don't need to have the concern we have with minikube of Docker support being dropped.

These solutions combined with some way to run Kubernetes locally should cover most of the important functionality provided by Docker Desktop.

## Resources on Lima

- [containerd & Lima: Open source alternative to Docker for Mac](https://medium.com/nttlabs/containerd-and-lima-39e0b64d2a59)
- [Docker Desktop for Macの実用的な代替手段: lima + Docker](https://qiita.com/yoichiwo7/items/44aff38674134ad87da3)
- [Docker Desktop 無しで Docker を使う with lima on Mac](https://korosuke613.hatenablog.com/entry/2021/09/18/docker-on-lima)

# Podman

[https://podman.io/](https://podman.io/)

**Podman** is a Docker alternative described as "a daemonless, open source, Linux native tool designed to make it easy to find, run build, share and deploy applications using Open Containers Initiative (OCI) Containers and Container Images".

For me, the most interesting sentence was:

> Most users can simply alias Docker to Podman (`alias docker=podman`) without any problems.
> 

So, Podman has a similar scope to Docker, but reaches its goals in a different way, without an underlying daemon. Another different is, as the name implies, that Podman can create pods.

Podman can manage images the same way as Docker does, but there's a complementary project called [**Buildah**](https://buildah.io/) that is specialized in this task. The Podman's GitHub page has a [section](https://github.com/containers/podman#buildah-and-podman-relationship) that explains this relationship.

Also, Podman doesn't support docker-compose by itself, but they provide a separate [**podman-compose**](https://github.com/containers/podman-compose) project for that purpose. And, finally, Kubernetes support will require using a separate solution.

It seems that Podman can be a good alternative to Docker Desktop if you don't need some of the features it lacks. But, the experience will not be as seamless since you will need separate solutions to cover the necessary features. Also, it's not as tried and tested as Docker and, as mentioned by the author in the article below, it will present some challenges to the user. Hopefully, the project will mature fast in terms of both stability and features.

## Resource on Podman

- [Migrating from Docker to Podman](https://marcusnoble.co.uk/2021-09-01-migrating-from-docker-to-podman/?utm_source=thenewstack&utm_medium=website&utm_campaign=platform)

# Rancher Desktop

[https://rancherdesktop.io/](https://rancherdesktop.io/)

**Rancher** is a very well known Kubernetes platform to manage clusters. And they've launched **Rancher Desktop** not a long ago to provide local Kubernetes and container management in a nice package with a GUI. The idea was not to replace Docker Desktop, but the current feature set can probably provide a good alternative.

I've just installed the most recent version's `.dmg` file and here what it looks like. You can see it allows, among other things, to select the Kubernetes version we want to use, something that is not possible with Docker Desktop.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/509832/b24a0aac-e7ab-5778-be71-1001f35fdeff.png)

The way it's structured is also interesting. For Kubernetes functionality, it uses **k3s**, their certified Kubernetes distribution on top of a VM managed by Lima. For container management, the containerd and nerdctl combination mentioned previously is used. And I was able to run `nerdctl` commands to pull an image as well as build and run a simple image without problems.

I want to test it more but, from what I could see, Rancher Desktop seems to be an interesting alternative to Docker Desktop in the sense that it provides a very convenient package that works transparently for the user. It's still in beta and one of the videos in the resources mention missing features and bugs, so we may need some caution in adopting it, but development seems to be fast and I have an image of polish when thinking about Rancher offerings.

## Resources on Rancher Desktop

- [This Week in Programming: Rancher’s Docker Desktop Replacement](https://thenewstack.io/this-week-in-programming-ranchers-docker-desktop-replacement/)
- [Should We Replace Docker Desktop With Rancher Desktop?](https://www.youtube.com/watch?v=bYVfCp9dRTE)
- [How To Replace Docker With nerdctl And Rancher Desktop](https://www.youtube.com/watch?v=evWPib0iNgY)

# Others

Some sources also mention Kubernetes centric solutions such as **kind**, **k3d** (**k3s**), **microk8s**. But, their scope is quite different and limited compared to Docker Desktop. They are not meant, for example, to manage container images, and some of them requires Docker.

I've also seen sources mentioning Docker Machine to quickly spin up new servers that are ready to go with Docker, but that tool is discontinued. 

Other than that, I've found solutions on Windows with WSL2. As I've said before, this is not the focus of this article, but I came across articles about installing Docker on WSL2 or using Podman in it.

# Conclusion

I hope this can be useful as an overview of the available alternatives to Docker Desktop. As we could see, replicating all its functionality will frequently require a combination of different existing solutions and/or some manual tweaking. So, replicating how solid and convenient is Docker Desktop may still take some time and paying for it seems to be the option for those who depends on and can afford it.

Finally, I believe feature parity is not something these alternatives are aiming to. But, that can be a good thing. As we tend to continue migrating to a more Kubernetes centric environments even on our local machines, I believe the value Docker Desktop offers (in its current form, at least) tend to decrease over time. Thinking that way, alternatives such as Rancher Desktop seem to have a big potential.

# Resources

## Docker

Here are some resources by Docker itself, emphasizing the value of their product:

- [The Magic Behind the Scenes of Docker Desktop](https://www.docker.com/blog/the-magic-behind-the-scenes-of-docker-desktop/)
- [Looking for a Docker Alternative? Consider This.](https://www.docker.com/blog/looking-for-a-docker-alternative-consider-this/)
- [Docker Desktop Alternative](https://www.docker.com/products/docker-desktop/alternatives)

## Others

These are other general articles on alternatives to Docker Desktop:

- [M1 Pro + Docker for Macが遅い](https://qiita.com/naomichi-y/items/1e676139e3f9fbc75d3c)
- [Docker Desktopに依存しない、WindowsでのDocker環境](https://qiita.com/ohtsuka1317/items/617a865b8a9d4fb67989)
- [Docker Desktop Alternatives for macOS](https://www.mediaglasses.blog/2021/09/05/docker-desktop-alternatives-for-macos/)
- [Free Docker Desktop Alternative For Mac And Windows](https://devopstales.github.io/home/docker-desktop-alternatives/)