Aller au contenu principal

Podman Desktop 1.0

· 7 minutes de lecture
Stéphane ROBERT
Consultant DevOps

logo podman desktop

Sponsorisé par Redhat, le projet open source Podman Desktop vient de passer récemment en version stable 1.0. Podman Desktop permet de créer et d'exécuter des conteneurs localement. Sur la version Linux, il est également possible de piloter des ressources dans des clusters Kubernetes distants.

Podman Desktop s'adresse surtout aux développeurs qui débutent dans le développement d'applications Cloud Native. En effet, l’interface utilisateur leur permet de se passer d'apprendre à utiliser les outils en ligne de commande. Ils peuvent ainsi se concentrer sur leur code.

podman desktop ecran accueil

Fonctionnalités de Podman Desktop

Podman Desktop permet :

  • De créer localement des clusters avec Kind ou OpenShift Local
  • D'exécuter des conteneurs sur Podman, Docker, sur des clusters Kind ou Red Hat OpenShift Local, ou sur la Developer Sandbox de Red Hat.
  • De se connecter en SSH dans les conteneurs via le teminal.

Attention, en fonction du système d'exploitation où est installé Podman Desktop certaines fonctionnalités ne seront pas accessibles. Sur Windows 11, Podman Desktop ne permettra de piloter que des conteneurs locaux. Même si les extensions sont installées, vous ne pourrez pas créer de clusters kind, ni d'OpenShift local.

Pour rappel, podman est un outil de ligne de commande qui permet de récupérer des images et de les exécuter. Les options de cette CLI sont largement compatibles avec celle de Docker. Podman peut être exécuté par un utilisateur ne possédant pas de privilèges et ne nécessite pas de démon. Podman fonctionne aussi sur Mac (via une VM QEMU) et Windows (via WSL2).

Installation de Podman Desktop

Pour installer Podman Desktop il faut se rendre sur le site du même nom et télécharger le package correspondant à votre système d'exploitation.

Installation de Podman Desktop sur linux

Pour l'installer sur linux deux solutions :

  • un fichier flatpak
  • une archive tar.gz, qui a ma préférence.
wget https://github.com/containers/podman-desktop/releases/download/v1.1.0/podman-desktop-1.1.0.tar.gz
sudo tar xvfz podman-desktop-1.1.0.tar.gz -C /opt
sudo ln -s /opt/podman-desktop-1.1.0 /opt/podman-desktop

Ajoutez le répertoire à votre PATH. Depuis un terminal lancer la commande podman-desktop.

Vous pouvez aussi créer un lanceur pour votre Desktop.

sudo vi /usr/share/applications/podmandesktop.desktop

Copiez y ce contenu :

Name=Podman Desktop
Exec=/opt/podman-desktop/podman-desktop
Terminal=false
Type=Application
Icon=/usr/share/icons/hicolor/128x128/apps/io.podman_desktop.PodmanDesktop.png
StartupWMClass=Podman Desktop
Categories=Utility;
X-Flatpak=io.podman_desktop.PodmanDesktop

Le fichier de l'icone :

icone podman desktop

Installation de Podman Desktop sur Windows

Une fois le binaire de l'installation de Podman Desktop téléchargé, il suffit de le lancer. Cet installeur va se charger d'installer WSL2 si ce n'est pas encore fait. Vous pourrez ensuite lancer une machine podman, qui en fait une image hyper-v d'une Fedora 37. Je vous conseille de l'installer en activant le mode rootful comme dans l'image ci-dessous. POur cela allez dans le menu paramètre / Ressources.

podman rootful

Cette machine sera accessible en SSH via le terminal Windows ou depuis l'extension Remote Developpement de Vscode. On peut même envisager de s'en servir pour développer par exemple des playbooks et rôles Ansible.

Installation de kind

Une fois la machine podman créé il faut installer kind manuellement. Dans la fenêtre terminal tapez la commande suivante :

podman machine ssh

[ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x kind
install kin /usr/local/bin

Reste plus qu'à créer le cluster :

kind create cluster
kind create cluster
enabling experimental podman provider
Creating cluster "kind" ...
✓ Ensuring node image (kindest/node:v1.27.3) 🖼
✓ Preparing nodes 📦
✓ Writing configuration 📜
✓ Starting control-plane 🕹️
✓ Installing CNI 🔌
✓ Installing StorageClass 💾
Set kubectl context to "kind-kind"
You can now use your cluster with:

kubectl cluster-info --context kind-kind

Have a nice day! 👋

Prise en main de Podman Desktop

Même si l'ui est très clair, je vais documenter quelques actions.

Builder des images de Containers

Allez dans la section images et cliquez sur le bouton [build an image]

build images podman desktop

Le fonctionnement est assez simple puisqu'il suffit d'indiquer du chemin où se trouve votre Dockerfile, de sélectionner le répertoire de contexte si besoin et de définir le nom de l'image. Pour lancer le build, il suffit de cliquer sur le bouton Build qui change de couleur.

build images podman desktop

Vous devriez voir la trace de la construction de l'image. Une fois terminé. Vous retrouverez l'image dans la liste des images.

build images podman desktop

Lancer un container avec une image existante

Maintenant que nous avons une image présente, nous allons lancer un container avec.

Pour cela dans la liste des images, cliquez sur le bouton [play]. Vous verrez les logs dans l'onglet logs.

build images podman desktop

Vous remarquerez que dans lors du lancement, il est possible d'ajouter pleins de paramètres : sécurité, user, nom du container, volumes, mapping de ports. Fini de lancer les commandes avec une tripotée de paramètres.

Créer un cluster kubernetes avec Kind

C'est toujours aussi simple, enfin presque. Dans un premier temps vérifier que les ports 9090 et 9443 ne sont pas déjà utilisés. Pour cela, il suffit de lancer la commande suivante dans un terminal :

netstat -tlnp

Proto Recv-Q Send-Q Adresse locale Adresse distante Etat PID/Program name
tcp 0 0 127.0.0.1:1313 0.0.0.0:* LISTEN 89762/Code --standa
tcp 0 0 127.0.0.1:34121 0.0.0.0:* LISTEN 90251/ssh
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:5900 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:8081 0.0.0.0:* LISTEN 89762/Code --standa
tcp 0 0 0.0.0.0:41403 0.0.0.0:* LISTEN -
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:56245 0.0.0.0:* LISTEN -
tcp 0 0 192.168.121.1:53 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:46855 0.0.0.0:* LISTEN 139151/Code --stand
tcp 0 0 0.0.0.0:36233 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:50717 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:34803 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
tcp6 0 0 ::1:34121 :::* LISTEN 90251/ssh
tcp6 0 0 ::1:631 :::* LISTEN -
tcp6 0 0 :::60679 :::* LISTEN -
tcp6 0 0 :::42051 :::* LISTEN -
tcp6 0 0 :::9090 :::* LISTEN -
tcp6 0 0 :::58221 :::* LISTEN -
tcp6 0 0 :::35981 :::* LISTEN -
tcp6 0 0 :::35351 :::* LISTEN -
tcp6 0 0 :::2049 :::* LISTEN -
tcp6 0 0 :::111 :::* LISTEN -
tcp6 0 0 :::22 :::* LISTEN -

Dans mon cas le port 9090 est déjà occupé.

Il faut aussi configurer votre poste pour que kind fonctionne avec podman en mode rootless.

Ensuite pour créer votre cluster, il suffit de se rendre dans les préférences. Puis dans la partie kind cliquez sur le bouton [create new]. Changez les ports si nécessaire.

Au bout de quelques minutes votre cluster devrait être Opérationnel.

build images podman desktop

Pour déployer vos manifests sur le cluster. Il faut se rendre dans la section Pods et cliquez sur le bouton [Play Kubernetes Yaml].

Sélectionnez le contexte kubernetes Kind créer précédemment.

build images podman desktop

Plus loin

En utilisant la version Windows, on n'a pas de possibilité de créer via l'interface un cluster kubernetes avec kind. Je vais chercher un peu pour voir comment ajouter cette fonctionnalité que je trouve indispensable.

En tout cas, je trouve que Podman Desktop offre de belles fonctionnalités qui permettent d'accéder facilement à des clusters kubernetes et en particulier sur sa distribution OpenShift, surtout si on ne connait pas les commandes en ligne.

Le seul point négatif, c'est qu'à chaque fois que l'on souhaite relancer la construction d'une image ou lancer un container, on doit à nouveau rentrer tous les paramètres. Ça serait cool de retrouver les derniers paramètres utilisés.