Ravindra BagaleCourses & study guides मराठी

Chapter 47: Docker Architecture, Installation on Linux, Windows and Mac, and Docker Desktop Alternatives

47.9 Alternatives to Docker Desktop

Chala mitrano! What if your company has no budget for Docker Desktop? Do not worry. There are free options: Rancher Desktop, Podman Desktop, Colima and Docker Engine inside WSL. Today we install each and run one container.

1. Start from choosing a cab

To go from Hinjewadi to Pune station you can take Uber, Ola or Rapido. The cars are different, but you reach the same station.

Docker Desktop is one car. Other free tools also run the same containers from the same images. Your Dockerfile and docker commands keep working; only the app around the engine changes.

Big firms like Infosys, Wipro and Accenture often give developers one of these free tools to avoid the Docker Desktop licence fee. We try each one and run the same nginx test on all of them.

Your Dockerfile and imagesstay the sameRancher Desktop | Podman Desktopfree apps with a windowColima | WSL Docker Enginefree, terminal onlySame nginx container runson all of them
Picture 1: same images, different tools

2. Rancher Desktop

Step 1: Rancher Desktop

Why: You want a free app with a window, plus Kubernetes, on Windows, Mac or Linux.

What: Rancher Desktop, made by SUSE, runs a hidden Linux VM with either the Docker engine (called dockerd/moby) or containerd. It also gives a light Kubernetes called k3s.

Example 1: Install on Windows

Type this:

winget install -e --id SUSE.RancherDesktop

You will see:

Successfully installed

What it means: On Mac: brew install --cask rancher.

Example 2: Choose the Docker engine

Type this:

rdctl set --container-engine.name=moby
rdctl list-settings | grep -A1 containerEngine

You will see:

"containerEngine": {
    "name": "moby"

What it means: rdctl is Rancher Desktop's command tool. moby means the normal Docker engine, so the docker command works.

Example 3: Run the nginx test

Type this:

docker run -d --name web -p 8080:80 nginx:1.27
curl -s localhost:8080 | grep title
docker rm -f web

You will see:

<title>Welcome to nginx!</title>
web

What it means: The same command, the same result, no licence fee.

Step 2: Rancher Desktop with containerd and nerdctl

Why: Some teams want to learn the engine that Kubernetes uses, containerd.

What: With containerd chosen, you use nerdctl, a tool whose commands look almost exactly like docker commands.

Example 4: Switch engines

Type this:

rdctl set --container-engine.name=containerd

You will see:

(Rancher Desktop restarts)

What it means: Now the engine is containerd.

Example 5: Run with nerdctl

Type this:

nerdctl run -d --name web -p 8080:80 nginx:1.27
nerdctl ps

You will see:

CONTAINER ID    IMAGE                             COMMAND                   STATUS    PORTS                   NAMES
3a1b...         docker.io/library/nginx:1.27      "/docker-entrypoint.…"    Up        0.0.0.0:8080->80/tcp    web

What it means: Same flags as docker. Only the first word changed.

Example 6: Clean up

Type this:

nerdctl rm -f web

You will see:

web

What it means: Switch back to moby if your team uses docker commands.

3. Podman Desktop

Step 3: Podman Desktop

Why: Red Hat shops, like many banks, prefer Podman. It needs no background daemon.

What: Podman runs containers without a central daemon and can run them without root. Podman Desktop is its free window app. Chapter 68 covers Podman in depth.

Example 7: Install on Windows

Type this:

winget install -e --id RedHat.Podman-Desktop
podman machine init
podman machine start

You will see:

Machine init complete
Machine "podman-machine-default" started successfully

What it means: podman machine makes the small Linux VM that Podman needs on Windows or Mac.

Example 8: Run the nginx test

Type this:

podman run -d --name web -p 8080:80 docker.io/library/nginx:1.27
curl -s localhost:8080 | grep title

You will see:

<title>Welcome to nginx!</title>

What it means: Podman pulls from Docker Hub too. Give the full name with docker.io to be clear.

Example 9: Use docker as a nickname

Type this:

alias docker=podman
docker ps --format '{{.Names}}'
podman rm -f web

You will see:

web
web

What it means: An alias makes the word docker run podman. Most daily commands work the same.

4. Colima on Mac

Step 4: Colima

Why: Many Mac developers at startups like Zerodha want something light with no window at all.

What: Colima starts a small Linux VM on a Mac with the Docker engine inside. You keep using the normal docker command.

Example 10: Install

Type this:

brew install colima docker docker-compose

You will see:

==> Pouring colima--0.7.5.arm64_sonoma.bottle.tar.gz
colima was successfully installed!

What it means: We also install the docker client and compose, since Colima gives only the engine.

Example 11: Start with chosen size

Type this:

colima start --cpu 2 --memory 4 --disk 40
colima status

You will see:

INFO[0001] starting colima
INFO[0035] done
colima is running using macOS Virtualization.Framework

What it means: The VM gets 2 CPUs, 4 GB and 40 GB disk.

Example 12: Run the nginx test

Type this:

docker run -d --name web -p 8080:80 nginx:1.27
curl -s localhost:8080 | grep title
docker rm -f web

You will see:

<title>Welcome to nginx!</title>
web

What it means: Same docker commands on a free tool.

Step 5: Stop and remove Colima

Why: When the laptop needs its memory back, stop the VM.

What: colima stop pauses the VM. colima delete removes it and its images.

Example 13: Stop

Type this:

colima stop

You will see:

INFO[0002] stopping colima
INFO[0005] done

What it means: Memory is free again; images are kept.

Example 14: List VMs

Type this:

colima list

You will see:

PROFILE    STATUS     ARCH       CPUS    MEMORY    DISK
default    Stopped    aarch64    2       4GiB      40GiB

What it means: One VM, stopped.

Example 15: Delete

Type this:

colima delete -f

You will see:

INFO[0001] deleting colima
INFO[0002] done

What it means: Everything is removed.

Step 6: Kubernetes in Rancher Desktop

Why: Your team at Swiggy deploys to Kubernetes and you want to practise for free on your laptop.

What: Rancher Desktop includes k3s, a small Kubernetes. You pick the version in Preferences, then Kubernetes. kubectl comes with it.

Example 16: Turn it on

Type this:

rdctl set --kubernetes.enabled=true --kubernetes.version=1.30.4

You will see:

(Rancher Desktop restarts with Kubernetes)

What it means: Pick the same version your company runs.

Example 17: Check the node

Type this:

kubectl get nodes

You will see:

NAME                   STATUS   ROLES                  AGE   VERSION
lima-rancher-desktop   Ready    control-plane,master   1m    v1.30.4+k3s1

What it means: One node, ready, version matches.

Example 18: Use an image you just built

Type this:

docker build -t myapp:dev .
kubectl run myapp --image=myapp:dev --image-pull-policy=Never
kubectl get pod myapp

You will see:

NAME    READY   STATUS    RESTARTS   AGE
myapp   1/1     Running   0          5s

What it means: With the moby engine, Kubernetes sees your local images directly. Never tells it not to download.

Step 7: Podman Compose

Why: Your project has a compose.yaml and you moved to Podman.

What: Podman can run Compose files with podman compose, which calls a Compose tool for you.

Example 19: Write a small Compose file

Type this:

printf 'services:\n  web:\n    image: docker.io/library/nginx:1.27\n    ports: [\"8081:80\"]\n' > compose.yaml
cat compose.yaml

You will see:

services:
  web:
    image: docker.io/library/nginx:1.27
    ports: ["8081:80"]

What it means: The same file Docker Compose reads.

Example 20: Start it

Type this:

podman compose up -d
podman ps --format '{{.Names}} {{.Ports}}'

You will see:

demo_web_1 0.0.0.0:8081->80/tcp

What it means: The web service is up on port 8081.

Example 21: Stop it

Type this:

podman compose down

You will see:

demo_web_1
demo_default

What it means: Container and network removed.

Step 8: OrbStack on Mac

Why: Some Mac users at startups like Groww choose OrbStack because it starts fast and uses little battery.

What: OrbStack is a Mac app that runs the Docker engine in a light VM. Its pricing page (checked October 2026) says it is free for personal, non-commercial use, and business use needs the Pro plan at 8 US dollars per user per month.

Example 22: Install

Type this:

brew install --cask orbstack

You will see:

orbstack was successfully installed!

What it means: Open it once; it sets up the docker command for you.

Example 23: Check the context

Type this:

docker context ls --format '{{.Name}} {{.Current}}'

You will see:

default false
orbstack true

What it means: docker now talks to OrbStack.

Example 24: Run the nginx test

Type this:

docker run -d --name web -p 8080:80 nginx:1.27
curl -s localhost:8080 | grep title
docker rm -f web

You will see:

<title>Welcome to nginx!</title>
web

What it means: Same command, same result.

Step 9: Which tool is docker talking to?

Why: With two tools installed, commands may go to the wrong engine and your images seem missing.

What: The docker command talks to one engine at a time, chosen by the current context. docker context use switches it.

Example 25: List contexts

Type this:

docker context ls --format '{{.Name}} {{.Current}}'

You will see:

default false
rancher-desktop true
colima false

What it means: Rancher Desktop is in use now.

Example 26: Switch to Colima

Type this:

docker context use colima

You will see:

colima
Current context is now "colima"

What it means: Next commands go to Colima.

Example 27: Prove it

Type this:

docker info --format '{{.Name}}'

You will see:

colima

What it means: The engine name confirms the switch. Lesson 47.14 explains contexts in depth.

Ravindra Bagale's Tip

Whichever tool you pick, the Dockerfile and image stay the same. So learn docker commands well once; changing the tool then makes no difference. That is the real skill.

5. Docker Engine inside WSL 2

WSL 2 + Ubuntulesson 47.7apt install docker-ceDocker Engine, freeUse from VS Code and Windows browsersame as Desktop for daily work
Picture 2: the free path on Windows

Step 10: Docker Engine in WSL 2

Why: On Windows, the simplest free choice is the real Docker Engine inside WSL 2.

What: It is exactly the Linux install from lesson 47.5, inside WSL. No window, but everything else works.

Example 28: Check it runs

Type this:

docker version --format '{{.Server.Version}}'

You will see:

27.3.1

What it means: Same engine as servers in production.

Example 29: Use Compose

Type this:

printf 'services:\n  web:\n    image: nginx:1.27\n    ports: ["8080:80"]\n' > compose.yaml
docker compose up -d

You will see:

[+] Running 2/2
 ✔ Network demo_default  Created
 ✔ Container demo-web-1  Started

What it means: printf writes a tiny Compose file. Chapter 53 explains Compose.

Example 30: Stop it

Type this:

docker compose down

You will see:

[+] Running 2/2
 ✔ Container demo-web-1  Removed
 ✔ Network demo_default  Removed

What it means: Everything is removed.

6. Pick one

Windows, free, no windowDocker Engine in WSL 2Want a window + KubernetesRancher DesktopRed Hat or rootless needsPodman DesktopMac, light, terminalColima
Picture 3: which tool for whom

Step 11: Compare them with one script

Why: Do not guess which is faster. Measure.

What: We run the same three checks on any tool: version, start time and image list.

Example 31: Version check

Type this:

docker version --format '{{.Server.Version}} {{.Server.Os}}'

You will see:

27.3.1 linux

What it means: Shows the engine is Linux, whichever tool you use.

Example 32: Start time

Type this:

time docker run --rm alpine true

You will see:

real    0m0.71s

What it means: Write this down for each tool and compare.

Example 33: Image list

Type this:

docker images --format '{{.Repository}}:{{.Tag}}'

You will see:

nginx:1.27
alpine:latest

What it means: Each tool keeps its own images. Moving tools means pulling again.

Step 12: Move images between tools

Why: After switching, you may want an image you built yourself, without rebuilding.

What: docker save writes an image to a file, and docker load reads it back into another engine.

Example 34: Save from the old tool

Type this:

docker save -o myapp.tar myapp:1.0
ls -lh myapp.tar

You will see:

-rw-r--r-- 1 ravi staff 142M Oct 25 10:20 myapp.tar

What it means: The whole image is one file.

Example 35: Load into the new tool

Type this:

docker load -i myapp.tar

You will see:

Loaded image: myapp:1.0

What it means: Now the new tool has it.

Example 36: Load into Podman

Type this:

podman load -i myapp.tar

You will see:

Loaded image: localhost/myapp:1.0

What it means: Podman reads the same file. Images follow a common standard (OCI).

Check yourself

Q1. Name two free alternatives with a window.

Rancher Desktop and Podman Desktop.

Q2. Which tool is a light, terminal-only choice on Mac?

Colima.

Q3. What is nerdctl?

A docker-like command for the containerd engine.

Q4. Do you need to change your Dockerfile when you switch tools?

No.

Q5. How do you move a built image to another tool?

docker save to a file, then docker load or podman load.

Friends, the train may change but the station is the same: Rancher, Podman, Colima or Docker Engine in WSL. Did you understand? Let us try it once more. If not, run the nginx test on two tools. Next: rootless mode and settings after install.

Lab: try at home

  1. Pick one free tool for your laptop and install it.
  2. Run the nginx test on port 8080 and open it in a browser.
  3. Run time docker run --rm alpine true and note the time.
  4. Save an image with docker save and load it in another tool.
  5. Write one line on which tool you would give a new joiner at your company, and why.

Recap

  • Free alternatives: Rancher Desktop, Podman Desktop, Colima, Docker Engine in WSL 2.
  • Images and Dockerfiles stay the same across tools.
  • nerdctl and podman commands look like docker commands.
  • docker save and docker load move images between tools.
  • Measure, then choose.

Ravi Sir's Cards for this lesson

मराठी cards