Optionen zum Ausführen von Containern konfigurieren

Auf dieser Seite werden die verfügbaren Konfigurationsoptionen für das Ausführen von Containern auf Compute Engine beschrieben. Sie können diese Optionen beim Erstellen oder Aktualisieren einer VM-Instanz sowie beim Erstellen einer Instanzvorlage mit der Google Cloud Platform Console oder dem gcloud-Befehlszeilentool festlegen.

Vorbereitung

Richtlinie für den Neustart festlegen

Sie können eine Richtlinie für den Neustart festlegen, um anzugeben, ob ein Container beim 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.

Konsole

  1. Gehen Sie zur Seite "VM-Instanzen".

    Weiter 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

Eine Richtlinie für den Containerneustart geben Sie mit dem Flag --container-restart-policy an:

  • always (Standard)
  • on-failure
  • never

Im folgenden Beispiel werden Container gemäß der Richtlinie on-failure für den Neustart gestartet, was bedeutet, dass sie nur dann neu gestartet werden, wenn der Exitcode ungleich Null ist:

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

Mit dem Befehl gcloud compute instances update-container und dem Flag --container-restart-policy legen Sie eine Richtlinie für den Neustart von Containern auf einer VM fest.

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. Standardmäßig werden Container "nicht privilegiert" ausgeführt und dürfen nicht auf Geräte zugreifen.

Konsole

  1. Gehen Sie zur Seite "VM-Instanzen".

    Weiter 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.

Puffer für STDIN in der Containerlaufzeit zuordnen

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

Der STDIN-Stream muss offen gehalten werden, um eine interaktive Shell im Container einzurichten (und ein Pseudo-TTY zuzuordnen), und damit der Container die Standardeingabe über eine Pipeline empfangen kann.

Konsole

  1. Gehen Sie zur Seite "VM-Instanzen".

    Weiter 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 Puffer für STDIN zuordnen an.

gcloud

Verwenden Sie das Flag--container-stdin, um in der Containerlaufzeit einen Puffer 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 Puffers für STDIN.

Pseudoterminal zuordnen

Neben der Zuordnung eines Zwischenspeichers für STDIN muss Containern ein Pseudoterminal zugewiesen werden, um eine interaktive Shell im Container zu erstellen.

Konsole

  1. Gehen Sie zur Seite "VM-Instanzen".

    Weiter 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 zum Ausführen beim Containerstart überschreiben

Der ENTRYPOINT eines Container-Images gibt an, welche ausführbare Datei beim Containerstart verwendet werden soll, und ermöglicht es 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. Gehen Sie zur Seite "VM-Instanzen".

    Weiter 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 uptime-Befehl in einem busybox-Container ausgeführt, um die Zeit seit dem letzten Start anzuzeigen:

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 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 Standard-Containerbefehl CMD überschreiben.

Console

  1. Gehen Sie zur Seite "VM-Instanzen".

    Weiter 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 den ENTRYPOINT-Befehl des Container-Images 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 eine 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.

Konsole

  1. Gehen Sie zur Seite "VM-Instanzen".

    Weiter 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 aus 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

Der Inhalt der Datei env.txt lautet:

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

Verwenden Sie den Befehl gcloud compute instances update-container mit den Flags --container-env oder --container-env-file, um Umgebungsvariablen für einen Container auf einer VM zu aktualisieren. Dadurch werden alle Variablen aktualisiert, die in der Containerdeklaration der VM-Instanz vorhanden sind. 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 Datenvolumen bereitstellen

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

Konsole

  1. Gehen Sie zur Seite "VM-Instanzen".

    Weiter 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-Bereitstellungen auf Volumen hinzufügen.
  6. Weitere Angaben:

    • Bereitstellungspfad: Der Pfad in einer Container-Verzeichnisstruktur, in der Sie das Hostverzeichnis bereitstellen möchten
    • Hostpfad: Der Pfad zum Hostverzeichnis, das Sie bereitstellen möchten
    • 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 auf einem Container. Verwenden Sie das Flag --remove-container-mounts, um Volumenbereitstellungen mit den angegebenen Bereitstellungspfaden beim Aktualisieren 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.

Temporäres Dateisystem als Datenvolumen bereitstellen

Sie können ein leeres temporäres Dateisystem (temporary file system – tmpfs) in einem Container bereitstellen.

Konsole

  1. Gehen Sie zur Seite "VM-Instanzen".

    Weiter 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-Bereitstellungen auf Volume hinzufügen.
  6. Geben Sie einen Bereitstellungspfad an. Dies ist ein Pfad in der Container-Verzeichnisstruktur, in der Sie das Hostverzeichnis bereitstellen möchten. Das tmpfs-Volume wird im Lese-/Schreibmodus bereitgestellt.

gcloud

Verwenden Sie das Flag --container-mount-tmpfs, um ein leeres temporäres Dateisystem in einem Container bereitzustellen. Im folgenden Beispiel wird ein temporäres Dateisystem unter /cache im Lese-/Schreibmodus im Container 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 in einem 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üchtigen Speicher von einer Host-VM in einen Container laden.

Voraussetzungen

  • Der Speicher muss ext4 als Dateisystem oder kein Dateisystem haben. Ohne anfängliches Dateisystem formatiert der Container-Start-Agent den Speicher 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 eine Tabelle der vorhandenen Partitionen enthalten.

Konsole

  1. Gehen Sie zur Seite "VM-Instanzen".

    Weiter 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 Bereitgestellte Volumes 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 Laufwerksname entweder ein vorhandenes Laufwerk oder Neues Laufwerk anhängen.
  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

Mit dem Befehl gcloud beta compute instances create-with-container oder dem Befehl gcloud beta compute instances update-container mit dem Flag --container-mount-disk können Sie einen nichtflüchtigen Speicher in einem Container bereitstellen.

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

gcloud beta 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

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

Verwenden Sie den Befehl gcloud beta 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 ein Laufwerks-Volume mit dem angegebenen Bereitstellungspfad zu entfernen. Das folgende Beispiel ändert den Bereitstellungsmodus von my-data-disk in Lesen/Schreiben und entfernt die Laufwerksbereitstellung mit mount-path="/disks/scratch-disk".

gcloud beta 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 vorhanden ist, wird er ignoriert.

Containerports veröffentlichen

VMs mit Containern nutzen den Host-Netzwerkmodus. In diesem Modus teilt ein Container das Host-Netzwerkpaket 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 und Sie müssen das Port-Publishing-Flag (-p) 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 zuzulassen. Auf die entsprechenden Ports des Containers wird gemäß den Firewallregeln automatisch zugegriffen.

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 zuzulassen. 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 Portkombinationen von Host-VM-Protokollen für die Protokolle tcp oder udp erstellen. Diese Regeln steuern den Zugriff von außerhalb der VM auf die entsprechenden Containerports.

Weitere Informationen

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

Compute Engine-Dokumentation