---
layout: post
title: From docker to podman in less than 10 minutes
date: 2020-05-02
tags:
    - docker
    - podman
lang: en
## Make sure to change these
published: true
sitemap: true
---

I switched from Ubuntu to Fedora in my personal laptop a few months ago,
also about the same time I installed Red Hat Enterprise Linux 8 as guest
on Hyper-V for my job.

One of the first things I noticed was the lack of support for Docker and
going full with Kubernetes and OpenShift, which means no real need for
Docker. Currently almost all my work is run in Docker containers,
therefore I was glad to know that Podman is a direct replacement for
Docker.

The Pod Manager tool `podman` is a container engine, just like Docker,
but without the requirement of a service daemon running all the time. It
is supported by Red Hat and all the operating system relatives, such as
Fedora and CentOS.  It shares all `docker` sub-commands plus a few
others. For more information read the [podman's manual
pages](https://github.com/containers/Demos/tree/master/building/buildah_intro).

`podman` talks directly to the image registry, the container and image
storage, and with the Linux kernel through the runC container runtime
process (not a daemon). Podman stores its containers and images in
different places than Docker, each user has its own
`.local/share/containers` directory, which allows to several user to use
Podman concurrently. Podman an Docker images are compatible.  Podamn
allows to work with Kubernetes.

## How I did it?

Make sure to have the latest updates for your operating system first,
then install `podman` which is available by default in Fedora 31 and
later releases.

```bash
sudo dnf update -y
sudo dnf install podman -y
```

Remove by hand the images you don't want to migrate, old images,
dangling intermediate build images, test, you know, anything that's a
waste of storage space. And then iterate through the Docker images and
pull them into Podman.

```bash
{% raw %}
for img in $(docker images --format '{{.Repository}}:{{.Tag}}'); \
do
echo $img; podman pull docker-daemon:$img; \
done
{% endraw %}
```

Review your images with `podman`, just like you'll do with `docker`.

```bash
podman images
```

Now you're ready to get rid of Docker. Stop the daemon, uninstall the
package, delete directories that could use space and drop the `docker`
user group.

```bash
docker system prune -a --volumes
sudo systemctl stop docker
sudo systemctl disable docker
sudo dnf remove moby-engine
sudo rm -rf /var/lib/docker /var/run/docker
sudo rm -rf /etc/docker ~/.docker
sudo groupdel docker
```

If you're running CentOS or actual Red Hat Enterprise Linux, the install
steps will change a bit.


## Now what?

So far I haven't had major issues using Podman, however there are some
bumps. For example, I use `docker-compose` in several projects for
development, I know there is something called [`podman-compose`](),
which I need to review.

Some CI/CD pipelines in my projects expect the `docker` command, I
haven't make my mind to change that, as I said images are compatible,
but I'd like to use the same tools all along the pipeline, I want to
avoid doing `alias podman=docker`.

[Podman and Buildah for Docker user](https://developers.redhat.com/blog/2019/02/21/podman-and-buildah-for-docker-users/) is a good read for starters.