Qu’est-ce que Podman et en quoi diffère-t-il de Docker ? –
Podman est un moteur de conteneur compatible avec la spécification OCI Containers. Podman fait partie de RedHat Linux, mais peut également être installé sur d’autres distributions.
Comme il est conforme à l’OCI, Podman peut être utilisé en remplacement du runtime Docker plus connu. La plupart des commandes Docker peuvent être directement traduites en commandes Podman.
Voici un aperçu de la façon dont les deux runtimes s’empilent.
Sommaire
Qu’est-ce qu’un Runtime ?
Pour beaucoup de gens, un « conteneur » est toujours un « conteneur Docker ». Ce n’est pas une représentation précise de l’écosystème actuel des conteneurs. Docker produit des images de conteneur OCI, qui peuvent être utilisées avec d’autres environnements d’exécution compatibles. Kubernetes en est un exemple, tandis que Podman en est un autre.
En conséquence, Podman et Docker ont des fonctionnalités de base qui se chevauchent. Les deux produisent des images que l’autre peut utiliser pour exécuter des conteneurs. Les deux environnements d’exécution ajoutent ensuite leurs propres spécialités aux fonctionnalités de conteneurisation de base.
Comment installer Podman
Si vous utilisez RedHat Linux, Podman est dans le extras
dépôt. Utiliser subscription-manager
pour ajouter le référentiel. Vous pourrez alors utiliser yum
pour installer Podman.
su - subscription-manager repos --enable rhel-7-server-extras-beta-rpms yum -y install podman
La plupart des autres distributions Linux populaires incluent également Podman dans leurs référentiels par défaut. Vous pouvez apt install podman
, dnf install podman
ou alors pacman -S podman
pour l’installer.
Travailler avec des conteneurs et des images
La CLI de Podman est délibérément alignée sur celle de Docker. Cela signifie que vous pouvez utiliser les commandes Docker familières pour interagir avec les conteneurs Podman :
podman pull my-image:latest podman run my-image:latest --name my-container podman ps podman rm my-container
Podman devrait être immédiatement familier aux utilisateurs de Docker. Vous pourriez alias docker
à podman
et ne pas remarquer une différence dans l’utilisation quotidienne. Bien sûr, toutes les fonctionnalités ne sont pas disponibles, essayer d’utiliser les commandes Docker Swarm générera une erreur, car Podman n’a rien d’équivalent à Swarm.
En quoi Podman est-il différent ?
Bien que cela ressemble à Docker, Podman présente quelques différences distinctives. Le premier et sans doute le plus important est son architecture. Podman est sans démon— il n’y a pas de processus de longue durée pour gérer vos conteneurs.
Lorsque vous exécutez un podman
commande, vous interagissez directement avec le processus qui démarre vos conteneurs et récupère vos images. La CLI de Docker dépend d’une connexion au démon Docker. La CLI envoie des commandes au démon, et le démon agit ensuite sur elles pour créer des conteneurs.
Le modèle de Podman aide à répondre à certaines des préoccupations concernant la sécurité de Docker. L’absence de démon réduit considérablement la surface d’attaque du conteneur. Si vous avez besoin d’un accès à distance, Podman expose une API REST qui vous permet d’interagir avec tous les types de ressources pris en charge.
Pods
Podman est livré avec des fonctionnalités uniques qui manquent totalement à Docker. Dans Podman, les conteneurs peuvent former des « pods » qui fonctionnent ensemble. C’est similaire au concept Kubernetes Pod.
Pour créer un Pod, utilisez le pod create
commander:
podman pod create --name my-pod
Les conteneurs sont ajoutés aux pods en incluant le --pod
drapeau avec podman run
:
podman run --pod my-pod --name image-1 my-image:latest podman run --pod my-pod --name image-2 another-image:latest
Les conteneurs du pod peuvent être gérés globalement à l’aide de podman pod
commandes :
podman kill my-pod # Kill all containers podman restart my-pod # Restart all containers podman stop my-pod # Stop all containers
Le concept Pod est puissant, car il vous permet de gérer plusieurs conteneurs de manière globale. Vous pouvez créer des conteneurs d’applications, tels qu’un frontend, un backend et une base de données, les ajouter à un Pod et les gérer à l’unisson.
Le Docker le plus proche est avec Compose. L’utilisation de Compose nécessite que vous écriviez un docker-compose.yml
fichier et utilisez le fichier séparé docker-compose
binaire. Podman vous permet de créer des pods à l’aide d’une seule commande sans quitter le terminal.
Lorsque vous devez exporter la définition d’un pod, Podman produira un manifeste YAML compatible Kubernetes. Vous pouvez prendre le manifeste et l’appliquer directement à un cluster Kubernetes. Cela réduit l’écart entre l’exécution d’un conteneur en développement et son lancement sur l’infrastructure de production.
podman generate kube
Conteneurs sans racines
Podman prend en charge les conteneurs sans racine. Cela vous aide à verrouiller votre sécurité en empêchant les conteneurs de s’exécuter en tant que root
utilisateur. Docker prend désormais en charge le mode sans racine en tant qu’option de configuration du démon. Podman était déraciné avant Docker et met davantage l’accent sur son utilisation.
Tout d’abord, installez slirp4netns
:
yum install slirp4netns
Ensuite, configurez une quantité d’espaces de noms de réseau limités à l’utilisateur :
echo "user.max_user_namespaces=28633" > /etc/sysctl.d/userns.conf sysctl -p /etc/sysctl.d/userns.conf
Cette commande permet l’utilisation d’espaces de noms réseau sans être root
.
Vous êtes maintenant prêt à exécuter un conteneur sans racine ! Connectez-vous au serveur en tant qu’utilisateur ordinaire. Commencer un nouveau conteneur avec podman run
. Il sera créé avec l’UID de votre compte utilisateur au lieu de root
.
Outre les espaces de noms entièrement sans racine, podman
est limité à l’utilisateur actuel par défaut. Vos images et conteneurs sont stockés dans votre $HOME
dossier. Quand tu cours podman ps
ou alors podman images
, vous verrez seulement votre contenu au lieu de toutes les ressources du système.
Conclusion
Podman est un runtime de conteneur compatible OCI qui fonctionne sans démon. La CLI implémente toutes les commandes Docker principales. Vous pouvez facilement passer à Podman ou l’utiliser avec une installation Docker existante.
Contrairement à Docker, Podman offre une prise en charge de premier ordre pour la gestion de plusieurs conteneurs. Le modèle Pod facilite le travail avec une pile de services. Vous pouvez arrêter, redémarrer et supprimer tous les conteneurs associés à l’aide de commandes au niveau du pod.
Podman est également prêt à vous aider à passer aux services d’orchestration de conteneurs. La possibilité d’exporter du YAML compatible Kubernetes fait de Podman une correspondance plus étroite avec de nombreux environnements de production conteneurisés. Les développeurs et les opérateurs peuvent utiliser le même outil pour gérer leurs conteneurs, permettant plus de collaboration et de flexibilité.