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,rmimages,pull,push,rmilogs,exec,inspectvolume,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 (
:Zsur les volumes) - Les ports < 1024 nécessitent une configuration supplémentaire en rootless