Podman sur Ubuntu : créer et exécuter des conteneurs avec Dockerfile (Guide du débutant à la pratique)

目次

1. Introduction

L’Évolution de la Technologie des Conteneurs et Pourquoi Elle Compte

Ces dernières années, l’importance de la technologie des conteneurs a rapidement augmenté dans le développement d’applications et les opérations. En particulier, la capacité à assurer la reproductibilité en alignant les environnements de développement et de production a obtenu un fort soutien parmi les ingénieurs.

Docker a longtemps été la solution dominante dans ce domaine, mais ces dernières années, Podman est apparu comme une alternative puissante. Podman offre une CLI (Command Line Interface) presque identique à celle de Docker tout en fournissant des avantages clés tels qu’une architecture sans démon, une opération légère, et une exécution sans root sans nécessiter de privilèges root.

Pourquoi « Podman + Dockerfile + Ubuntu » ?

Cet article explique les opérations modernes de conteneurs sur Linux en combinant trois éléments essentiels : Podman, Dockerfile, et Ubuntu.

  • Ubuntu est une distribution Linux largement utilisée, adaptée aux débutants comme aux utilisateurs avancés,
  • Dockerfile sert de plan pour la construction d’images de conteneurs,
  • Et Podman est un outil de nouvelle génération qui permet une gestion plus flexible et sécurisée des conteneurs.

Avec une sensibilisation croissante à la sécurité, l’utilisation de Podman avec Dockerfile sur Ubuntu est devenue un choix populaire pour les développeurs individuels et les environnements d’entreprise.

Objectif et Public Cible

L’objectif de cet article est d’expliquer minutieusement comment construire des Dockerfiles et créer des conteneurs pratiques en utilisant Podman sur Ubuntu.

Cet article s’adresse à des lecteurs tels que :

  • Ceux qui ont une expérience avec Docker et qui s’intéressent à Podman
  • Les utilisateurs d’Ubuntu qui souhaitent gérer des conteneurs de manière sécurisée
  • Les ingénieurs qui prévoient d’adopter la technologie des conteneurs dans leur travail
  • Les débutants qui veulent essayer d’écrire des Dockerfiles et de construire des images avec Podman

En plus de l’utilisation de base, cet article couvre également des conseils de dépannage, les différences clés avec Docker, et des stratégies de migration.

2. Qu’est-ce que Podman ?

Aperçu de Base de Podman

Podman (Pod Manager) est un outil de gestion de conteneurs de nouvelle génération développé par la communauté dirigée par Red Hat. Comme Docker, il peut construire, exécuter et gérer des conteneurs conformes à l’OCI (Open Container Initiative), mais sa philosophie de conception et son architecture diffèrent significativement.

La caractéristique la plus notable est que Podman ne nécessite pas de démon. Cela permet une opération légère et sécurisée. Podman prend également en charge le mode sans root, permettant aux utilisateurs ordinaires de gérer des conteneurs sans escalade de privilèges. Sa compatibilité CLI avec Docker est très élevée, rendant la migration simple.

Fonctionnalités Clés de Podman

Voici quelques-unes des principales fonctionnalités de Podman :

Architecture Sans Démon

Podman ne repose pas sur un processus démon en arrière-plan pour gérer les conteneurs. Cela permet une utilisation plus efficace des ressources sans services en arrière-plan inutiles.

Support Sans Root (Utilisateur Non Privilégié)

Podman permet aux utilisateurs non administrateurs de démarrer et de gérer des conteneurs. Cela améliore grandement la sécurité dans les environnements multi-utilisateurs ou serveurs et réduit significativement les risques de sécurité.

CLI Compatible avec Docker

Podman utilise une structure de commandes presque identique à celle de Docker. Par exemple, les commandes Docker suivantes fonctionnent presque de manière identique dans Podman :

podman build -t myimage .
podman run -it myimage bash

En conséquence, les utilisateurs de Docker peuvent migrer avec un minimum de friction.

Fonctionnalité Pod

Podman intègre le concept de « Pod » de Kubernetes, permettant de gérer plusieurs conteneurs comme une unité logique unique. Cela rend Podman hautement compatible avec Kubernetes et permet des transitions fluides des environnements de développement locaux vers les environnements cloud.

Compatibilité avec Ubuntu

While Podman is widely adopted in Fedora and RHEL-based distributions, it also runs stably on Ubuntu. It can be installed from official repositories with relatively simple configuration. Since Ubuntu 20.04 LTS, package support has improved significantly, lowering the barrier to entry.

3. Installation de Podman sur Ubuntu

Avant de commencer : prérequis

Before installing Podman on Ubuntu, first check your Ubuntu version. Podman is officially recommended for Ubuntu 20.04 LTS or later. On older versions, required packages may not be available in the official repositories.

Vous pouvez vérifier votre version d’Ubuntu en utilisant la commande suivante :

lsb_release -a

Installing Podman requires sudo privileges. Even if you plan to use Podman in rootless mode, administrator privileges are still required during installation.

Installation de Podman depuis le dépôt officiel d’Ubuntu

On recent Ubuntu versions such as 20.04 or 22.04, Podman can be installed easily using APT.

sudo apt update
sudo apt install -y podman

After installation, verify that Podman was installed correctly by checking the version:

podman --version

Installation de la dernière version à l’aide du PPA officiel

The Podman version included in Ubuntu’s default repository is often slightly outdated. If you want to use the latest features, you can install Podman from the official PPA.

. /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 update
sudo apt install -y podman

This method allows you to use the latest Podman versions equivalent to those on Red Hat and Fedora systems.

Test de fonctionnalité de base de Podman

After installation, perform a simple test to confirm that Podman works correctly:

podman info

This command displays Podman’s configuration, version, and supported features such as rootless mode.

You can also test container execution by running an official Alpine Linux image:

podman run --rm -it alpine sh

If the shell starts successfully, Podman is functioning correctly.

4. Notions de base sur les Dockerfile et leur utilisation avec Podman

Qu’est‑ce qu’un Dockerfile ?

A Dockerfile is a blueprint used to build container images. It is a text file that defines instructions such as the base image to use, which packages to install, and which files to copy.

Based on this file, container tools like Podman and Docker can automatically build a consistent environment.

Common Dockerfile instructions include:

FROM ubuntu:22.04
RUN apt update && apt install -y curl
COPY ./app.sh /usr/local/bin/app.sh
CMD ["bash", "/usr/local/bin/app.sh"]

This example installs packages on an Ubuntu base image, copies a script, and defines the default execution command.

Utilisation d’un Dockerfile avec Podman

Podman can build container images from Dockerfiles in the same way as Docker.

1. Préparer le répertoire du projet

Create the following directory structure:

project/
├── Dockerfile
└── app.sh

The app.sh file can contain a simple script:

#!/bin/bash
echo "Hello from Podman container!"

Make the script executable:

chmod +x app.sh

2. Construire l’image avec Podman

Run the following command in the directory containing the Dockerfile:

podman build -t mypodmanapp .

This creates a container image named mypodmanapp.

3. Vérifier l’image construite

You can list available images with:

podman images

4. Exécuter le conteneur

Start a container using the built image:

podman run --rm mypodmanapp

Si configuré correctement, la sortie Hello from Podman container! sera affichée.

Dockerfile vs Containerfile

Dans Podman, les fichiers utilisant la syntaxe Dockerfile peuvent également être appelés Containerfile. Cette nomenclature reflète un désir de terminologie indépendante de Docker.

Il n’y a pas de différence fonctionnelle entre Dockerfile et Containerfile. Les deux sont entièrement pris en charge par Podman.

podman build -f Containerfile -t myimage .

Vous pouvez spécifier le nom du fichier explicitement en utilisant l’option -f.

5. Exemple pratique : Création d’un conteneur basé sur Ubuntu

Création d’un Dockerfile basé sur Ubuntu

À partir de maintenant, nous allons parcourir un exemple pratique, étape par étape, de création d’un Dockerfile basé sur Ubuntu et de construction et exécution d’une image de conteneur en utilisant Podman.

Premièrement, créez le Dockerfile simple suivant :

FROM ubuntu:22.04

RUN apt update && \
    apt install -y curl && \
    apt clean

COPY hello.sh /usr/local/bin/hello.sh
RUN chmod +x /usr/local/bin/hello.sh

CMD ["/usr/local/bin/hello.sh"]

Ce Dockerfile effectue les actions suivantes :

  • Utilise l’image officielle Ubuntu 22.04 comme base
  • Installe le paquet curl
  • Copie hello.sh de l’hôte dans le conteneur
  • Définit hello.sh comme script d’exécution par défaut

Ensuite, créez un simple script shell nommé hello.sh :

#!/bin/bash
echo "Hello, this output is from a Podman container!"

Accordez les permissions d’exécution au script :

chmod +x hello.sh

Construction de l’image avec Podman

Une fois les fichiers prêts, construisez l’image en utilisant la commande suivante :

podman build -t ubuntu-hello .

L’option -t ubuntu-hello assigne un nom de tag à l’image, et le . final spécifie le répertoire contenant le Dockerfile.

Si la construction se termine avec succès, l’image sera stockée localement.

podman images

Vous pouvez utiliser cette commande pour vérifier que l’image a été créée.

Exécution et vérification de l’image construite

Exécutez un conteneur à partir de l’image nouvellement construite en utilisant la commande suivante :

podman run --rm ubuntu-hello

Sortie d’exemple :

Hello, this output is from a Podman container!

L’option --rm supprime automatiquement le conteneur après exécution, ce qui la rend idéale pour les tests.

Optionnel : Exécution d’un conteneur interactif

Si vous souhaitez interagir directement avec le conteneur, vous pouvez le démarrer avec l’option -it et lancer Bash :

podman run -it ubuntu-hello bash

Cela vous permet d’utiliser le conteneur comme un environnement de développement léger basé sur Ubuntu.

6. Fonctionnalités et conseils utiles de Podman

Les forces de Podman : Flexibilité et sécurité

Tout en maintenant la compatibilité avec Docker, Podman offre des fonctionnalités qui permettent des opérations de conteneur plus flexibles et sécurisées. Cette section présente des fonctionnalités et des conseils pratiques particulièrement utiles dans les flux de travail quotidiens.

Opération sécurisée avec le mode rootless

L’une des fonctionnalités les plus puissantes de Podman est le mode rootless, qui permet aux utilisateurs réguliers de démarrer, arrêter et gérer des conteneurs sans privilèges d’administrateur.

Vous pouvez exécuter des conteneurs sans sudo comme indiqué ci-dessous :

podman run -it ubuntu bash

Parce que cette opération est confinée au répertoire personnel de l’utilisateur, l’impact sur l’ensemble du système est minimisé. Le mode rootless est particulièrement utile sur les serveurs partagés et dans les environnements de développement.

Démarrage automatique avec l’intégration systemd

Podman prend en charge l’intégration native avec systemd, permettant aux conteneurs de s’exécuter automatiquement en tant que services Linux.

Vous pouvez générer une unité de service systemd pour un conteneur en utilisant la commande suivante :

podman generate systemd --name mycontainer --files --restart-policy=always

Cette commande crée des fichiers d’unité sous ~/.config/systemd/user/. Après génération, activez et démarrez le service comme suit :

systemctl --user daemon-reexec
systemctl --user enable --now container-mycontainer.service

.Cette configuration garantit que les conteneurs démarrent automatiquement au démarrage du système.

Gestion de plusieurs conteneurs avec podman‑compose

En plus de la gestion de conteneurs uniques, Podman prend en charge l’orchestration multi‑conteneurs. En utilisant podman‑compose, vous pouvez obtenir une fonctionnalité similaire à Docker Compose.

Installez podman‑compose avec pip :

pip install podman-compose

Comme il est largement compatible avec les fichiers docker-compose.yml, vous pouvez souvent réutiliser des configurations existantes.

Démarrer les services est aussi simple que d’exécuter :

podman-compose up -d

Cela vous permet de reproduire instantanément des environnements de développement complets même en utilisant Podman.

Commandes utiles supplémentaires et astuces

Nettoyage des images et conteneurs inutilisés

podman system prune -a

Cette commande supprime les conteneurs, images et fichiers temporaires inutilisés, aidant à garder votre stockage propre.

Activation de l’autocomplétion (bash/zsh)

Vous pouvez installer le support de l’autocomplétion avec le paquet suivant :

sudo apt install podman-docker

Cela active une autocomplétion similaire à Docker pour Podman, améliorant la productivité.

7. Guide de migration : de Docker vers Podman

Pourquoi la migration vers Podman suscite tant d’intérêt

Docker a longtemps été synonyme de technologie de conteneurs, mais ces dernières années, un virage vers Podman comme alternative plus légère et sécurisée a gagné en popularité. En particulier, Red Hat Enterprise Linux (RHEL) et Fedora ont réduit le support de Docker et ont adopté Podman comme moteur de conteneurs par défaut, incitant de nombreuses organisations à envisager la migration.

Cette section explique les étapes pratiques et les considérations importantes pour migrer en douceur de Docker vers Podman.

Compatibilité des commandes entre Docker et Podman

Podman conserve un haut niveau de compatibilité CLI avec Docker, permettant à la plupart des commandes d’être remplacées directement sans modification.

DockerPodman
docker build -t myapp .podman build -t myapp .
docker run -it myapppodman run -it myapp
docker imagespodman images
docker pspodman ps

Cela rend possible de passer à Podman sans changer votre flux de travail, ce qui est l’un de ses plus grands avantages.

Obtenir une compatibilité totale avec podman‑docker

Si des scripts, pipelines CI/CD ou outils existants supposent la présence de la commande docker, vous pouvez installer le paquet podman-docker pour que Podman se comporte comme un remplacement direct.

sudo apt install podman-docker

Après l’installation, la commande docker devient un lien symbolique vers Podman :

which docker
# → /usr/bin/docker → symbolic link to podman

Cela permet aux scripts basés sur Docker de s’exécuter sur Podman sans modification.

Remplacer docker‑compose par podman‑compose

Pour les projets qui utilisent Docker Compose pour définir des environnements multi‑conteneurs, podman‑compose offre une alternative compatible.

Bien que la compatibilité soit généralement élevée, notez les limitations suivantes :

  • Certaines options de Compose (comme depends_on) peuvent ne pas être prises en charge ou se comporter différemment
  • Des différences peuvent exister dans la journalisation des événements et le comportement des vérifications de santé

Pour des configurations typiques telles qu’une combinaison serveur web / base de données, la migration est généralement simple.

Migration des images et des volumes

Les images Docker stockées localement ne sont pas accessibles directement par Podman. Vous devez soit les re‑télécharger, soit les exporter puis les importer.

Option 1 : Re‑télécharger les images avec Podman

podman pull ubuntu:22.04

Option 2 : Exporter depuis Docker et importer dans Podman

# Export from Docker
docker save myimage > myimage.tar

# Import into Podman
podman load < myimage.tar

Cela permet aux images créées avec Docker d’être réutilisées dans Podman.

Considérations supplémentaires pour la migration

  • Différences d’opération rootless : Docker suppose généralement une exécution en tant que root, tandis que Podman est conçu pour fonctionner sans privilèges root.
  • Architecture daemon : Podman est sans daemon, ce qui modifie la façon dont les processus en arrière‑plan sont gérés.
  • Emplacements de stockage des journaux et des données diffèrent et doivent être revus lors de la migration.

.

8. Questions fréquentes (FAQ)

Q1. Quelle est la principale différence entre Podman et Docker ?

A1. La différence la plus importante est que Podman fonctionne sans démon. Cela permet une utilisation plus légère et plus sécurisée. Podman prend également en charge le mode rootless, permettant la gestion des conteneurs sans élévation de privilèges. La compatibilité de la CLI avec Docker est très élevée.

Q2. Quelle est la différence entre Dockerfile et Containerfile ?

A2. Il n’y a aucune différence fonctionnelle. Les deux fichiers décrivent les instructions de construction d’un conteneur en utilisant une syntaxe identique.
Le nom Containerfile est préféré dans les projets conformes à l’OCI afin d’éviter la terminologie spécifique à Docker. En pratique, Dockerfile fonctionne parfaitement avec Podman.

Q3. Docker Compose peut‑il être utilisé avec Podman ?

A3. Docker Compose n’est pas pris en charge directement, mais vous pouvez utiliser podman-compose comme alternative. Il interprète les fichiers docker-compose.yml dans un environnement Podman.

Certaines options comme depends_on sont limitées, il est donc recommandé de tester les configurations complexes.

Q4. Podman fonctionne‑t‑il de manière stable sur Ubuntu ?

A4. Oui. Podman fonctionne de façon stable sur Ubuntu 20.04 LTS et versions ultérieures. Il est disponible dans les dépôts officiels d’Ubuntu et peut être installé facilement avec apt. Pour les versions plus récentes, l’utilisation d’un PPA est également une option.

Q5. Existe‑t‑il des limitations en mode rootless ?

A5. Le mode rootless restreint certaines opérations privilégiées et l’écoute sur les ports inférieurs à 1024. Cependant, ces limitations peuvent souvent être contournées grâce à la redirection de ports. Pour la plupart des cas d’usage, le mode rootless est pleinement praticable.

Q6. Podman peut‑il récupérer les mêmes images que Docker Hub ?

A6. Oui. Podman peut récupérer les images depuis Docker Hub par défaut. Dans certains environnements, il peut être nécessaire de spécifier explicitement le registre et l’espace de noms :

podman pull docker.io/library/ubuntu

Podman prend également en charge d’autres registres tels que Quay.io et GitHub Container Registry.

Q7. Podman est‑il adapté aux environnements de production ?

A7. Oui. Podman inclut les fonctionnalités requises pour une utilisation en production, telles que les concepts de pod compatibles Kubernetes et l’intégration systemd. Dans les environnements sensibles à la sécurité, Podman peut être un meilleur choix que Docker.

Podman est déjà le moteur de conteneurs par défaut dans RHEL et Fedora et bénéficie d’une adoption importante en production.

侍エンジニア塾