Hinweis:

Podman-Container mit Oracle Linux Automation Engine konfigurieren

Einführung

In diesem Tutorial erfahren Sie, wie Sie ein Playbook zur Installation von Podman erstellen und einen Oracle Linux-Container mit dem Konfigurationsverwaltungstool Oracle Linux Automation Engine ausführen.

Bevor Sie fortfahren: Wenn Sie mit der Ausführung von Playbooks nicht vertraut sind, lesen Sie unser Einführungstutorial Playbook mit Oracle Linux Automation Engine schreiben.

Wenn Playbooks ausgeführt werden, führt Oracle Linux Automation Engine die Aufgaben auf Rechnern aus, die der Anweisung hosts im Playbook entsprechen. Diese Hosts werden in der Regel in einer inventory-Datei definiert und können entweder remote oder lokal sein. In diesem Tutorial wird gezeigt, wie Sie ein Playbook lokal ausführen.

Ziele

In dieser Übung lernen Sie Folgendes:

Voraussetzungen

Ablagen

Hinweis: Bei der Verwendung der kostenlosen Übungsumgebung finden Sie unter Oracle Linux Lab Basics für Verbindungen und weitere Verwendungsanweisungen.

Sammlungen sind ein Distributionsformat für Oracle Linux Automation Engine-Inhalte, die Playbooks, Rollen, Module und Plug-ins enthalten können. In diesem Tutorial wird die containers.podman-Sammlung mit einer requirements.yml-Datei installiert. Mit einer requirements.yml-Datei können Sie Collections und/oder Rollen basierend auf den in der Datei definierten Schlüsseln installieren.

Anforderungsdatei erstellen

  1. Wenn noch nicht geschehen, öffnen Sie ein Terminal und verbinden Sie es über SSH mit dem Ol-Server-System.

    ssh oracle@<ip_address_of_ol-server>
    
  2. Erstellen Sie ein Arbeitsverzeichnis.

    mkdir -p ~/podman-project
    
  3. Wechseln Sie in das Arbeitsverzeichnis.

    cd ~/podman-project
    
  4. Erstellen Sie die Datei requirements.yml mit Ihrem gewünschten Editor. Hier verwenden wir vi.

    vi requirements.yml
    
  5. Geben Sie den Einfügemodus vi ein, indem Sie i eingeben.

  6. Fügen Sie den Schlüssel und den Namen aller im Playbook verwendeten Sammlungen hinzu.

    Beispiel:

    ---
    collections:
      - name: containers.podman
    
  7. Nachdem Sie die Bearbeitung der Datei requirements.yml abgeschlossen haben, speichern und schließen Sie die Datei. Wenn Sie vi verwenden, können Sie dies tun, indem Sie ESC, :wq! und ENTER eingeben.

Collections mit der Anforderungsdatei installieren

  1. Rufen Sie die Sammlungen ab, und installieren Sie sie lokal.

    ansible-galaxy collection install -r requirements.yml
    

    Nachdem der Befehl erfolgreich ausgeführt wurde, ähneln die Ergebnisse den angezeigten Ergebnissen.

    Beispielausgabe:

    [oracle@ol-server podman-project]$ ansible-galaxy collection install -r requirements.yml 
    Starting galaxy collection install process
    Process install dependency map
    Starting collection install process
    Downloading https://galaxy.ansible.com/download/containers-podman-1.10.1.tar.gz to /home/oracle/.ansible/tmp/ansible-local-519108lfh458k/tmpikc963ue/containers-podman-1.10.1-aqgw3x1r
    Installing 'containers.podman:1.10.1' to '/home/oracle/.ansible/collections/ansible_collections/containers/podman'
    containers.podman:1.10.1 was installed successfully
    

Playbook erstellen

Oracle Linux Automation Engine Playbooks bestehen aus Spielen aus Aufgaben, die Hosts zugeordnet sind. Diese Aufgaben führen hauptsächlich idempotente Module aus. Die Idempotenz erreicht das gleiche Ergebnis, unabhängig davon, ob das Playbook einmal oder mehrmals ausgeführt wird. Dieses Tutorial zeigt die Idempotenz, indem das Playbook in Phasen erstellt und zwischen den einzelnen Änderungen ausgeführt wird.

Podman installieren

Bevor Sie einen Podman-Container ausführen, müssen Sie die Podman-Packages installieren. Die Packages werden mit dem Modul container-tools:ol8 aus dem Oracle Linux-Repository ol8_appstream installiert.

Von einem Terminal auf dem Ol-Server-System:

  1. Wechseln Sie in die oberste Ebene des Arbeitsverzeichnisses, wenn dieses Verzeichnis noch nicht vorhanden ist.

    cd ~/podman-project
    
  2. Erstellen Sie die Playbook-Datei.

    vi podman-playbook.yml
    
  3. Geben Sie den Einfügemodus vi ein, indem Sie i eingeben.

  4. Fügen Sie der Playbook-Datei Folgendes hinzu.

    Beispiel:

    ---
    - hosts: localhost
      connection: local
      collections:
        - containers.podman
      tasks:
    
      - name: install podman
        ansible.builtin.dnf:
          name: '@container-tools:ol8'
          state: present
        become: yes
    

    Ein Playbook und die Namen der Aufgaben zielen darauf ab, das Playbook selbst zu dokumentieren. Die nachfolgenden Informationen erläutern einige Punkte weiter.

    • hosts: localhost: Weist die Aufgaben an, die für den localhost ausgeführt werden sollen.
    • connection: local: Stellt sicher, dass der Link lokal bleibt und nicht über SSH ausgeführt wird.
    • collections: Bietet eine Liste aller im Play verwendeten Sammlungen.
    • become: yes: Hebt die Aufgabe in diesem Playbook-Abschnitt auf, die standardmäßig mit der Berechtigung sudo ausgeführt werden soll.


  5. Speichern und schließen Sie die Datei. Wenn Sie vi verwenden, können Sie dies tun, indem Sie ESC, :wq! und ENTER eingeben.

  6. Playbook ausführen

    ansible-playbook podman-playbook.yml
    

    Der Befehl sollte mit ähnlichen Ergebnissen wie die angezeigten erfolgreich ausgeführt werden.

    Beispielausgabe:

    [WARNING]: provided hosts list is empty, only localhost is available. Note that
    the implicit localhost does not match 'all'
    
    PLAY [localhost] ***************************************************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [localhost]
    
    TASK [install podman] **********************************************************
    changed: [localhost]
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    
  7. Prüfen, ob das Podman-Package installiert ist

    podman --version
    

    Beispielausgabe:

    [oracle@ol-server podman-project]$ podman --version
    podman version 4.2.0
    

Image abrufen

Nachdem Podman installiert wurde, können wir Images von unserer gewünschten Registry abrufen und lokal bereitstellen. In diesem Schritt wird das Oracle Linux-Image aus der Container-Registry GitHub abgerufen.

Weitere Informationen zu Oracle Linux Developer-Images finden Sie hier.

  1. Bearbeiten Sie die Playbook-Datei.

    vi podman-playbook.yml
    
  2. Geben Sie den Einfügemodus vi ein, indem Sie i eingeben.

  3. Fügen Sie die folgende Aufgabe am Ende der Playbook-Datei hinzu.

    Stellen Sie sicher, dass Sie für Lesbarkeit eine leere Zeile zwischen den Aufgaben beibehalten, und befolgen Sie die YAML-Syntaxregeln und die Ausrichtung.

    Beispiel:

    - name: pull oraclelinux:8 from GitHub
      podman_image:
        name: ghcr.io/oracle/oraclelinux:8
    
  4. Speichern und schließen Sie die Datei. Wenn Sie vi verwenden, können Sie dies tun, indem Sie ESC, :wq! und ENTER eingeben.

  5. Playbook ausführen

    ansible-playbook podman-playbook.yml
    

    Der Befehl sollte mit ähnlichen Ergebnissen wie die angezeigten erfolgreich ausgeführt werden.

    Beispielausgabe:

    [WARNING]: provided hosts list is empty, only localhost is available. Note that
    the implicit localhost does not match 'all'
    
    PLAY [localhost] ***************************************************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [localhost]
    
    TASK [install podman] **********************************************************
    ok: [localhost]
    
    TASK [pull oraclelinux:8 from GitHub] ******************************************
    changed: [localhost]
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    
  6. Prüfen Sie, ob Podman das Image abgerufen hat.

    podman images
    

    Beispielausgabe:

    [oracle@ol-server podman-project]$ podman images
    REPOSITORY                  TAG         IMAGE ID      CREATED       SIZE
    ghcr.io/oracle/oraclelinux  8           97e22ab49eea  20 hours ago  254 MB
    

Container-Image ausführen

Anstatt nur ein Bild zu ziehen, können wir auch einen Container basierend auf einem Bild in einem Schritt abrufen und ausführen. In diesem Schritt wird das Oracle Linux NGINX-Entwicklerimage abgerufen und ausgeführt.

  1. Bearbeiten Sie die Playbook-Datei.

    vi podman-playbook.yml
    
  2. Geben Sie den Einfügemodus vi ein, indem Sie i eingeben.

  3. Fügen Sie die folgende Aufgabe am Ende der Playbook-Datei hinzu.

    Stellen Sie sicher, dass Sie für Lesbarkeit eine leere Zeile zwischen den Aufgaben beibehalten, und befolgen Sie die YAML-Syntaxregeln und die Ausrichtung.

    Beispiel:

    - name: run image
      containers.podman.podman_container:
        name: my-ol8
        image: ghcr.io/oracle/oraclelinux8-nginx:1.18
        state: started
        detach: yes
        expose:
          - '80'
          - '443'
        publish:
          - '8080:80'
    

    Die nachfolgenden Informationen erläutern einige Punkte weiter.

    • name: Name des Containers.
    • image: Repository-Pfad (oder Imagename) und Tag zum Erstellen des Containers.
    • state: Prüft, ob ein ausgeführter Container mit dem Namen und der Konfiguration übereinstimmt. Podman erstellt und startet einen neuen Container, wenn keine Übereinstimmung gefunden wird.
    • detach: Führt den Container im getrennten Modus aus.
    • expose: Geben Sie einen Port oder einen Portbereich an.
    • publish: Veröffentlichen Sie den Port oder Portbereich eines Containers auf dem Host.


  4. Speichern und schließen Sie die Datei. Wenn Sie vi verwenden, können Sie dies tun, indem Sie ESC, :wq! und ENTER eingeben.

  5. Playbook ausführen

    ansible-playbook podman-playbook.yml
    

    Der Befehl sollte mit ähnlichen Ergebnissen wie die angezeigten erfolgreich ausgeführt werden.

    Beispielausgabe:

    [WARNING]: provided hosts list is empty, only localhost is available. Note that
    the implicit localhost does not match 'all'
    
    PLAY [localhost] ***************************************************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [localhost]
    
    TASK [install podman] **********************************************************
    ok: [localhost]
    
    TASK [pull oraclelinux:8 from GitHub] ******************************************
    ok: [localhost]
    
    TASK [run image] ***************************************************************
    changed: [localhost]
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    
  6. Prüfen Sie, ob der Container ausgeführt wird.

    podman ps
    

    Beispielausgabe:

    [oracle@ol-server podman-project]$ podman ps
    CONTAINER ID  IMAGE                                   COMMAND               CREATED         STATUS             PORTS                 NAMES
    5f7a28cc4c6b  ghcr.io/oracle/oraclelinux8-nginx:1.18  nginx -g daemon o...  18 minutes ago  Up 18 minutes ago  0.0.0.0:8080->80/tcp  my-ol8
    

    Die Ausgabe zeigt, dass der Container 18 Minuten lang hochgefahren und gestartet wurde.

  7. Stoppen Sie den Container.

    Führen Sie mit CONTAINER NAMES aus der obigen Ausgabe Folgendes aus:

    podman stop <CONTAINER NAMES>
    

    Beispielausgabe:

    [oracle@ol-server podman-project]$ podman stop my-ol8
    my-ol8
    [oracle@ol-server podman-project]$ podman ps
    CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
    

Container-Image mit einem Volume ausführen

Podman erstellt Volumes, indem ein Bind-Mount einem lokalen Verzeichnis innerhalb des Containers zugeordnet wird. Wir demonstrieren dieses Feature, indem wir denselben NGINX-Container ausführen und eine benutzerdefinierte index.html-Seite für den NGINX-Standard ersetzen.

  1. Bearbeiten Sie die Playbook-Datei.

    vi podman-playbook.yml
    
  2. Geben Sie den Einfügemodus vi ein, indem Sie i eingeben.

  3. Erstellen Sie das lokale Verzeichnis.

    Wir können diesen Schritt effizient und manuell über die Befehlszeile ausführen, ihn aber automatisieren. Durch die Automatisierung dieses Schrittes wird sichergestellt, dass das Verzeichnis bei jeder Ausführung des Playbooks vorhanden ist.

    Fügen Sie vor der Aufgabe run image diese Aufgaben hinzu, die ein Verzeichnis und die index.html-Datei erstellen.

    Stellen Sie sicher, dass Sie für Lesbarkeit eine leere Zeile zwischen den Aufgaben beibehalten, und befolgen Sie die YAML-Syntaxregeln und die Ausrichtung.

    Beispiel:

      - name: ensure dest directory exists
        ansible.builtin.file:
          path: "/home/oracle/nginx/"
          state: directory
    
      - name: create empty file
        ansible.builtin.file:
          path: "/home/oracle/nginx/index.html"
          state: touch
          mode: '0755'
    
      - name: create index.html
        ansible.builtin.copy:
          dest: "/home/oracle/nginx/index.html"
          content: |
            Hello! Welcome to Oracle Linux Containers.
    
  4. Fügen Sie dann die folgende Option am Ende der Aufgabe run image hinzu.

    Beispiel:

    volume: "/home/oracle/nginx:/usr/share/nginx/html:Z"
    

    Mit der Option volume wird ein Bind-Mount zwischen dem Verzeichnis source:destination erstellt. Die Option :Z behandelt alle Probleme mit SELinux-Berechtigungen im Zusammenhang mit dem Bind-Mount. Podman schreibt den Inhalt des Volumes so um, dass er mit dem Label im Container übereinstimmt.

    Hier ist eine abgeschlossene Version des Playbooks zur Referenz.

  5. Speichern und schließen Sie die Datei. Wenn Sie vi verwenden, können Sie dies tun, indem Sie ESC, :wq! und ENTER eingeben.

  6. Playbook ausführen

    ansible-playbook podman-playbook.yml
    

    Der Befehl sollte mit ähnlichen Ergebnissen wie die angezeigten erfolgreich ausgeführt werden.

    Beispielausgabe:

    [WARNING]: provided hosts list is empty, only localhost is available. Note that
    the implicit localhost does not match 'all'
    
    PLAY [localhost] ***************************************************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [localhost]
    
    TASK [install podman] **********************************************************
    ok: [localhost]
    
    TASK [pull oraclelinux:8 from GitHub] ******************************************
    ok: [localhost]
    
    TASK [ensure dest directory exists] ********************************************
    changed: [localhost]
    
    TASK [create empty file] *******************************************************
    changed: [localhost]
    
    TASK [create index.html] *******************************************************
    changed: [localhost]
    
    TASK [run image] ***************************************************************
    changed: [localhost]
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=7    changed=4    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    
  7. Prüfen Sie, ob der Container ausgeführt wird.

    podman ps
    

    Beispielausgabe:

    CONTAINER ID  IMAGE                                   COMMAND               CREATED         STATUS             PORTS                 NAMES
    f74aa726d470  ghcr.io/oracle/oraclelinux8-nginx:1.18  nginx -g daemon o...  10 minutes ago  Up 10 minutes ago  0.0.0.0:8080->80/tcp  my-ol8
    
  8. Prüfen Sie, ob die index.html-Datei vorhanden ist.

    ls -l /home/oracle/nginx
    

    Beispielausgabe:

    [oracle@ol-server podman-project]$ ls -l /home/oracle/nginx/
    total 4
    -rwxr-xr-x. 1 oracle oracle 41 Nov  5 16:46 index.html
    
  9. Prüfen Sie das Bind-Mount.

    Verwenden Sie curl, um die index.html-Seite aus dem Container anzuzeigen.

    curl localhost:8080
    

    Dabei ist 8080 die lokale Portzuordnung zu Port 80 im Container.

    Beispielausgabe:

    [oracle@ol-server podman-project]$ curl localhost:8080
    Hello! Welcome to Oracle Linux Containers.
    

Übersicht

Die Ausgabe von curl zeigt eine erfolgreiche Verbindung zum NGINX-Webserver, der im Podman-Container ausgeführt wird, den wir lokal mit Oracle Linux Automation Engine bereitstellen.

Weitere Informationen

Oracle Linux Automation Manager - Dokumentation
Oracle Linux Automation Manager-Schulung
Oracle Linux-Schulungsstation

Weitere Lernressourcen

Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere Inhalte für kostenloses Lernen im Oracle Learning YouTube-Kanal zu. Außerdem besuchen Sie education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Produktdokumentation finden Sie im Oracle Help Center.