Optionen zum Ausführen des Containers konfigurieren

Wenn Sie eine Instanz oder eine Instanzvorlage zum Ausführen von Containern in Compute Engine erstellen, geben Sie die Containerkonfiguration mithilfe der Google Cloud Console oder des gcloud-Befehlszeilentools an.

Vorbereitung

Neustartrichtlinie angeben

Sie können eine Neustartrichtlinie festlegen, um anzugeben, ob ein Container nach dem Beenden neu gestartet werden soll. Die Standardrichtlinie sieht immer einen Neustart vor. Sie können sie aber auch so definieren, dass nur bei einem Ausfall oder nie ein Neustart erfolgt.

Console

  1. Öffnen Sie die Seite "VM-Instanzen".

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf Instanz erstellen, um eine neue Instanz zu erstellen.
  3. Geben Sie im Abschnitt Container die gewünschte Richtlinie für den Neustart an.

gcloud

Verwenden Sie das Flag --container-restart-policy, um eine Neustartrichtlinie für Container anzugeben:

  • always (Standard)
  • on-failure
  • never

Im folgenden Beispiel wird ein Container mit der Neustartrichtlinie on-failure gestartet, was bedeutet, dass der Neustart nur dann erfolgt, wenn der Exit-Code ungleich null ist:

gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-restart-policy on-failure

Verwenden Sie für die Neustartrichtlinie eines Containers, der auf einer VM ausgeführt wird, den Befehl gcloud compute instances update-container mit dem Flag --container-restart-policy.

Container im privilegierten Modus ausführen

Sie können einen Container im privilegierten Modus ausführen, um Zugriff auf alle Geräte auf dem Host zu gewähren. Container werden standardmäßig als "nicht privilegiert" ausgeführt und dürfen nicht auf Geräte zugreifen.

Console

  1. Öffnen Sie die Seite "VM-Instanzen".

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf Instanz erstellen, um eine neue Instanz zu erstellen.
  3. Klicken Sie im Abschnitt Container das Kästchen Container-Image bereitstellen an.
  4. Klicken Sie auf Erweiterte Containeroptionen.
  5. Klicken Sie das Kästchen Als privilegiert ausführen an.

gcloud

Lassen Sie mit dem Flag --container-privileged einen Container mit Laufzeitprivilegierung ausführen. Im folgenden Beispiel wird ein busybox-Container im privilegierten Modus gestartet:

gcloud compute instances create-with-container busybox-vm \
   --container-image docker.io/busybox:1.27 \
   --container-privileged

Mit dem Befehl gcloud compute instances update-container und dem Flag --container-privileged können Sie einen Container auf einer VM aktualisieren. Mit dem Flag --no-container-privileged deaktivieren Sie den privilegierten Modus.

Zwischenspeicher für STDIN in der Containerlaufzeit zuordnen

Sie können in der Containerlaufzeit einen Zwischenspeicher für STDIN zuordnen, damit der -Stream im Container offen bleibt. Ohne diese Einstellung ergeben Lesevorgänge aus STDIN im Container immer EOF.

Neben dem Zuordnen eines Pseudoterminals muss der STDIN-Stream offen gehalten werden, um eine interaktive Shell im Container einzurichten und damit der Container die Standardeingabe über eine Pipeline empfangen kann.

Console

  1. Öffnen Sie die Seite "VM-Instanzen".

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf Instanz erstellen, um eine neue Instanz zu erstellen.
  3. Klicken Sie im Abschnitt Container das Kästchen Container-Image bereitstellen an.
  4. Klicken Sie auf Erweiterte Containeroptionen.
  5. Klicken Sie das Kästchen Zwischenspeicher für STDIN zuordnen an.

gcloud

Verwenden Sie das Flag --container-stdin, um in der Containerlaufzeit einen Zwischenspeicher für STDIN zuzuordnen. Im folgenden Beispiel wird ein Container gestartet und STDIN offen gehalten:

gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-stdin

Mit dem Befehl gcloud compute instances update-container und dem Flag --container-stdin können Sie einen Container auf einer VM aktualisieren. Mit dem Flag --no-container-stdin deaktivieren Sie die Zuordnung eines Zwischenspeichers für STDIN.

Pseudoterminal zuordnen

Neben dem Zuordnen eines Zwischenspeichers für STDIN muss Containern ein Pseudoterminal zugeordnet werden, um eine interaktive Shell im Container zu erstellen.

Console

  1. Öffnen Sie die Seite "VM-Instanzen".

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf Instanz erstellen, um eine neue Instanz zu erstellen.
  3. Klicken Sie im Abschnitt Container das Kästchen Container-Image bereitstellen an.
  4. Klicken Sie auf Erweiterte Containeroptionen.
  5. Klicken Sie Pseudoterminal zuordnen an.

gcloud

Verwenden Sie das Flag --container-tty, um ein Pseudoterminal zuzuordnen. Im folgenden Beispiel wird ein Container gestartet und ein Pseudoterminal zugewiesen:

 gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-stdin \
    --container-tty

Mit dem Befehl gcloud compute instances update-container und dem Flag --container-tty können Sie einen Container auf einer VM aktualisieren. Geben Sie das Flag --no-container-tty an, um kein Pseudoterminal zuzuordnen.

Standardbefehl überschreiben, der beim Containerstart ausgeführt werden soll

Der ENTRYPOINT eines Container-Images gibt an, welche ausführbare Datei beim Containerstart verwendet werden soll, und ermöglicht Ihnen, den Container so auszuführen, als wäre er dieses Binärprogramm.

Sie können den Befehl ENTRYPOINT des Container-Images überschreiben.

Console

  1. Öffnen Sie die Seite "VM-Instanzen".

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf Instanz erstellen, um eine neue Instanz zu erstellen.
  3. Klicken Sie im Abschnitt Container das Kästchen Container-Image bereitstellen an.
  4. Klicken Sie auf Erweiterte Containeroptionen.
  5. Geben Sie im Feld Befehl einen einzigen ausführbaren Befehl ohne Parameter ein, z. B. uptime.

gcloud

Verwenden Sie das Flag --container-command, um den ENTRYPOINT des Container-Images zu überschreiben. Im folgenden Beispiel wird der Befehl uptime in einem busybox-Container ausgeführt, um die Zeit seit dem letzten Start anzeigen zu lassen:

gcloud compute instances create-with-container busybox-vm \
   --container-image docker.io/busybox:1.27 \
   --container-command "uptime"

Mit dem Befehl gcloud compute instances update-container und dem Flag --container-command aktualisieren Sie einen Befehl für einen Container auf einer VM.

Den Standardbefehl für einen aktualisierten Container löschen Sie mit dem Flag --clear-container-command im Befehl update-container.

Argumente an den Befehl ENTRYPOINT des Containers übergeben

Sie können Argumente an den Befehl ENTRYPOINT eines Containers übergeben (anhängen) oder den standardmäßigen Containerbefehl CMD überschreiben.

Console

  1. Öffnen Sie die Seite "VM-Instanzen".

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf Instanz erstellen, um eine neue Instanz zu erstellen.
  3. Klicken Sie im Abschnitt Container das Kästchen Container-Image bereitstellen an.
  4. Klicken Sie auf Erweiterte Containeroptionen.
  5. Klicken Sie unter Befehlsargumente auf Argument hinzufügen.
  6. Geben Sie pro Feld ein Befehlsargument ein.

gcloud

Verwenden Sie das Flag --container-arg, um Argumente an einen Container-Image-ENTRYPOINT-Befehl zu übergeben. Verwenden Sie für jedes Argument ein separates Flag.

Im folgenden Beispiel wird der Befehl /bin/ash mit den Argumenten -c 'ls -l' in einem Container ausgeführt, der für die automatische Ausführung von "busybox" eingerichtet wurde:

gcloud compute instances create-with-container busybox-vm \
   --container-image docker.io/busybox:1.27 \
   --container-command "/bin/ash" \
   --container-arg="-c" \
   --container-arg="ls -l"

Mit dem Befehl gcloud compute instances update-container und den Flags --container-arg aktualisieren Sie Befehlsargumente für Container auf einer VM. Bei der Aktualisierung wird die gesamte Argumentliste durch die neue ersetzt.

Mit dem Flag --clear-container-args im Befehl update-container entfernen Sie alle Argumente aus der Containerdeklaration.

Umgebungsvariablen festlegen

Sie können Umgebungsvariablen in einem Container festlegen. Wird [KEY] mehrmals wiederholt, wird nur der letzte Wert von [KEY] verwendet.

Console

  1. Öffnen Sie die Seite "VM-Instanzen".

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf Instanz erstellen, um eine neue Instanz zu erstellen.
  3. Klicken Sie im Abschnitt Container das Kästchen Container-Image bereitstellen an.
  4. Klicken Sie auf Erweiterte Containeroptionen.
  5. Klicken Sie unter Umgebungsvariablen auf Variable hinzufügen.
  6. Fügen Sie nach Bedarf eine Umgebungsvariable pro Zeile hinzu oder entfernen Sie Variablen.

gcloud

Verwenden Sie das Flag --container-env, um Umgebungsvariablen in einem Container festzulegen. Im folgenden Beispiel werden die drei Umgebungsvariablen HOME, MODE und OWNER eingerichtet:

gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-env HOME=/home,MODE=test,OWNER=admin

Mit dem Flag --container-env-file können Sie Umgebungsvariablen aus einer lokalen Datei festlegen. Im folgenden Beispiel werden die beiden Umgebungsvariablen anhand der Datei env.txt eingerichtet:

gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-env-file ./env.txt

Die Datei env.txt enthält Folgendes:

# this is a comment
HOME=/home
MODE=test
OWNER=admin

Verwenden Sie den Befehl gcloud compute instances update-container mit dem Flag --container-env oder --container-env-file, um die Umgebungsvariablen für einen Container auf einer VM zu aktualisieren. Dadurch werden alle in der Containerdeklaration der VM-Instanz vorhandenen Variablen aktualisiert. Variablen, die noch nicht in der Containerdeklaration enthalten sind, werden hinzugefügt.

Mit dem Flag --remove-container-env können Sie beim Aktualisieren von Containern auf einer VM Umgebungsvariablen entfernen. Im folgenden Beispiel werden die Umgebungsvariablen MODE und OWNER entfernt:

gcloud compute instances update-container busybox-vm \
    --remove-container-env MODE,OWNER

Falls eine der angegebenen Umgebungsvariablen nicht existiert, wird sie ignoriert.

Hostverzeichnis als Daten-Volume bereitstellen

Sie können ein Verzeichnis aus einer Host-VM in einem Container bereitstellen.

Console

  1. Öffnen Sie die Seite "VM-Instanzen".

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf Instanz erstellen, um eine neue Instanz zu erstellen.
  3. Klicken Sie im Abschnitt Container das Kästchen Container-Image bereitstellen an.
  4. Klicken Sie auf Erweiterte Containeroptionen.
  5. Klicken Sie unter Hostverzeichnis-Deployments auf Volume hinzufügen.
  6. Weitere Angaben:

    • Bereitstellungspfad: ein Pfad in einer Container-Verzeichnisstruktur, in der Sie das Hostverzeichnis bereitstellen möchten
    • Hostpfad: ein Pfad zum Hostverzeichnis, das bereitgestellt werden soll
    • Ob Sie das Verzeichnis im Lese-/Schreibmodus oder im Lesemodus bereitstellen möchten

gcloud

Verwenden Sie das Flag --container-mount-host-path, um ein Host-VM-Verzeichnis in einem Container bereitzustellen. Im folgenden Beispiel wird das Hostverzeichnis /tmp im Container unter /logs im Lese-/Schreibmodus bereitgestellt:

gcloud compute instances create-with-container busybox-vm \
    --container-image docker.io/busybox:1.27 \
    --container-mount-host-path mount-path=/logs,host-path=/tmp,mode=rw

Durch mode=ro wird das Hostverzeichnis im Lesemodus bereitgestellt.

Mit dem Befehl gcloud compute instances update-container und dem Flag --container-mount-host-path aktualisieren Sie Hostverzeichnis-Bereitstellungen für einen Container. Verwenden Sie das Flag --remove-container-mounts, um Volume-Bereitstellungen mit den angegebenen Bereitstellungspfaden zu entfernen. Im folgenden Beispiel wird die Hostpfadbereitstellung mit mount-path=/logs entfernt:

gcloud compute instances update-container busybox-vm \
    --remove-container-mounts /logs

Falls der angegebene Bereitstellungspfad nicht vorhanden ist, wird er ignoriert.

tmpfs-Dateisystem als Daten-Volume bereitstellen

Sie können ein leeres tmpfs-Dateisystem in einem Container bereitstellen.

Console

  1. Öffnen Sie die Seite "VM-Instanzen".

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf Instanz erstellen, um eine neue Instanz zu erstellen.
  3. Klicken Sie im Abschnitt Container das Kästchen Container-Image bereitstellen an.
  4. Klicken Sie auf Erweiterte Containeroptionen.
  5. Klicken Sie unter Tmpfs-Deployments auf Volume hinzufügen.
  6. Geben Sie einen Bereitstellungspfad an. Dies ist ein Pfad in der Container-Verzeichnisstruktur, unter dem Sie ein tmpfs-Volume bereitstellen möchten. Das tmpfs-Volume wird im Lese-/Schreibmodus bereitgestellt.

gcloud

Verwenden Sie das Flag --container-mount-tmpfs, um ein leeres tmpfs-Dateisystem in einem Container bereitzustellen. Im folgenden Beispiel wird im Container ein tmpfs-Dateisystem unter /cache im Lese-/Schreibmodus bereitgestellt:

gcloud compute instances create-with-container busybox-vm \
   --container-image docker.io/busybox:1.27 \
   --container-mount-tmpfs mount-path=/cache

Mit dem Befehl gcloud compute instances update-container und dem Flag --container-mount-tmpfs können Sie tmpfs-Bereitstellungen für einen Container aktualisieren. Verwenden Sie das Flag --remove-container-mounts, um tmpfs-Bereitstellungen mit dem angegebenen Bereitstellungspfad beim Aktualisieren zu entfernen. Im folgenden Beispiel wird die tmpfs-Bereitstellung mit mount-path=/cache entfernt:

gcloud compute instances update-container busybox-vm \
    --remove-container-mounts /cache

Falls der angegebene Bereitstellungspfad nicht vorhanden ist, wird er ignoriert.

Nichtflüchtigen Speicher als Daten-Volume bereitstellen

Mit Container-Optimized OS 69 oder höher können Sie nichtflüchtige Speicher von einer Host-VM in einen Container laden.

Voraussetzungen

  • Das Laufwerk muss ein ext4-Dateisystem oder kein Dateisystem haben. Ohne anfängliches Dateisystem formatiert der Container-Start-Agent das Laufwerk mit ext4. Nur das Anhängen mit Lese-/Schreibzugriff und das Bereitstellen werden unterstützt.
  • Das Laufwerk muss an die VM angehängt werden.
  • Es werden sowohl Geräte mit als auch ohne Partitionen unterstützt. Bei Bereitstellungen mit Partitionen darf das Laufwerk nicht leer sein. Es muss bereits eine Partitionstabelle enthalten.

Console

  1. Öffnen Sie die Seite "VM-Instanzen".

    Zur Seite "VM-Instanzen"

  2. Klicken Sie auf Instanz erstellen, um eine neue Instanz zu erstellen.
  3. Klicken Sie im Abschnitt Container das Kästchen Container-Image bereitstellen an.
  4. Klicken Sie auf Erweiterte Containeroptionen.
  5. Klicken Sie unter Volume-Deployments auf Volume hinzufügen.
  6. Wählen Sie unter Volume-Typ die Option Disk aus.
  7. Geben Sie einen Bereitstellungspfad in der Container-Verzeichnisstruktur an, unter dem Sie den nichtflüchtigen Speicher bereitstellen möchten.
  8. Wählen Sie unter Laufwerkname entweder ein vorhandenes Laufwerk oder Neues Laufwerk anhängen aus.
  9. Wenn das Laufwerk eine Partitionstabelle hat, geben Sie die Nummer der Partition an, die bereitgestellt werden soll. Lassen Sie dieses Feld leer, wenn das Laufwerk keine Partitionen hat.
  10. Geben Sie an, ob Sie das Verzeichnis im Lese-/Schreibmodus oder im Lesemodus bereitstellen möchten.

gcloud

Verwenden Sie den Befehl gcloud compute instances create-with-container oder gcloud compute instances update-container mit dem Flag --container-mount-disk, um einen nichtflüchtigen Speicher in einem Container bereitzustellen.

Im folgenden Beispiel werden die beiden Laufwerke my-data-disk und my-scratch-disk im Container unter den Bereitstellungspfaden /disks/data-disk und /disks/scratch-disk bereitgestellt.

gcloud compute instances create-with-container busybox-vm \
    --disk name=my-data-disk \
    --create-disk name=my-scratch-disk,auto-delete=yes,image=ubuntu-1710-artful-v20180315,image-project=ubuntu-os-cloud \
    --container-image docker.io/busybox:1.27 \
    --container-mount-disk mount-path="/disks/data-disk",name=my-data-disk,mode=ro \
    --container-mount-disk mount-path="/disks/scratch-disk",name=my-scratch-disk

Das Flag --disk hängt das Laufwerk my-data-disk an, das Flag --create-disk erstellt das Laufwerk my-scatch-disk und hängt es an und das Flag --container-mount-disk stellt die angehängten Laufwerke für den Container bereit. Da für my-scratch-disk kein mode angegeben ist, wird dieses Laufwerk standardmäßig im Lese-/Schreibmodus für den Container bereitgestellt.

Verwenden Sie den Befehl gcloud compute instances update-container mit dem Flag --container-mount-disk, um zusätzliche angehängte Laufwerke bereitzustellen oder vorhandene Laufwerksbereitstellungen zu ändern.

Verwenden Sie das Flag --remove-container-mounts, um eine Laufwerks-Volume-Bereitstellung mit dem angegebenen Bereitstellungspfad zu entfernen. Das folgende Beispiel ändert den Bereitstellungsmodus von my-data-disk zu Lesen/Schreiben und entfernt die Laufwerksbereitstellung mit mount-path="/disks/scratch-disk".

gcloud compute instances update-container busybox-vm \
    --container-mount-disk mount-path="/disks/data-disk",name=my-data-disk,mode=rw \
    --remove-container-mounts "/disks/scratch-disk"

Falls der Bereitstellungspfad, den Sie an das Flag --remove-container-mounts übergeben, nicht existiert, wird er ignoriert.

Containerports veröffentlichen

VMs mit Containern nutzen den Host-Netzwerkmodus. In diesem Modus teilt ein Container den Host-Netzwerkstack und alle Schnittstellen des Hosts sind für den Container zugänglich.

Containerports haben eine Eins-zu-Eins-Zuordnung zu den Host-VM-Ports. Zum Beispiel wird der Containerport 80 dem Host-VM-Port 80 zugeordnet. Compute Engine unterstützt nicht das Port-Publishing-Flag (-p). Sie müssen es auch nicht angeben, damit die Zuordnung funktioniert.

Zum Veröffentlichen der Ports eines Containers müssen Sie Firewallregeln konfigurieren, um den Zugriff auf die Ports der Host-VM-Instanz zu ermöglichen. Auf die entsprechenden Ports des Containers kann gemäß den Firewallregeln automatisch zugegriffen werden.

Beispiel: Port 80 für einen NGINX-Container veröffentlichen

Das folgende Beispiel zeigt, wie Sie eine VM-Instanz mit einem NGINX-Container erstellen und Traffic zum Port 80 des Containers zulassen.

  1. Erstellen Sie eine VM-Instanz mit einem NGINX-Container:

    gcloud compute instances create-with-container nginx-vm \
        --container-image gcr.io/cloud-marketplace/google/nginx1:1.12 \
        --tags http-server
    

    Der Container teilt den Netzwerkstack der Host-VM, und Port 80 des Containers wird über den Port 80 der Host-VM veröffentlicht. Das Tag http-server wird als Zieltag für die Firewallregel verwendet, die im nächsten Schritt erstellt wird.

  2. Erstellen Sie eine Firewallregel, um Verbindungen zu Port 80 der VM-Instanz zu ermöglichen. Diese Firewallregel ermöglicht HTTP-Verbindungen zu VM-Instanzen mit dem Tag http-server.

    gcloud compute firewall-rules create allow-http \
        --allow tcp:80 --target-tags http-server
    

    Der Container beginnt automatisch, Traffic über Port 80 zu empfangen. Sie müssen keine zusätzliche Konfiguration vornehmen.

    Sie können Firewallregeln für Kombinationen "Host-VM-Protokoll:Port" erstellen. Das Protokoll ist dabei entweder tcp oder udp. Diese Regeln steuern den Zugriff von außerhalb der VM auf die entsprechenden Containerports.

Feedback und Fragen

Gerne nehmen wir Ihre Fragen und Ihr Feedback entgegen. Kontaktieren Sie das Team für Container auf Compute Engine, um Fragen zu stellen, Probleme zu melden und neue Funktionen anzufordern.

Weitere Informationen