podman : Rendre compatible les commandes docker
Table des matières
Dans cet article, nous allons voir comment faire pour rendre podman, le gestionnaire de conteneurs propulsé par Red Hat compatible avec les commandes Docker.
Ainsi, vous pourrez utiliser podman avec les commandes docker habituelles, et les couches de compatibilité ne perdront pas les utilisateurs habituels de docker.
On va installer (si ce n'est pas déjà fait) l'outil podman, et le paquet podman-docker :
Le paquet podman-docker installe un script nommé docker qui va émuler la ligne de commande docker pour exécuter les commandes podman.
Quand on va invoquer une commande docker :
la conversion se fera, et on aura une info de la conversion de la commande :
Si on veut supprimer le message d''information, il suffit de créer un fichier vide comme mentionné :
Si on utilise docker compose, on pourra installer podman-compose (EPEL Requis) :
Dans le cas de docker-compose, voici un exemple simple pour un serveur httpd :
On peut lancer notre docker compose comme d'hab :
Le conteneur se lance :
Et on peut vérifier avec un :
Le conteneur est bien lancé avec les paramétrages demandés :
Pour gérer le démarrage automatique des conteneurs, je vous renvoie à l'article Quadlet : Exécution de conteneurs podman sous systemd
Introduction
Dans cet article, nous allons voir comment faire pour rendre podman, le gestionnaire de conteneurs propulsé par Red Hat compatible avec les commandes Docker.
Ainsi, vous pourrez utiliser podman avec les commandes docker habituelles, et les couches de compatibilité ne perdront pas les utilisateurs habituels de docker.
Installation
On va installer (si ce n'est pas déjà fait) l'outil podman, et le paquet podman-docker :
Code BASH :
dnf install podman podman-docker
Le paquet podman-docker installe un script nommé docker qui va émuler la ligne de commande docker pour exécuter les commandes podman.
Utilisation
Quand on va invoquer une commande docker :
Code BASH :
docker run hello-world
la conversion se fera, et on aura une info de la conversion de la commande :
Code :
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
Resolved "hello-world" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull quay.io/podman/hello:latest...
Getting image source signatures
Copying blob 81df7ff16254 done |
Copying config 5dd467fce5 done |
Writing manifest to image destination
!... Hello Podman World ...!
.--"--.
/ - - \
/ (O) (O) \
~~~| -=(,Y,)=- |
.---. /` \ |~~
~/ o o \~~~~.----. ~~
| =(X)= |~ / (O (O) \
~~~~~~~ ~| =(Y_)=- |
~~~~ ~~~| U |~~
Si on veut supprimer le message d''information, il suffit de créer un fichier vide comme mentionné :
Code BASH :
touch /etc/containers/nodocker
Compatibilité avec docker-compose
Si on utilise docker compose, on pourra installer podman-compose (EPEL Requis) :
Code BASH :
dnf install podman-compose
Dans le cas de docker-compose, voici un exemple simple pour un serveur httpd :
Code TEXT :
version: '3.9' services: apache: image: httpd:latest container_name: httpdlinuxtricks ports: - '8080:80' volumes: - ./website:/var/www/html
On peut lancer notre docker compose comme d'hab :
Code BASH :
docker compose up -d
Le conteneur se lance :
Code :
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
>>>> Executing external compose provider "/bin/podman-compose". Please refer to the documentation for details. <<<<
podman-compose version: 1.0.6
['podman', '--version', '']
using podman version: 4.9.4-rhel
** excluding: set()
['podman', 'ps', '--filter', 'label=io.podman.compose.project=test', '-a', '--format', '{{ index .Labels "io.podman.compose.config-hash"}}']
recreating: ...
** excluding: set()
podman stop -t 10 httpdlinuxtricks
Error: no container with name or ID "httpdlinuxtricks" found: no such container
exit code: 125
podman rm httpdlinuxtricks
Error: no container with ID or name "httpdlinuxtricks" found: no such container
exit code: 1
recreating: done
['podman', 'network', 'exists', 'test_default']
podman run --name=httpdlinuxtricks -d --label io.podman.compose.config-hash=fc3b51b424c698fa018058d9560aa591615fef7f550cc5d115a97ab8e71421f6 --label io.podman.compose.project=test --label io.podman.compose.version=1.0.6 --label [email protected] --label com.docker.compose.project=test --label com.docker.compose.project.working_dir=/root/test --label com.docker.compose.project.config_files=docker-compose.yml --label com.docker.compose.container-number=1 --label com.docker.compose.service=apache -v /root/test/website:/var/www/html --net test_default --network-alias apache -p 8080:80 httpd:latest
583cdcc9c739ea9b5bcf6547c8aca867f8694e465e736b74649dd1fceab31fc9
exit code: 0
Et on peut vérifier avec un :
Code BASH :
docker ps
Le conteneur est bien lancé avec les paramétrages demandés :
Code :
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
583cdcc9c739 docker.io/library/httpd:latest httpd-foreground 3 seconds ago Up 4 seconds 0.0.0.0:8080->80/tcp httpdlinuxtricks
Démarrage auto
Pour gérer le démarrage automatique des conteneurs, je vous renvoie à l'article Quadlet : Exécution de conteneurs podman sous systemd