From Docker to Podman on MacOS

I'm looking for some alternatives for Docker. Currently, there are a few of container technologies which are Docker's most direct competitors, such as rkt, Podman, containerd, ...

I found that Podman just release the v3.3.0 that supporting for non-Linux machines, checkpoint/restore, and more. It's performing much the same role as the Docker engine. The Podman CLI is the same as Docker CLI. You can simply alias the Docker CLI, alias docker=podman.

Docker follows the client/server model, using a daemon to manage all containers under its control. However, Podman, like rkt and LXC, functions without a central daemon.

I'm not attempting to convince you to use or not to use Podman, especially ocker has recently announced that Docker Desktop will soon require a paid subscription for Team or Business. This is just a note if you want to try it on your Mac. D

Install the Podman on Mac

  1. Simple by using Homebrew:
brew install podman
  1. Initial the Machine for Podman to run from:
podman machine init
  1. Start the Machine
podman machine start
  1. (Optional) Make the alias as I mention before
alias docker=podman
  1. Some configuration to make it work as the same with Docker engine. Although Docker and Podman CLI commands are similar, but there are a few issues behind the scenes might hit.
podman machine ssh
sudo sed -i 's/short-name-mode="enforcing"/short-name-mode="permissive"/g' /etc/containers/registries.conf

The short-name-mode refers to container images that don't have a full domain name prefixed (e.g. FROM python:3, FROM ubuntu:16), which will raise an error on Podman. When using Docker, these images are first prefixed with docker.io before being pulled. With the short-name-mode=permissive config, Podman will try all unqualified-search registries in the given order.

Update the unqualified-search-registries for your trusted registries:

echo 'unqualified-search-registries = ["docker.io", "quay.io"] >> /etc/containers/registries.conf'

Rock in

Run the nginx image and try to connect to the port 8000 on the host machine:

podman run --rm -it --publish 8000:80 docker.io/library/nginx:latest
curl http://localhost:8000

You can use Podman to run rootless containers, compatible with the Docker CLI, and it is a powerful container image for running OCI containers. And I believe it has not worked perfectly out of the box, Podman still has a few bugs compared with Docker, but why don't you give it a try to experiment on it.

Anw, you might can try Podman quickly by go to this url by Katacode, which offers an interactive environment directly in your browser.

References

ProductivityData EngineeringDocker