Hinweis:
- Dieses Tutorial ist in einer von Oracle bereitgestellten kostenlosen Übungsumgebung verfügbar.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. In der Übung ersetzen Sie diese Werte durch die Werte, die für Ihre Cloud-Umgebung spezifisch sind.
Podman-Container mit Oracle Linux Automation Engine konfigurieren
Einführung
Mit Oracle Linux Automation Engine können Benutzer ein Playbook für die Installation von Podman erstellen und anschließend Container mit der containers.podman-Collection ausführen und verwalten.
Bei der Ausführung von Playbooks 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 Bestandsdatei definiert und können entweder remote oder lokal sein. In diesem Tutorial zeigen wir Ihnen, wie Sie ein Playbook lokal ausführen.
Ziele
In diesem Tutorial lernen Sie:
- Playbooks lokal ausführen
- Sammlung zu einem Playbook hinzufügen
- Podman installieren
- oraclelinux:9-Container abrufen und ausführen
Voraussetzungen
-
Ein Oracle Linux-System mit der folgenden Konfiguration:
- ein Nicht-Root-Benutzer mit sudo-Berechtigungen
- Oracle Linux Automation Engine installieren
Oracle Linux Automation Engine 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.
-
Öffnen Sie ein Terminal auf dem Luna Desktop.
-
Klonen Sie das Projekt
linux-virt-labs
GitHub.git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
Wechseln Sie in das Arbeitsverzeichnis.
cd linux-virt-labs/olam
-
Installieren Sie die erforderlichen Sammlungen.
ansible-galaxy collection install -r requirements.yml
-
Aktualisieren Sie die Konfiguration der Oracle Linux-Instanz.
cat << EOF | tee instances.yml > /dev/null compute_instances: 1: instance_name: "ol-control-node" type: "control" olam_type: olae EOF
-
Bestandsdatei erstellen
cat << EOF | tee hosts > /dev/null localhost ansible_connection=local ansible_connection=local ansible_python_interpreter=/usr/bin/python3.6 EOF
-
Bereitstellen der Übungsumgebung.
ansible-playbook create_instance.yml -i hosts -e "@instances.yml"
Für die kostenlose Übungsumgebung ist die zusätzliche Variable
ansible_python_interpreter
für localhost erforderlich, da sie das RPM-Package für das Oracle Cloud Infrastructure-SDK für Python installiert. Der Speicherort für die Installation dieses Packages befindet sich basierend auf Ihrer Oracle Linux-Version unter den Python-Standardmodulen des Systems. Wenn Sie eine Bestandsvariable verwenden, wird verhindert, dass sich dies auf andere Hosts als localhost auswirkt.Die Standard-Deployment-Ausprägung verwendet die AMD-CPU. Sie können die Ausprägung der Instanzen ändern, indem Sie eine neue Definition der Ausprägungsvariablen in der Befehlszeile übergeben.
Beispiel:
-e instance_shape="VM.Standard3.Flex"
Ebenso verwendet die Standardversion des Oracle Linux-Images die Variable
os_version
, die in der Datei "default_vars.yml" definiert ist. Sie können diesen Wert ändern, indem Sie die Oracle Linux-Hauptversion in der Befehlszeile übergeben.Beispiel:
-e os_version="9"
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. Beachten Sie die vorherige Wiedergabe, bei der die öffentlichen und privaten IP-Adressen der bereitgestellten Knoten ausgegeben werden.
Collections
Collections sind ein Verteilungsformat für Oracle Linux Automation Engine-Inhalte, die Playbooks, Rollen, Module und Plug-ins enthalten können. In diesem Tutorial wird die Sammlung containers.podman
mit einer Datei requirements.yml
installiert. Eine requirements.yml
-Datei ermöglicht die Installation von Collections, Rollen oder beidem basierend auf den Schlüsseln, die in der Datei definiert sind.
Anforderungsdatei erstellen
-
Öffnen Sie ein neues Terminal und verbinden Sie sich über SSH mit dem ol-control-node-System.
ssh oracle@<ip_address_of_instance>
-
Erstellen Sie ein Arbeitsverzeichnis.
mkdir -p ~/podman-project
-
Erstellen Sie eine Anforderungsdatei.
cat << 'EOF' | tee ~/podman-project/requirements.yml > /dev/null --- collections: - name: containers.podman EOF
-
Installieren Sie die Sammlung.
ansible-galaxy collection install -r ~/podman-project/requirements.yml
Die Ausgabe zeigt den Prozess des Abrufs der komprimierten Archivdatei von der Galaxy-Site und der Installation in Ihrem Home-Verzeichnis unter
.ansible/collections.
Hinweis: Wenn in der Ausgabe
ERROR: Ansible requires the locale encoding to be UTF-8; Detected None.
angezeigt wird, weist dies auf eine falsche Gebietsschemaeinstellung füransible
hin. Beheben Sie das Problem, indem Sie diese beiden Umgebungsvariablen festlegen:export LC_ALL="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8"
Podman installieren
Oracle Linux Automation Engine-Playbooks bestehen aus Wiedergaben, die aus Aufgaben bestehen, die bestimmten Hosts zugeordnet sind. Bei diesen Aufgaben werden hauptsächlich idempotente Module ausgeführt. Idempotenz stellt sicher, dass Sie das gleiche Ergebnis erzielen, unabhängig davon, ob das Playbook einmal oder mehrmals ausgeführt wird. Dieses Tutorial wird Idempotenz demonstrieren, indem das Playbook in Stufen erstellt und zwischen jeder Änderung ausgeführt wird.
Bevor Sie einen Podman-Container ausführen, müssen Sie die Podman-Packages aus dem Oracle Linux-Repository AppStream installieren.
-
Erstellen Sie die Playbook-Datei.
cat << 'EOF' | tee ~/podman-project/podman-playbook.yml > /dev/null --- - hosts: localhost connection: local tasks: - name: Install podman ansible.builtin.dnf: name: '@container-tools:ol8' state: present become: yes when: - ansible_distribution == 'OracleLinux' - ansible_facts['distribution_major_version'] == '8' - name: Install podman ansible.builtin.dnf: name: 'container-tools' state: present become: yes when: - ansible_distribution == 'OracleLinux' - ansible_facts['distribution_major_version'] == '9' EOF
Ein Playbook und die Namen der Aufgaben zielen darauf ab, das Playbook selbst zu dokumentieren. Die folgenden Informationen enthalten eine weitere Erläuterung einiger wichtiger Elemente.
hosts: localhost
: Weist die Ausführung der Aufgaben für den localhost an.connection: local
: Stellt sicher, dass der Link lokal bleibt und nicht über SSH ausgeführt wird.become: yes
: Erhöht die Aufgabe in diesem Playbook-Abschnitt, sodass sie standardmäßig mit der Berechtigungsudo
ausgeführt wird.
-
Führen Sie das Playbook aus.
Da dieses Playbook auf dem lokalen Host ausgeführt wird, gibt es keinen Grund, eine Bestandsdatei explizit zu erstellen oder zu referenzieren. Wenn Sie dies jedoch für einen Remotehost ausführen möchten, müssen Sie den Eintrag
hosts:
aktualisieren, die Zeileconnection:
im Playbook entfernen und dann eine Bestandsdatei erstellen und referenzieren. Wenn Sie mit diesem Prozess nicht vertraut sind, können Sie sich auf einige unserer anderen Tutorials beziehen, die am Ende dieses Tutorials in der Oracle Linux-Schulungsstation verknüpft sind.ansible-playbook ~/podman-project/podman-playbook.yml
In der Befehlsausgabe sollte angezeigt werden, dass der Befehl erfolgreich für localhost ausgeführt wird und eine Änderung in der Aufgabe Podman installieren gemeldet wird. Dieser Status gibt an, dass die Installation des Moduls container-tools ordnungsgemäß abgeschlossen wurde.
-
Prüfen Sie das installierte Podman-Package, indem Sie dessen Version anzeigen.
podman --version
Bild abrufen
Sobald wir Podman installiert haben, können wir Bilder aus unserer Registry unserer Wahl abrufen und lokal bereitstellen. In diesem Schritt wird das Oracle Linux-Image aus der GitHub Container Registry abgerufen.
Weitere Informationen zu Oracle Linux-Entwicklerimages finden Sie hier.
-
Fügen Sie die Aufgabe hinzu, um ein Containerimage in das Playbook zu ziehen.
cat << EOF | tee -a ~/podman-project/podman-playbook.yml > /dev/null - name: Pull oraclelinux:9 from GitHub containers.podman.podman_image: name: ghcr.io/oracle/oraclelinux:9 EOF
-
Führen Sie das Playbook aus.
ansible-playbook ~/podman-project/podman-playbook.yml
-
Stellen Sie sicher, dass Podman das Image abgerufen hat.
podman images
Beispielausgabe:
REPOSITORY TAG IMAGE ID CREATED SIZE ghcr.io/oracle/oraclelinux 9 97e22ab49eea 20 hours ago 254 MB
Containerimage ausführen
Anstatt nur ein Bild zu ziehen, können wir auch einen Container basierend auf einem Bild in einem einzigen Schritt ziehen und ausführen. Lassen Sie uns das Oracle Linux NGINX-Entwicklerimage abrufen und ausführen.
-
Aktualisieren Sie die Playbook-Datei.
cat << EOF | tee -a ~/podman-project/podman-playbook.yml > /dev/null - name: Run image containers.podman.podman_container: name: nginx image: ghcr.io/oracle/oraclelinux9-nginx:1.20 state: started detach: yes expose: - '80' - '443' publish: - '8080:80' EOF
Dabei gilt:
name
: Name des Containers.image
: Repository-Pfad (oder Imagename) und Tag, mit dem der Container erstellt wird.state
: Prüft, ob ein aktiver 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 eines Containers oder einen Portbereich auf dem Host.
-
Führen Sie das Playbook aus.
ansible-playbook ~/podman-project/podman-playbook.yml
-
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/oraclelinux9-nginx:1.20 nginx -g daemon o... 2 minutes ago Up 2 minutes ago 0.0.0.0:8080->80/tcp nginx
Die Ausgabe zeigt, dass der Container 2 Minuten lang in Betrieb war.
-
Stoppen Sie den Container.
Führen Sie mit der CONTAINER ID aus der obigen Ausgabe den folgenden Befehl aus:
podman stop $(podman ps -q -f name=nginx)
Dieser Befehl verwendet die CONTAINER-ID als Referenz, um den nginx-CONTAINER zu stoppen.
Containerimage mit einem Volume ausführen
Podman erstellt Volumes, indem ein Bind Mount hinzugefügt wird, der ein lokales Verzeichnis einem Verzeichnis im Container zuordnet. Diese Funktion wird demonstriert, indem Sie denselben NGINX-Container ausführen und die Standardseite index.html durch einen benutzerdefinierten ersetzen.
-
Aktualisieren Sie die Playbook-Datei.
Erstellen Sie das lokale Verzeichnis. Während wir diesen Schritt effizient und manuell über die Befehlszeile ausführen können, lassen Sie uns ihn stattdessen automatisieren. Durch die Automatisierung dieses Schritts wird sichergestellt, dass das Verzeichnis immer vorhanden ist, wenn das Playbook ausgeführt wird. Bevor Sie das Image ausführen, fügen Sie diese Aufgaben hinzu, die ein Verzeichnis und die Datei index.html erstellen.
Stellen Sie sicher, dass Sie eine leere Zeile zwischen Aufgaben zur besseren Lesbarkeit hinterlassen und YAML-Syntaxregeln und Ausrichtungsrichtlinien befolgen. Wir verwenden
sed
, um diese Aufgabe abzuschließen, da es das einfache Einfügen von Textblöcken in eine Datei in einer bestimmten Zeile ermöglicht.sed -i -e '24 r '<(cat -<< EOF - name: Ensure the destination directory exists ansible.builtin.file: path: "/home/oracle/nginx/" state: directory - name: Create an 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. EOF ) ~/podman-project/podman-playbook.yml
-
Fügen Sie dann die folgende Option am Ende der Aufgabe
Run image
hinzu.cat << EOF | tee -a ~/podman-project/podman-playbook.yml > /dev/null volume: "/home/oracle/nginx:/usr/share/nginx/html:Z" EOF
Mit der Option
volume
wird ein Bind-Mount zwischen dem Verzeichnissource:destination
erstellt. Mit der Option:Z
werden alle Probleme mit SELinux-Berechtigungen im Zusammenhang mit dem Bind-Mount behoben. Podman führt dies durch, indem der Inhalt des Volumes neu beschriftet wird, sodass er mit dem Label im Container übereinstimmt.Hier ist eine abgeschlossene Version des Playbooks als Referenz.
-
Führen Sie das Playbook aus.
ansible-playbook ~/podman-project/podman-playbook.yml
-
Prüfen Sie, ob der Container ausgeführt wird.
podman ps
Beispielausgabe:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f74aa726d470 ghcr.io/oracle/oraclelinux9-nginx:1.20 nginx -g daemon o... 10 minutes ago Up 10 minutes ago 0.0.0.0:8080->80/tcp nginx
-
Prüfen Sie, ob die Datei index.html 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
-
Prüfen Sie den Bind Mount.
Verwenden Sie cURL, um die Seite index.html aus dem Container und die Meldung Willkommen anzuzeigen.
curl localhost:8080
Dabei ist 8080 die lokale Portzuordnung zu Port 80 im Container.
Nächste Schritte
Nach Abschluss dieses Tutorials lernen Sie, wie Sie Ihre Arbeit mit Podman und Containern mit Oracle Linux Automation Engine automatisieren können. Entdecken Sie die anderen Module in der containers.podman-Sammlung, um zusätzliche Playbooks zu erstellen, die Ihre Infrastruktur automatisieren.
Verwandte Links
- Dokumentation zu Oracle Linux Automation Manager
- Oracle Linux Automation Manager-Schulung
- Oracle Linux-Schulungsstation
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.
Configure Podman Containers with Oracle Linux Automation Engine
F52951-04
Copyright ©2021, Oracle and/or its affiliates.