Découvrir Podman

 · 4 mins read

Table of Contents

Introduccion

Instalation

Premier test Hello-World

Ajoutons un Pod

Intégration avec systemd

Passage de Podman à Kubernetes

Passage de Docker-Compose Podman-Compose


Introduction

Nous sommes très nombreux surement à avoir utilisé pendant plusieurs années Docker, notamment sur des infrastructures personnelles (notebook, homeserver, etc). Suite à découvrir dans une installation de OpenSUSE KUBIC l’existence “Podman” j’ai eu envie d’en savoir plus. Podman est une alternative à Docker avec presque les même ligne de commande. La compatibilité est telle qu’il y a des personnes qui créent un alias afin de ne pas avoir à changer vos habitudes ni même vos scripts.

alias docker=podman

L’un des intérêts de podman est qu’il n’y a plus de daemon et tous les conteneurs sont lancés par runC sans dépendre d’un processus unique. De plus, il est possible de lancer des containeurs sans les droits root sur la machine. Un autre point important est de pouvoir gérer des Pods. Cette notion est par essence très importante dans Kubernetes, mais n’est pas du tout présente dans Docker.

c’est quoi un Pod? Un pod c’est tout simplement, un groupe de containers qui vont partager des informations entre eux.

Crédits: https://developers.redhat.com/blog/2019/01/15/podman-managing-containers-pods/

alt text

Instalation

Le plus simple est de suivre la documentation officielle. Sur Ubuntu, il suffit d’ajouter le dépôt et de l’installer avec APT :

. /etc/os-release
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/Release.key | sudo apt-key add -
sudo apt-get update -qq
sudo apt-get -qq -y install podman

Premier test Hello-world

À ne pas s’inquiéter, les images et dépôts Docker sont compatibles

> podman run hello-world
Trying to pull docker.io/library/hello-world...
Getting image source signatures
Copying blob 0e03gdck26e6 done  
Copying config bf857fh1qe done  
Writing manifest to image destination
Storing signatures

Hello from Docker!
This message shows that your installation appears to be working correctly.

Lister les conteneurs

> podman ps -a
CONTAINER ID  IMAGE                                 COMMAND  CREATED             STATUS                         PORTS  NAMES
bf756fb1ae65  docker.io/library/hello-world:latest  /hello   About a minute ago  Exited (0) About a minute ago         compassionate_saha

Ajoutons un Pod

Pour l’instant tout cela ressemble plus à un équivalent de Docker et alors où sont les fameux Pod.

Pour cela nous alons contenir dans un pod les conteneurs suivants:

  • Wordpress front
  • MySQL la base de données

Tout d’abord nous allons creer le pod qui va contenir ces deux containers et en exposant le port 80 à l’extérieur. Cela permetra accèder à notre Wordpress.

podman pod create --name wordpress -p 8080:80

Le pod fut créé, vous pouvez le lister :

podman pod ls
POD ID        NAME       STATUS   CREATED         # OF CONTAINERS  INFRA ID
cd3f0446aa89  wordpress  Created  16 seconds ago  1                1e8214ce2b36

Si on exectute d’ailleur un ps comme dans Docker, Podman a crée en même temps que le pod un conteneur pour le gérer comme sur Kubernetes.

podman ps -a
CONTAINER ID  IMAGE                         COMMAND  CREATED             STATUS          PORTS                   NAMES
1e8214ce2b36  k8s.gcr.io/pause:3.2                   About a minute ago  Created         0.0.0.0:80->8080/tcp      cd3f0446aa89-infra

Ensuite nous pouvons créer les 2 conteneurs en les attachant au pod créé précédemment

  • Pour le MySQL
    podman run -d --pod wordpress -e MYSQL_DATABASE=wordpress -e MYSQL_ROOT_PASSWORD=root mysql:5.7 --default-authentication-plugin=mysql_native_password
  • Pour le Wordpress
    podman run -d --pod wordpress -e WORDPRESS_DB_HOST=127.0.0.1 -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=root -e WORDPRESS_DB_NAME=wordpress  wordpress:latest

Point important par rapport à Docker, pour interroger la base MySQL Wordpress se base sur le localhost (de la commande “WORDPRESS_DB_HOST=127.0.0.1”). Comme les deux conteneurs sont dans le même Pod vous pouvez donc communiquer directement sur cette interface. C’est à dire, vous pouvez vous lier à l’adresse localhost du pod et tous les conteneurs de ce pod pourront s’y connecter grâce au partage de l’espace réseau.

Nous pouvons maintenant utiliser votre instance Wordpress sur le port 8080 sur notre navegateur.

Intégration avec systemd

Nous avons notre pod actif et maintenant nous pouvons générer un fichiers de configuration systemd, afin de l’utiliser en tant que service.

$ podman generate systemd --new --name --files wordpress

Ajouter dans le repertoire /etc/systemd/system/ et lancer le service.

Passage de Podman à Kubernetes

Il existe une commande bien intéressante, qui permet l’export et l’import un manifest yml.

Pour exporter le manifest du pod ou SystemD, nous avons :

podman generate kube -f wordpress.yml wordpress

Pour faire l’inverse et importer à partir de fichier généré par Podman ou un fichier de Kubernetes.

podman play kube wordpress.yml

Une fois fini, il est possible de stopper le pod et le supprimer

podman pod stop wordpress
podman pod rm wordpress

Passage de Docker-Compose Podman-Compose

Il est possible aussi avec un script d’exécuter docker-compose.yml en utilisant podman.

sudo curl -o /usr/local/bin/podman-compose https://raw.githubusercontent.com/con...
sudo chmod +x /usr/local/bin/podman-compose
podman-compose up -d

Thank you for the initial photo.

Photo by congy yuan on Unsplash