Remarque :

Utilisation de composites de fichiers avec Podman

Introduction

Docker Compose est un outil de ligne de commande qui utilise un fichier YAML spécialement formaté en entrée pour assembler et exécuter des conteneurs uniques ou multiples en tant qu'applications. Les développeurs peuvent ainsi développer, tester et livrer à leurs utilisateurs un seul fichier YAML pour leur application, et utiliser une seule commande pour le démarrer et l'arrêter de manière fiable. Cette portabilité et cette fiabilité ont rendu Docker Compose non seulement très populaire auprès des utilisateurs et des développeurs, mais également de plus en plus nécessaire.

Objectifs

Cet atelier explique comment installer et utiliser podman-compose et docker-compose avec Podman, et comment vérifier qu'ils fonctionnent avec un fichier docker-compose.yaml simple.

Prérequis

Avis de non-responsabilité du support Oracle

Oracle ne fournit pas de support technique pour la séquence d'étapes fournies dans les instructions suivantes car ces étapes font référence aux programmes logiciels et aux systèmes d'exploitation qui ne sont pas fournis par Oracle. Ce tutoriel fournit des instructions facultatives uniquement pour plus de commodité.

Pour plus d'informations sur la méthode prise en charge par Oracle pour le développement et l'utilisation des services basés sur Podman, reportez-vous à https://docs.oracle.com/en/operating-systems/oracle-linux/podman/.

Configurer l'environnement des exercices

Remarque : lorsque vous utilisez l'environnement d'atelier gratuit, reportez-vous à Notions de base d'Oracle Linux Lab pour obtenir des instructions de connexion et d'utilisation.

  1. Ouvrez un terminal et connectez-vous via ssh à l'instance ol-server si elle n'est pas déjà connectée.

    ssh oracle@<ip_address_of_instance>
    

Confirmer le fonctionnement de Podman

Le package container-tools d'Oracle Linux fournit les dernières versions de Podman, Buildah, Skopeo et les dépendances associées.

  1. Vérifiez la version de Podman.

    podman -v
    
  2. Vérifiez que la CLI Podman fonctionne.

    podman run quay.io/podman/hello
    

    Exemple de sortie :

    [oracle@ol-server ~]$ podman run quay.io/podman/hello
    Trying to pull quay.io/podman/hello:latest...
    Getting image source signatures
    Copying blob f82b04e85914 done  
    Copying config dbd85e09a1 done  
    Writing manifest to image destination
    Storing signatures
    !... Hello Podman World ...!
    
             .--"--.           
           / -     - \         
          / (O)   (O) \        
       ~~~| -=(,Y,)=- |         
        .---. /`  \   |~~      
     ~/  o  o \~~~~.----. ~~   
      | =(X)= |~  / (O (O) \   
       ~~~~~~~  ~| =(Y_)=-  |   
      ~~~~    ~~~|   U      |~~ 
    
    Project:   https://github.com/containers/podman
    Website:   https://podman.io
    Documents: https://docs.podman.io
    Twitter:   @Podman_io
    

Configurer Podman pour utiliser des fichiers composites

Podman a introduit la prise en charge de la fonctionnalité Docker Compose dans Podman v3.2.0, après une prise en charge limitée dans Podman v3.0.0, ce qui introduit la possibilité d'utiliser Docker Compose à partir de Podman. Plus récemment, Podman v4.1.0 a étendu la prise en charge de la fonctionnalité Docker Compose pour inclure l'utilisation de Docker Compose v2.2 et versions ultérieures.

Les étapes suivantes décrivent l'installation et la configuration de podman-compose et docker-compose.

Installation du package Docker Podman

Cela permet à Podman de fonctionner de manière native avec les commandes Docker.

  1. Installez le package podman-docker.

    sudo dnf install -y podman-docker
    

Installation de Docker Compose

Remarque :

La installation de Compose de manière autonome, comme décrit ici, nécessite d'utiliser docker-compose au lieu de la syntaxe standard utilisée lors de l'utilisation de l'utilitaire Docker de docker compose. En d'autres termes, remplacez la syntaxe docker compose up par docker-compose up.

  1. Téléchargez et installez Compose Standalone.

    sudo curl -SL https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
    

    Exemple de sortie :

    [oracle@ol-server ~]$ sudo curl -SL https://github.com/docker/compose/releases/download/v2.15.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
    100 42.8M  100 42.8M    0     0   158M      0 --:--:-- --:--:-- --:--:--  158M
    
    
  2. Appliquez les autorisations exécutables au fichier binaire.

    sudo chmod +x /usr/local/bin/docker-compose
    
  3. Confirmer la rédaction autonome.

    docker-compose version
    

    Exemple de sortie :

    [oracle@ol-server ~]$ docker-compose version
    Docker Compose version v2.15.1
    
    

Démarrer le socket Podman

Les étapes suivantes sont requises pour que la fonctionnalité Docker Compose fonctionne en créant un socket Unix.

  1. Configurez le socket Podman en suivant ces étapes.

    sudo systemctl enable --now podman.socket
    sudo systemctl status podman.socket
    

    Exemple de sortie :

    [oracle@ol-server ~]$ sudo systemctl enable --now podman.socket
    Created symlink /etc/systemd/system/sockets.target.wants/podman.socket -> /usr/lib/systemd/system/podman.socket.
    [oracle@ol-server ~]$ sudo systemctl status podman.socket
    * podman.socket - Podman API Socket
       Loaded: loaded (/usr/lib/systemd/system/podman.socket; enabled; vendor preset)
       Active: active (listening) since Thu 2023-01-19 20:58:20 GMT; 16s ago
         Docs: man:podman-system-service(1)
       Listen: /run/podman/podman.sock (Stream)
       CGroup: /system.slice/podman.socket
    
    Jan 19 20:58:20 ol-server systemd[1]: Listening on Podman API Socket.
    
  2. Vérifiez que le socket fonctionne comme prévu à l'aide de curl.

sudo curl -w "\n" -H "Content-Type: application/json" --unix-socket /var/run/docker.sock http://localhost/_ping

Exemple de sortie :

[oracle@ol-server ~]$ sudo curl -w "\n" -H "Content-Type: application/json" --unix-socket /var/run/docker.sock http://localhost/_ping
OK
[oracle@ol-server ~]$

Si la sortie de cette commande renvoie OK, la fonctionnalité Compose est configurée pour fonctionner avec les fichiers docker-compose.yaml.

Installation de Podman Compose

Podman Compose est une bibliothèque Python 3 qui implémente la spécification de composant à exécuter avec Podman.

  1. Avant d'installer Podman Compose, vérifiez que pip est mis à jour vers la dernière version.

    sudo -H pip3 install --upgrade pip
    
  2. Installez le package Podman Compose.

    sudo pip3 install podman-compose 
    

    Lorsque vous exécutez pip3 install en tant que sudo, les messages WARNING peuvent être ignorés.

  3. Confirmez le fonctionnement de Podman Compose.

    podman-compose version
    

    Exemple de sortie :

    [oracle@ol-server ~]$ podman-compose version
    ['podman', '--version', '']
    using podman version: 4.2.0
    podman-composer version  1.0.3
    podman --version 
    podman version 4.2.0
    exit code: 0
    

Création d'un fichier de composition Docker

Ce fichier docker-compose.yaml permet d'extraire et de démarrer l'application désignée.

  1. Créez un répertoire pour le test.

    mkdir -p Documents/examples/echo
    
  2. Changez de répertoire pour passer à celui susmentionné.

    cd Documents/examples/echo
    
  3. Créez le fichier docker-compose.yaml.

    cat >> docker-compose.yaml << EOF
    ---
    version: '3' 
    services: 
      web: 
        image: k8s.gcr.io/echoserver:1.4
        ports:
            - "${HOST_PORT:-8080}:8080" 
    EOF
    
  4. Vérifiez le docker-compose.yaml qui vient d'être créé.

    cat docker-compose.yaml
    

    Exemple de sortie :

    [oracle@ol-server echo]$ cat docker-compose.yaml 
    ---
    version: '3' 
    services: 
      web: 
        image: k8s.gcr.io/echoserver:1.4
        ports:
            - "8080:8080"
    

Confirmer le fonctionnement du composeur Podman

  1. Passez dans le répertoire dans lequel se trouve le fichier docker-compose.

    Important : les commandes podman-compose ne fonctionneront pas sauf si vous êtes dans le répertoire où se trouve le fichier docker-compose.yaml.

    cd ~/Documents/examples/echo/
    
  2. Démarrez l'application echoserver.

    podman-compose up -d
    

    Exemple de sortie :

    [oracle@ol-server echo]$ podman-compose up -d
    ['podman', '--version', '']
    using podman version: 4.2.0
    ** excluding:  set()
    ['podman', 'network', 'exists', 'echo_default']
    ['podman', 'network', 'create', '--label', 'io.podman.compose.project=echo', '--label', 'com.docker.compose.project=echo', 'echo_default']
    ['podman', 'network', 'exists', 'echo_default']
    podman create --name=echo_web_1 --label io.podman.compose.config-hash=123 --label io.podman.compose.project=echo --label io.podman.compose.version=0.0.1 --label com.docker.compose.project=echo --label com.docker.compose.project.working_dir=/home/oracle/examples/echo --label com.docker.compose.project.config_files=docker-compose.yaml --label com.docker.compose.container-number=1 --label com.docker.compose.service=web --net echo_default --network-alias web -p 8080:8080 k8s.gcr.io/echoserver:1.4
    Trying to pull k8s.gcr.io/echoserver:1.4...
    Getting image source signatures
    Copying blob d3c51dabc842 done  
    Copying blob a3ed95caeb02 done  
    Copying blob 6d9e6e7d968b done  
    Copying blob 412c0feed608 done  
    Copying blob cd23f57692f8 done  
    Copying blob dcd34d50d5ee done  
    Copying blob a3ed95caeb02 skipped: already exists  
    Copying blob a3ed95caeb02 skipped: already exists  
    Copying blob a3ed95caeb02 skipped: already exists  
    Copying blob b4241160ce0e done  
    Copying blob 7abee76f69c0 done  
    Writing manifest to image destination
    Storing signatures
    1b54b75ca13786d33df6708da1d83ecce14b055e78b03007c3c4e1f441e7139c
    exit code: 0
    

    Remarque : comme pour Podman, tous les conteneurs référencés dans le fichier docker-compose.yaml sont extraits uniquement s'ils ne sont pas déjà présents sur le système.

  3. Testez l'application echoserver en fonctionnement.

    curl -X POST -d "foobar" http://localhost:8080/; echo
    

    Exemple de sortie :

    [oracle@ol-server echo]$ curl -X POST -d "foobar" http://localhost:8080/; echo
    CLIENT VALUES:
    client_address=10.89.0.2
    command=POST
    real path=/
    query=nil
    request_version=1.1
    request_uri=http://localhost:8080/
    
    SERVER VALUES:
    server_version=nginx: 1.10.0 - lua: 10001
    
    HEADERS RECEIVED:
    accept=*/*
    content-length=6
    content-type=application/x-www-form-urlencoded
    host=localhost:8080
    user-agent=curl/7.61.1
    BODY:
    foobar
    
  4. Vérifiez également la réussite en consultant les journaux.

    podman-compose logs
    

    Exemple de sortie :

    [oracle@ol-server echo]$ podman-compose logs
    ['podman', '--version', '']
    using podman version: 4.2.0
    podman logs echo_web_1
    10.89.0.2 - - [17/Jan/2023:12:46:47 +0000] "POST / HTTP/1.1" 200 446 "-" "curl/7.61.1"
    exit code: 0
    
    
  5. Utilisez l'utilitaire Podman Compose pour voir les conteneurs en cours d'exécution.

    podman-compose ps
    

    Exemple de sortie :

    [oracle@ol-server echo]$ podman-compose ps   
    ['podman', '--version', '']
    using podman version: 4.2.0
    podman ps -a --filter label=io.podman.compose.project=echo
    CONTAINER ID  IMAGE                      COMMAND               CREATED        STATUS            PORTS                   NAMES
    f4053947c8c1  k8s.gcr.io/echoserver:1.4  nginx -g daemon o...  2 minutes ago  Up 2 minutes ago  0.0.0.0:8080->8080/tcp  echo_web_1
    exit code: 0
    

    Remarque : reportez-vous aux autres commandes de l'utilitaire Podman Compose en exécutant podman-compose --help. Toutefois, ces commandes supplémentaires sont hors de portée de cet atelier.

  6. Il est maintenant temps d'arrêter le service echoweb.

    podman-compose down
    

Confirmer le fonctionnement du composite Docker

  1. (Facultatif) Accédez au répertoire dans lequel se trouve le fichier docker-compose.

    Important : les commandes docker-compose ne fonctionneront pas sauf si vous êtes dans le répertoire où se trouve le fichier docker-compose.yaml.

    cd ~/Documents/examples/echo/
    
  2. Démarrez l'application echoserver.

    sudo /usr/local/bin/docker-compose up -d
    

    Exemple de sortie :

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose up -d
    [+] Running 0/0
    [+] Running 0/1echo-web-1  Starting                                                                                               0.0
    [+] Running 0/1echo-web-1  Starting                                                                                               0.1
    [+] Running 0/1echo-web-1  Starting                                                                                               0.2
    [+] Running 0/1echo-web-1  Starting                                                                                               0.3
    [+] Running 0/1echo-web-1  Starting                                                                                               0.4
    [+] Running 0/1echo-web-1  Starting                                                                                               0.5
    [+] Running 0/1echo-web-1  Starting                                                                                               0.6
    [+] Running 0/1echo-web-1  Starting                                                                                               0.7
    [+] Running 1/1echo-web-1  Starting                                                                                               0.8
     ��� Container echo-web-1  Started                                                                                                0.8s
    

    REMARQUE :

    Si la sortie suivante est renvoyée lors de l'exécution de cette commande :

    ��� Container echo-web-1  Starting                                                                                               0.9s
    Error response from daemon: cannot listen on the TCP port: listen tcp4 :8080: bind: address already in use
    

    Ne vous inquiétez pas, cela signifie uniquement que la commande podman-compose down n'a pas été exécutée et que le conteneur echoserver précédemment démarré à l'aide de podman-compose est toujours en cours d'exécution. Suivez les étapes précédentes pour l'arrêter.

  3. Testez l'exécution du conteneur.

    curl -X POST -d "foobar" http://localhost:8080/; echo
    

    Exemple de sortie :

    [oracle@ol-server ~]$ curl -X POST -d "foobar" http://localhost:8080/; echo
    CLIENT VALUES:
    client_address=10.89.0.2
    command=POST
    real path=/
    query=nil
    request_version=1.1
    request_uri=http://localhost:8080/
    
    SERVER VALUES:
    server_version=nginx: 1.10.0 - lua: 10001
    
    HEADERS RECEIVED:
    accept=*/*
    content-length=6
    content-type=application/x-www-form-urlencoded
    host=localhost:8080
    user-agent=curl/7.61.1
    BODY:
    foobar
    
  4. Comme précédemment, utilisez l'utilitaire Docker Compose pour inspecter les journaux et vérifier qu'une demande réussie a été renvoyée par cette application.

    sudo /usr/local/bin/docker-compose logs
    

    Exemple de sortie :

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose logs 
    echo-web-1  | 10.89.0.1 - - [17/Jan/2023:14:48:56 +0000] "POST / HTTP/1.1" 200 446 "-" "curl/7.61.1"
    
    
  5. L'utilitaire Docker Compose permet également de vérifier les conteneurs démarrés par le fichier Compose.

    sudo /usr/local/bin/docker-compose ps
    

    Exemple de sortie :

    echo-web-1        k8s.gcr.io/echoserver:1.4   "nginx -g daemon off;"   web             12 minutes ago      Up 12 minutes       8080/tcp
    

    Remarque : reportez-vous aux autres commandes de l'utilitaire Docker Compose en exécutant docker-compose --help. Toutefois, ces commandes supplémentaires sont hors de portée de cet atelier.

  6. Arrêtez le service echoweb.

    sudo /usr/local/bin/docker-compose down
    

    Exemple de sortie :

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose down
    [+] Running 0/0
    [+] Running 0/1echo-web-1  Stopping                                                                                                   0.1
    [+] Running 0/1echo-web-1  Stopping                                                                                                   0.2
    [+] Running 0/1echo-web-1  Stopping                                                                                                   0.3
    [+] Running 2/1echo-web-1  Removing                                                                                                   0.4
     ��� Container echo-web-1  Removed                                                                                                    0.4s
     ��� Network echo_default  Removed                                                                                                    0.0s
    

Informations importantes

Si les exécutables podman-compose et docker-compose ont été installés sur le même système, il est important de noter qu'il n'est pas possible de les appeler de manière interchangeable. Cela signifie que si un processus est démarré par podman-docker, il ne peut pas être interrogé, ni arrêté à l'aide de l'utilitaire docker-compose, ou inversement, comme indiqué dans l'exemple ci-dessous :

  1. Passez dans le répertoire dans lequel se trouve le fichier Compose.

    Important : les commandes podman-compose ou docker-compose ne fonctionneront pas sauf si vous êtes dans le répertoire où se trouve le fichier docker-compose.yaml.

    cd ~/Documents/examples/echo/
    
  2. Commencez par utiliser Podman Compose.

    podman-compose up -d
    
  3. Essayez de répertorier les conteneurs en cours d'exécution à l'aide de Docker Compose.

    sudo /usr/local/bin/docker-compose ps
    

    Exemple de sortie

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose ps
    NAME                IMAGE               COMMAND             SERVICE             CREATED             STATUS              PORTS
    
  4. Cependant, l'utilisation de Podman Compose confirme que le conteneur est en cours d'exécution.

    podman-compose ps
    

    Exemple de sortie :

    [oracle@ol-server echo]$ podman-compose ps
    ['podman', '--version', '']
    using podman version: 4.2.0
    podman ps -a --filter label=io.podman.compose.project=echo
    CONTAINER ID  IMAGE                      COMMAND               CREATED        STATUS            PORTS                   NAMES
    55335e797296  k8s.gcr.io/echoserver:1.4  nginx -g daemon o...  4 minutes ago  Up 4 minutes ago  0.0.0.0:8080->8080/tcp  echo_web_1
    exit code: 0
    

Synthèse

Cela confirme l'utilisation d'un fichier Composer avec Podman à l'aide de podman-compose ou docker-compose.

Pour plus d'informations

Reportez-vous aux autres ressources connexes :

Ressources de formation supplémentaires

Explorez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenu de formation gratuit sur le canal Oracle Learning YouTube. En outre, accédez à education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.

Pour consulter la documentation produit, consultez Oracle Help Center.