Hinweis:

Compose Files mit Podman auf Oracle Linux verwenden

Einführung

Podman und Docker Compose sind beide Befehlszeilentools, die eine speziell formatierte YAML-Datei als Eingabe verwenden, um einzelne oder mehrere Container als Anwendungen zu assemblieren und dann auszuführen. Mit diesen Tools können Entwickler eine einzelne YAML-Datei für ihre Anwendung entwickeln, testen und dann an ihre Benutzer übermitteln und nur einen Befehl verwenden, um sie zuverlässig zu starten und zu stoppen. Diese Portabilität und Zuverlässigkeit haben die Compose-Spezifikation bei Anwendern und Entwicklern sehr beliebt gemacht, und sie wird zunehmend zur Anforderung.

Ziele

In diesem Tutorial lernen Sie:

Voraussetzungen

Oracle Linux bereitstellen

Hinweis: Wenn Sie in Ihrem eigenen Mandanten ausgeführt werden, lesen Sie das Projekt linux-virt-labs GitHub README.md, und schließen Sie die Voraussetzungen ab, bevor Sie die Übungsumgebung bereitstellen.

  1. Öffnen Sie ein Terminal auf dem Luna Desktop.

  2. Klonen Sie das Projekt linux-virt-labs GitHub.

    git clone https://github.com/oracle-devrel/linux-virt-labs.git
    
  3. Wechseln Sie in das Arbeitsverzeichnis.

    cd linux-virt-labs/ol
    
  4. Installieren Sie die erforderlichen Sammlungen.

    ansible-galaxy collection install -r requirements.yml
    
  5. Bereitstellen der Übungsumgebung.

    ansible-playbook create_instance.yml -e localhost_python_interpreter="/usr/bin/python3.6" -e update_all=true
    

    Die kostenlose Übungsumgebung erfordert die zusätzliche Variable local_python_interpreter, die ansible_python_interpreter für Wiedergaben festlegt, die auf localhost ausgeführt werden. Diese Variable ist erforderlich, da die Umgebung das RPM-Package für das Oracle Cloud Infrastructure-SDK für Python unter den python3.6-Modulen installiert.

    Die Standard-Deployment-Ausprägung verwendet AMD-CPU und Oracle Linux 8. Um eine Intel CPU oder Oracle Linux 9 zu verwenden, fügen Sie dem Deployment-Befehl -e instance_shape="VM.Standard3.Flex" oder -e os_version="9" hinzu.

    Wichtig: Warten Sie, bis das Playbook erfolgreich ausgeführt wird, und erreichen Sie die Unterbrechungsaufgabe. In dieser Phase des Playbooks ist die Installation von Oracle Linux abgeschlossen, und die Instanzen sind bereit. Notieren Sie sich die vorherige Wiedergabe, in der die öffentlichen und privaten IP-Adressen der bereitgestellten Knoten und alle anderen Deployment-Informationen gedruckt werden, die während der Ausführung der Übung erforderlich sind.

Podman für die Arbeit mit Compose Files einrichten

Podman hat die Unterstützung für die Docker Compose-Funktionalität in Podman v3.2.0 eingeführt, nachdem der eingeschränkte Support in Podman v3.0.0 eingeführt wurde. Dadurch wird die Möglichkeit eingeführt, Docker Compose aus Podman heraus 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.

Podman-Docker-Package installieren

Installieren Sie das Package podman-docker, mit dem Podman nativ mit Docker-Befehlen arbeiten kann.

sudo dnf install -y podman-docker

Docker Compose installieren

  1. Download und Installation von Compose Standalone.

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

    Beispielausgabe:

      % 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 60.1M  100 60.1M    0     0   103M      0 --:--:-- --:--:-- --:--:--  378M
    
  2. Wenden Sie ausführbare Berechtigungen auf die Binärdatei an.

    sudo chmod +x /usr/local/bin/docker-compose
    
  3. Bestätigen Sie die Erstellung eigenständiger Werke.

    docker-compose version
    

    Die Ausgabe gibt die aktuelle Version von docker-compose zurück.

    Hinweis: Für die Standalone-Installation von Compose, wie hier beschrieben, müssen Sie beispielsweise docker-compose up anstelle der standardmäßigen docker-compose up-Syntax verwenden, die beim Ausführen des Docker-Utilitys verwendet wird.

Starten Sie den Podman Socket

Podman und Docker Compose erfordern jeweils den Start des Podman-Sockels, mit dem Systemaufrufe von jedem Programm über diesen systemgesteuerten Prozess mit Podman kommunizieren können.

  1. Konfigurieren Sie den Podman-Socket.

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

    Die Ausgabe zeigt das systemd socket active (listening).

  2. Ruft den Speicherort für den Podman-Socket-Speicherort des Benutzers ab.

    podman info | grep -i remotesocket -A2
    
  3. Prüfen Sie, ob das Socket mit cURL funktioniert.

    curl -w "\n" -H "Content-Type: application/json" --unix-socket /run/user/$UID/podman/podman.sock http://localhost/_ping
    

    Der Pfad für --unix-socket entspricht dem Pfad aus podman info. Die Ausgabe dieses Befehls muss OK zurückgeben, was eine erfolgreiche Konfiguration der Compose-Funktionalität angibt, die für die Arbeit mit docker-compose.yaml-Dateien bereit ist.

Podman Compose installieren

Podman Compose ist eine Python 3-Library, in der die Compose Specification für die Ausführung mit Podman implementiert wird.

  1. Installieren und aktivieren Sie das Repository developer_EPEL.

    Oracle Linux 8:

    sudo dnf install -y oracle-epel-release-el8
    sudo dnf config-manager --enable ol8_developer_EPEL
    

    Oracle Linux 9:

    sudo dnf install -y oracle-epel-release-el9
    sudo dnf config-manager --enable ol9_developer_EPEL
    

    Oracle Linux 10:

    sudo dnf install -y oracle-epel-release-el10
    sudo dnf config-manager --enable ol10_u0_developer_EPEL
    
  2. Installieren Sie das Podman Compose-Paket.

    sudo dnf install -y podman-compose 
    
  3. Bestätigen Sie die Podman Compose-Arbeiten, indem Sie ihre Version anzeigen.

    podman-compose version
    

Erstellen einer Compose-Datei

Diese Compose-Datei ermöglicht das Abrufen und Starten der angegebenen Anwendung.

  1. Erzeugen Sie ein Verzeichnis für den Test, und wechseln Sie in dieses Verzeichnis.

    mkdir -p projects/echo
    cd projects/echo
    
  2. Erstellen Sie die Compose-Datei.

    cat >> compose.yaml << EOF
    services:
      web:
        image: k8s.gcr.io/echoserver:1.4
        ports:
          - "${HOST_PORT:-8080}:8080"
    EOF
    
    
  3. Prüfen Sie die Compose-Datei.

    cat compose.yaml
    

Podman Compose ausführen

  1. Wechseln Sie in dasselbe Verzeichnis wie die Compose-Datei.

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

    cd ~/projects/echo/
    
  2. Starten Sie die Anwendung echoserver.

    podman-compose up -d
    

    Die Ausgabe zeigt, dass Podman den Container herunterruft und mit den in der Compose-Datei aufgeführten Parametern beginnt. Mit der Option -d wird Podman angewiesen, den Container im Hintergrund im getrennten Modus auszuführen. Podman ruft nur Images ab, die in der Compose-Datei referenziert werden, wenn sie nicht lokal vorhanden sind.

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

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

    Beispielausgabe:

    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 Protokolle prüfen.

    podman-compose logs
    

    Beispielausgabe:

    ``text ['podman', '–version', ''] mit Podman-Version: 4.2.0 podman loggt 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:

    ['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
    

    Sie können andere Podman Compose-Utilitybefehle anzeigen, indem Sie podman-compose --help ausführen.

  6. Jetzt ist es an der Zeit, den Echoserver-Container zu stoppen.

    podman-compose down
    
  7. Entfernen Sie das zusätzliche Podman-Bridge-Netzwerk, das beim Container-Deployment erstellt wurde.

    podman network rm echo_default
    

Bestätigen, dass Docker Compose funktioniert

  1. Legen Sie die Umgebungsvariable für den Speicherort des Podman-Sockets fest.

    export DOCKER_HOST=unix:///run/user/$UID/podman/podman.sock
    
  2. Starten Sie die Anwendung echoserver.

    Dieser Befehl muss im selben Verzeichnis wie die Compose-Datei ausgeführt werden.

    docker-compose up -d
    

    Die Ausgabe zeigt, wie das Netzwerk echo_default und der Container echo-web-1 erstellt werden.

  3. Rufen Sie die Anwendung des Containers auf.

    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, und bestätigen Sie, dass diese Anwendung eine Rücksendeanforderung erfolgreich weitergeleitet hat.

    docker-compose logs
    

    Beispielausgabe:

    ``Text 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. Eine Liste der Container, die mit dem Docker Compose-Utility gestartet wurden.

    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
    
  6. Stoppen Sie die Anwendung echoserver.

    docker-compose down
    

Wichtige Informationen

Wenn Sie sowohl die ausführbaren Dateien podman-compose als auch docker-compose auf demselben System installieren, müssen Sie beachten, dass es nicht möglich ist, diese austauschbar aufzurufen. Was wir mit dieser Anweisung meinen, ist, dass, wenn Sie einen Prozess mit podman-compose starten, Sie ihn nicht mit docker-compose abfragen oder stoppen können oder umgekehrt.

  1. Beginnen Sie mit Podman Compose.

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

    docker-compose ps
    

    Die Ausgabe gibt eine leere Liste zurück, die zeigt, dass aus ihrer Perspektive keine Container ausgeführt werden.

  3. Durch die Verwendung von Podman Compose wird jedoch bestätigt, dass der Container ausgeführt wird.

    podman-compose ps
    

    Beispielausgabe:

    ['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
    

Nächste Schritte

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

Weitere Lernressourcen

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

Die Produktdokumentation finden Sie im Oracle Help Center.