Skip to main content

Migrer de Docker vers Podman

Pourquoi migrer vers Podman ?

  • Sans daemon : Podman n’a pas de daemon central, chaque conteneur est un processus indépendant
  • Rootless : possibilité d’exécuter des conteneurs sans privilèges root
  • Compatible : les commandes sont identiques à Docker
  • Pods : support natif des pods comme Kubernetes

Compatibilité des commandes

La plupart des commandes Docker fonctionnent avec Podman :

# Créer un alias pour la transition
$ alias docker=podman

Les commandes suivantes sont identiques :

  • run, start, stop, rm
  • images, pull, push, rmi
  • logs, exec, inspect
  • volume, network

Migration des conteneurs

Podman ne peut pas reprendre les conteneurs Docker existants. Il faut les recréer.

Exporter la liste des conteneurs Docker :

$ docker ps -a --format "{{.Names}} {{.Image}}" > conteneurs.txt

Recréer chaque conteneur avec Podman en utilisant les mêmes paramètres.

Migration des images

Exporter une image Docker :

$ docker save mon_image:tag > mon_image.tar

Importer dans Podman :

$ podman load < mon_image.tar

Migration des volumes

Les volumes Docker sont stockés dans /var/lib/docker/volumes/. Les volumes Podman rootless sont dans ~/.local/share/containers/storage/volumes/.

Pour migrer un volume :

# Créer le volume dans Podman
$ podman volume create mon_volume

# Copier les données
$ sudo cp -a /var/lib/docker/volumes/mon_volume/_data/* ~/.local/share/containers/storage/volumes/mon_volume/_data/

Docker Compose vers Podman Compose

Les fichiers docker-compose.yml fonctionnent généralement avec podman-compose :

$ pip3 install podman-compose
$ podman-compose up -d

Utiliser Docker Compose avec Podman

Il est aussi possible d’utiliser Docker Compose directement avec le socket Podman :

$ systemctl --user enable --now podman.socket
$ export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/podman/podman.sock
$ docker-compose up -d

Points d’attention

  • Les réseaux bridge fonctionnent différemment en mode rootless
  • Certaines options avancées peuvent ne pas être supportées
  • SELinux peut nécessiter des ajustements (:Z sur les volumes)
  • Les ports < 1024 nécessitent une configuration supplémentaire en rootless