Disponible depuis Juin 2018 dans ses premières versions, Podman, est depuis Avril 2020 dans sa version 1.9.
Avec l'arrêt du support de Docker dans Red Hat Enterprise Linux 8 et CentOS 8, la popularité de Podman est grandissante. Un vrai pas vers l'avant pour le monde de la conteneurisation ? Est-ce que je dois remplacer mon installation Docker par Podman ?
Comme il n'est plus toujours évident de s'y retrouver dans ce florilège de technologies et de changement parfois rapides, nous allons essayer d'avoir une première approche de Podman et de son intérêt ( ou pas ) pour vous !
Tout d'abord, Podman c'est quoi ? Pourquoi un nouvel outil ? C'était vraiment nécessaire ? À quels besoins réponds t-il ?
Podman
Podman est donc un nouveau moteur de conteneur open-source qui fonctionne de manière transparente avec les conteneurs ainsi que les pods ( groupe de conteneurs déployés ensemble sur le même hôte : on retrouve ici un héritage de Kubernetes ).
Podman à une approche différente dans sa gestion des conteneurs, car il ne dépend pas en fait d'un démon. Mais lance à la place des conteneurs et des pods en tant que processus enfants. Podman est l'outil CLI ( à l'image de votre commande docker
) pour interagir avec libpod, une bibliothèque qui permet à d'autres outils de gérer des pods et des conteneurs :
https://github.com/containers/libpod
Ce nouvel outil se place très clairement en concurrent de Docker mais propose une excellente compatibilité avec l'environnement de son concurrent. Au point où il est même écrit sur le site officiel de réaliser un alias de sa commande Docker avec Podman :
$ alias docker=podman
http://docs.podman.io/en/latest/
Globalement, tout ce qui est réalisable avec Docker, peut se faire avec Podman, quelques exemples :
podman pull
= docker pull
podman images
= docker images
podman run
= docker run
Parmi ces principaux avantages mis en avant :
- Aucun daemon,
- Possibilité de lancer des conteneurs sans droit administrateur,
- Gestion des POD,
- Respect des normes OCI,
- Une API REST.
Mes premiers conteneurs
Je travaille essentiellement sous Debian alors... allons-y pour une installation sur cet OS. Mais sachez que la documentation est exhaustive sur les différents OS :
Debian
# Debian 10
echo 'deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Debian_10/ /' > /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/Debian_10/Release.key | sudo apt-key add -
sudo apt-get update -qq
sudo apt-get -qq -y install podman
Sur mon VPS, j'ai dû activer l'option suivante :
sudo sysctl kernel.unprivileged_userns_clone=1
Firstly, a kernel is required that has support for User Namespaces (a kernel withCONFIG_USER_NS
). All Arch Linux kernels have support forCONFIG_USER_NS
. However, due to more general security concerns, the default Arch kernel does ship with User Namespaces enabled only for the root user.
Une fois l'installation terminée et l'option activée :
debian@my-host:~$ podman info
host:
arch: amd64
buildahVersion: 1.14.9
cgroupVersion: v1
conmon:
package: 'conmon: /usr/libexec/podman/conmon'
path: /usr/libexec/podman/conmon
version: 'conmon version 2.0.16, commit: '
cpus: 1
distribution:
distribution: debian
version: "10"
....
Une première instance ? Allons-y :
debian@my-host:~$ podman run --rm debian /bin/echo Hello World.
Hello World.
Exactement la même commande qu'avec Docker ! Et pour lancer un simple serveur web :
debian@my-host:~$ podman run -d -p 8080:80 nginx
Et pour vérifier le bon fonctionnement :
debian@my-host:~$ curl http://127.0.0.1:8080
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
Je lance toutes ces commandes à l'aide de mon compte non-root : Debian. Ces conteneurs sont donc rootless. Je peux le constater avec la commande suivante :
debian@my-host:~$ ps aux
debian 16025 0.0 0.0 4644 2920 pts/0 S 07:47 0:00 /usr/bin/slirp4netns --disable-host-loopback --mtu 65520 --enable-sandbox
debian 16028 0.0 0.8 748268 35052 pts/0 Sl 07:47 0:00 containers-rootlessport
debian 16035 0.0 0.8 592608 34980 pts/0 Sl 07:47 0:00 containers-rootlessport-child
debian 16045 0.0 0.0 80108 2036 ? Ssl 07:47 0:00 /usr/libexec/podman/conmon --api-version 1 -c b1540d6c679bdf4b47e549884a6
debian 16056 0.0 0.1 10632 5396 ? Ss 07:47 0:00 nginx: master process nginx -g daemon off;
100100 16068 0.0 0.0 11088 2560 ? S 07:47 0:00 nginx: worker process
Si je souhaite par exemple utiliser le port 80
de ma machine hôte sans mon compte root :
debian@my-host:~$ podman run -d -p 80:80 nginx
Error: failed to expose ports via rootlessport: "listen tcp 0.0.0.0:80: bind: permission denied\n"
Je peux bien évidemment arrêter mon conteneur à l'aide de la commande :
podman stop
et ensuite le supprimer :
podman rm mycontainer
Comme vous pouvez le constater, ces commandes sont exactement les mêmes que pour gérer vos conteneurs à l'aide de Docker !
Je ne souhaite pas rentrer plus dans le détail aujourd'hui de certaines commandes, il nous reste énormément de choses à voir autour de Podman :
- Comment je créé un Pod ?
- Build une image ?
- Mes fichiers
docker-compose.yaml
?
Mais chacun de ces points méritent des explications approfondies et non un simple survol 😀
Alors finalement, au premier abord, Podman est-il intéressant ?
Podman est un outil très intéressant et qui promet de belles choses. Je reste très excité, voir même impatient, que le projet avance à grand pas afin de voir jusqu'où nous pourrons aller avec cet outil car il promet des choses intéressantes. Les quelles ?
- D'un point de vue sécurité forcément, le rootless est un atout majeur pour la sécurité des infrastructures,
- Pouvoir gérer des POD sans passer par Kubernetes,
- Podman nous rappelle une chose essentielle Containers ≠ Docker ...
- Et ainsi se rappeler ceux que sont vraiment les containers ( Oui oui on parlera de
runc
dans un prochain article ).
Alors est-ce que je dois migrer ou essayer Podman dès maintenant ?
- Si vous êtes un développeur, sous Windows ou MacOS encore plus, je dirais clairement : pas pour le moment. Podman est encore jeune et vous n'allez peut-être pas retrouver facilement tout vos outils favoris ( exemple Traefik : https://github.com/containous/traefik/issues/5730 ).
- Si vous êtes un DevOps convaincu et que vous souhaitez préparer un éventuel future, essayer le très clairement. Diverses outils arrivent, où sont déjà utilisés, et il va falloir y regarder de plus près. Docker à populariser les containers et les services du Docker Hub sont encore très utilisés, mais de nombreuses sociétés comme RedHat ( avec Buildah par exemple ) ou encore Google avec Kaniko souhaitent promouvoir d'autres outils pour travailler avec les conteneurs.
Mais attention, avec deux jours de retard, n'oublions pas le précèdent que nous offre encore très récemment CoreOS. Un super projet dont la mise à l'arrêt est un peu rapide ( pour rappel l'annonce de la fin du support était lancé en février de cette année ... ) :
De mon côté je vais forcément l'essayer, et même m'amuser avec ! Mais tout en gardant - pour l'instant - l'essentiel de mes conteneurs avec Docker.
Pour ceux qui souhaitent aller plus loin immédiatement, voici quelques liens utiles :
podman-compose
pour remplacerdocker-compose
: https://github.com/containers/podman-compose- Podman sur MacOS c'est possible : https://developers.redhat.com/blog/2020/02/12/podman-for-macos-sort-of/
- La v2 de Podman est la nouvelle API que j'attends impatiement : https://podman.io/blogs/2020/04/16/podman-v2-announce.html
- Skopeo dont je parlerais bientôt : https://github.com/containers/skopeo
- Buildah pour constuire ses images au format OCI : https://buildah.io/
En tout cas n'hésitez pas à m'apporter des remarques ou des commentaires sur Twitter ou via les commentaires ! C'est toujours un plaisir d'avoir des retours ! 😇