Hinweis:

Verfassen von Dateien mit Podman

Einführung

Docker Compose ist ein Befehlszeilentool, das eine speziell formatierte YAML-Datei als Eingabe verwendet, um einzelne oder mehrere Container als Anwendungen zu assemblieren und dann auszuführen. Dies ermöglicht es Entwicklern, eine einzelne YAML-Datei für ihre Anwendung zu entwickeln, zu testen und dann ihren Benutzern zu übermitteln. Sie können nur einen Befehl verwenden, um sie zuverlässig zu starten und zu stoppen. Diese Portabilität und Zuverlässigkeit hat Docker Compose nicht nur bei Benutzern und Entwicklern sehr beliebt gemacht, sondern zunehmend auch eine Anforderung.

Ziele

In dieser Übung wird gezeigt, wie Sie sowohl podman-compose als auch docker-compose mit Podman installieren und verwenden und prüfen, ob sie mit einer einfachen docker-compose.yaml-Datei arbeiten.

Voraussetzungen

Oracle Support-Haftungsausschluss

Oracle bietet keinen technischen Support für die Abfolge der Schritte, die in den folgenden Anweisungen angegeben sind, da diese Schritte Softwareprogramme und Betriebssysteme referenzieren, die nicht von Oracle bereitgestellt werden. Dieses Tutorial enthält nur optionale Anweisungen.

Weitere Informationen zur von Oracle unterstützten Methode für die Entwicklung und Verwendung von Podman-basierten Services finden Sie unter https://docs.oracle.com/en/operating-systems/oracle-linux/podman/.

Übungsumgebung einrichten

Hinweis: Bei der Verwendung der kostenlosen Übungsumgebung finden Sie unter Oracle Linux - Grundlagen für Verbindungen und andere Verwendungsanweisungen.

  1. Öffnen Sie ein Terminal, und stellen Sie eine SSH-Verbindung zur ol-server-Instanz her, falls noch keine Verbindung besteht.

    ssh oracle@<ip_address_of_instance>
    

Podman-Arbeit bestätigen

Das Containertools-Package in Oracle Linux stellt die neuesten Versionen von Podman, Buildah, Skopeo und zugehörigen Abhängigkeiten bereit.

  1. Prüfen Sie die Podman-Version.

    podman -v
    
  2. Stellen Sie sicher, dass die Podman-CLI funktioniert.

    podman run quay.io/podman/hello
    

    Beispielausgabe:

    [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
    

Podman für die Arbeit mit Compose-Dateien einrichten

Podman hat den Support für die Docker Compose-Funktionalität in Podman v3.2.0 eingeführt, nachdem begrenzter Support in Podman v3.0.0 eingeführt wurde. So wurde die Möglichkeit eingeführt, Docker Compose aus Podman zu verwenden. In jüngerer Zeit erweiterte Podman v4.1.0 die Unterstützung der Docker Compose-Funktionalität um die Verwendung von Docker Compose v2.2 und höher.

In den folgenden Schritten wird beschrieben, wie Sie sowohl podman-compose als auch docker-compose installieren und konfigurieren.

Podman-Docker-Package installieren

So kann Podman nativ mit Docker-Befehlen arbeiten.

  1. Installieren Sie das Package podman-docker.

    sudo dnf install -y podman-docker
    

Docker Compose installieren

Hinweis:

Für das Installieren von Compose in eigenständiger Weise, wie hier beschrieben, ist die Verwendung von docker-compose anstelle der Standardsyntax erforderlich, die bei der Verwendung des Docker-Utilitys von docker compose verwendet wird. Das heißt, ersetzen Sie stattdessen die docker compose up-Syntax durch docker-compose up.

  1. Laden Sie Compose Standalone herunter, und installieren Sie es.

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

    Beispielausgabe:

    [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. Wenden Sie ausführbare Berechtigungen auf die Binärdatei an.

    sudo chmod +x /usr/local/bin/docker-compose
    
  3. Verfassen von eigenständigen Arbeiten bestätigen

    docker-compose version
    

    Beispielausgabe:

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

Podman Socket starten

Die folgenden Schritte sind erforderlich, um die Docker Compose-Funktionalität durch Erstellen eines Unix-Socket zu aktivieren.

  1. Konfigurieren Sie das Podman-Socket mit den folgenden Schritten.

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

    Beispielausgabe:

    [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. Prüfen Sie, ob das Socket wie erwartet mit curl funktioniert.

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

Beispielausgabe:

[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 ~]$

Wenn die Ausgabe dieses Befehls OK zurückgibt, wurde die Compose-Funktionalität erfolgreich für die Arbeit mit docker-compose.yaml-Dateien konfiguriert.

Podman Compose installieren

Podman Compose ist eine Python 3-Bibliothek, in der die Spezifikation verfassen zur Ausführung mit Podman implementiert wird.

  1. Prüfen Sie vor der Installation von Podman Compose, ob Pip auf die neueste Version aktualisiert wurde.

    sudo -H pip3 install --upgrade pip
    
  2. Installieren Sie das Podman Compose-Package.

    sudo pip3 install podman-compose 
    

    Wenn Sie pip3 install als sudo ausführen, können die WARNING-Nachrichten ignoriert werden.

  3. Bestätigen Sie, dass Podman Compose funktioniert.

    podman-compose version
    

    Beispielausgabe:

    [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
    

Docker Compose-Datei erstellen

Mit dieser docker-compose.yaml-Datei können Sie die angegebene Anwendung abrufen und starten.

  1. Erstellen Sie ein Verzeichnis für den Test.

    mkdir -p Documents/examples/echo
    
  2. Wechseln Sie in das Verzeichnis.

    cd Documents/examples/echo
    
  3. Erstellen Sie die Datei 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. Prüfen Sie die soeben erstellte Docker-compose.yaml.

    cat docker-compose.yaml
    

    Beispielausgabe:

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

Bestätigen, dass Podman Compose in Bearbeitung ist

  1. Wechseln Sie zu dem Verzeichnis, in dem sich die docker-compose-Datei befindet.

    Wichtig: podman-compose-Befehle funktionieren nicht, es sei denn, Sie befinden sich in dem Verzeichnis, in dem sich die Datei docker-compose.yaml befindet.

    cd ~/Documents/examples/echo/
    
  2. Starten Sie die Anwendung echoserver.

    podman-compose up -d
    

    Beispielausgabe:

    [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
    

    Hinweis: Wie bei Podman werden alle in der Datei docker-compose.yaml referenzierten Container nur abgerufen, wenn sie noch nicht im System vorhanden sind.

  3. Testen Sie, ob die Anwendung echoserver hochgefahren und gestartet ist.

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

    Beispielausgabe:

    [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. Prüfen Sie außerdem den Erfolg, indem Sie die Logs prüfen.

    podman-compose logs
    

    Beispielausgabe:

    [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. Verwenden Sie das Podman Compose-Utility, um ausgeführte Container anzuzeigen.

    podman-compose ps
    

    Beispielausgabe:

    [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
    

    Hinweis: Weitere Podman Compose-Utilitybefehle finden Sie unter podman-compose --help. Für diese Übung gelten diese zusätzlichen Befehle jedoch nicht.

  6. Jetzt ist es an der Zeit, den echoweb-Service zu stoppen.

    podman-compose down
    

Stellen Sie sicher, dass Docker Compose in Bearbeitung ist

  1. (Optional) Wechseln Sie in das Verzeichnis, in dem sich die docker-compose-Datei befindet.

    Wichtig: docker-compose-Befehle funktionieren nicht, es sei denn, Sie befinden sich in dem Verzeichnis, in dem sich die Datei docker-compose.yaml befindet.

    cd ~/Documents/examples/echo/
    
  2. Starten Sie die Anwendung echoserver.

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

    Beispielausgabe:

    [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
    

    HINWEIS:

    Wenn die folgende Ausgabe bei der Ausführung dieses Befehls zurückgegeben wird:

    ��� 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
    

    Keine Sorge, das bedeutet nur, dass der Befehl podman-compose down nicht ausgeführt wurde und der zuvor mit podman-compose gestartete echoserver-Container weiterhin ausgeführt wird. Führen Sie die vorherigen Schritte aus, um es zu stoppen.

  3. Testen Sie, ob der Container ausgeführt wird.

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

    Beispielausgabe:

    [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. Prüfen Sie die Logs mit dem Docker Compose-Utility, und bestätigen Sie, dass eine erfolgreiche Anforderung von dieser Anwendung zurückgegeben wurde.

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

    Beispielausgabe:

    [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. Mit dem Utility Docker Compose können Sie auch die von der Compose-Datei gestarteten Container prüfen.

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

    Beispielausgabe:

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

    Hinweis: Weitere Docker Compose-Utilitybefehle finden Sie unter docker-compose --help. Für diese Übung gelten diese zusätzlichen Befehle jedoch nicht.

  6. Stoppen Sie den echoweb-Service.

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

    Beispielausgabe:

    [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
    

Wichtige Informationen

Wenn die ausführbaren Dateien podman-compose und docker-compose auf demselben System installiert sind, müssen Sie beachten, dass sie nicht möglich austauschbar aufgerufen werden können. Wenn ein Prozess mit podman-docker gestartet wird, kann er nicht mit dem Utility docker-compose abgefragt oder gestoppt werden, oder umgekehrt, wie im folgenden Beispiel dargestellt:

  1. Wechseln Sie zu dem Verzeichnis, in dem sich die Verfassen-Datei befindet.

    Wichtig: Die Befehle podman-compose oder docker-compose funktionieren nicht, es sei denn, Sie befinden sich in dem Verzeichnis, in dem sich die Datei docker-compose.yaml befindet.

    cd ~/Documents/examples/echo/
    
  2. Beginnen Sie mit Podman Compose.

    podman-compose up -d
    
  3. Versuchen Sie, die ausgeführten Container mit Docker Compose aufzulisten.

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

    Beispielausgabe

    [oracle@ol-server echo]$ sudo /usr/local/bin/docker-compose ps
    NAME                IMAGE               COMMAND             SERVICE             CREATED             STATUS              PORTS
    
  4. Mit Podman Compose wird jedoch bestätigt, dass der Container ausgeführt wird.

    podman-compose ps
    

    Beispielausgabe:

    [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
    

Übersicht

Dadurch wird bestätigt, wie Sie eine Compose-Datei mit Podman mit podman-compose oder docker-compose verwenden.

Weitere Informationen

Weitere zugehörige Ressourcen anzeigen:

Weitere Lernressourcen

Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem die Website education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Produktdokumentation finden Sie im Oracle Help Center.