Dienste mit Compose bereitstellen

Auf dieser Seite wird beschrieben, wie Sie Dienste mit einer Datei , die auf der Compose-Spezifikation basiert, in Cloud Run bereitstellen.

Sie können mit einer Compose-Datei auf folgende Arten in Cloud Run bereitstellen:

Die Bereitstellung in Cloud Run mit Compose ist ideal für die Entwicklung und vereinfacht den Übergang von Ihrer lokalen Umgebung zu einer Cloud-Umgebung. So können Sie ein einheitliches Konfigurationsformat für Ihre lokalen und bereitgestellten Anwendungen beibehalten.

Für die Verwaltung von Produktionsumgebungen in einer Infrastruktur-als-Code-Umgebung (Infrastructure as Code, IaC) empfehlen wir die Verwendung von Terraform.

Beschränkungen

  • Bei der Bereitstellung mit Compose wird ein einzelner Cloud Run-Dienst mit mehreren Containern bereitgestellt.
  • Bei der Bereitstellung mit Compose wird nur ein Teil der unterstützten Cloud Run-Funktionen übersetzt.
  • Für mit Compose erstellte Dienste ist standardmäßig eine maximale Anzahl von Instanzen von 1 festgelegt.
  • Die Bereitstellung mit Cloud Run Compose vereinfacht zwar die Bereitstellung, ersetzt aber keine umfassende Infrastruktur-als-Code-Strategie für Produktionsumgebungen.

Dienste aus Container-Images mit Compose bereitstellen

Definieren Sie Ihre Dienste in einer compose.yaml-Datei und stellen Sie sie aus vorhandenen Container-Images bereit. Weitere Informationen finden Sie unter Container-Images bereitstellen.

Beispiel: Anwendung mit einem einzelnen Dienst

Das folgende Beispiel zeigt eine compose.yaml-Datei für einen Webdienst, der ein vordefiniertes Container-Image verwendet.

services:
  web:
    image: us-docker.pkg.dev/cloudrun/container/hello
    ports:
      - "8080:8080"

Dienst bereitstellen

  1. Führen Sie den Befehl gcloud run compose up aus, um die Dienste bereitzustellen:

    gcloud run compose up compose.yaml

  2. Antworten Sie mit y auf alle Aufforderungen, die erforderlichen Komponenten zu installieren oder APIs zu aktivieren.

  3. Optional: Veröffentlichen Sie Ihren Dienst , wenn Sie den nicht authentifizierten Zugriff auf den Dienst zulassen möchten.

    Nach der Bereitstellung wird die Cloud Run-Dienst-URL angezeigt. Kopieren Sie diese URL und fügen Sie sie in Ihren Browser ein, um den ausgeführten Container aufzurufen. Sie können die Standardauthentifizierung in der Google Cloud Console deaktivieren.

Mit Compose aus Quellcode bereitstellen

Definieren Sie Ihre Dienste in einer compose.yaml-Datei und stellen Sie sie bereit, indem Sie sie aus Quellcode erstellen. Weitere Informationen finden Sie unter Dienste aus Quellcode bereitstellen.

Beispiel: Anwendung mit einem einzelnen Dienst

Das folgende Beispiel zeigt eine compose.yaml-Datei für einen Webdienst, der aus Quellcode im aktuellen Verzeichnis erstellt wird.

services:
  web:
    build: .
    ports:
      - "8080:8080"

Dienste bereitstellen

  • Erstellen Sie im Projektverzeichnis eine compose.yaml-Datei mit Ihren Dienstdefinitionen.

    1. Führen Sie den Befehl gcloud run compose up aus, um die Dienste bereitzustellen:

      gcloud run compose up compose.yaml
    2. Antworten Sie mit y auf alle Aufforderungen, die erforderlichen Komponenten zu installieren oder APIs zu aktivieren.

    3. Optional: Veröffentlichen Sie Ihren Dienst wenn Sie den nicht authentifizierten Zugriff auf den Dienst zulassen möchten.

    Nach der Bereitstellung wird die Cloud Run-Dienst-URL angezeigt. Kopieren Sie diese URL und fügen Sie sie in Ihren Browser ein, um den ausgeführten Container aufzurufen. Sie können die Standardauthentifizierung in der Google Cloud Console deaktivieren.

Neuerstellung erzwingen

Standardmäßig überspringt die Bereitstellung mit Cloud Run Compose den Build-Prozess, wenn sich der Quellcode seit dem letzten Build nicht geändert hat. Wenn Sie eine Neuerstellung aller Dienste erzwingen möchten, die mit einer build Konfiguration definiert wurden, verwenden Sie das --build Flag so:

gcloud run compose up compose.yaml --build

Dies ist besonders nützlich, wenn ein Remote-Repository, ein Image oder ein Digest gelöscht wurde, Ihr lokaler Quellcode aber gleich geblieben ist. Die Flags --build und --no-build schließen sich gegenseitig aus.

Unterstützte Features

Wenn Sie mit einer compose.yaml-Datei bereitstellen, kann Cloud Run automatisch andere Google Cloud Ressourcen bereitstellen, die in Ihrer Compose-Datei definiert sind. Wenn Ressourcen erforderlich sind, werden Sie von Cloud Run um Ihre Zustimmung gebeten, bevor sie erstellt werden.

Cloud Run unterstützt die folgende Teilmenge der Compose-Features:

Compose-Feld Cloud Run-Zuordnung und -Beschreibung
services

Dienste werden einzelnen Containern im bereitgestellten Cloud Run-Dienst zugeordnet.

volumes

Teilweise unterstützt. Übersetzt bind, volume und tmpfs-Mounts in Cloud Run-Entsprechungen.

secrets

Unterstützt. Verwendet Secret Manager.

configs

Unterstützt. Verwendet Cloud Storage.

build

Unterstützt. Erstellt den Container mit dem Build-Kontext, taggt ihn und überträgt ihn per Push in das Repository cloud-run-source-deploy in Artifact Registry. Verwenden Sie das Flag --build, um eine Neuerstellung zu erzwingen, auch wenn sich der Quellcode seit dem letzten Build nicht geändert hat.

image

Stellt ein vordefiniertes Container-Image aus einer unterstützten Registry bereit. Verwenden Sie diese Option, wenn Sie ein vordefiniertes Image haben. Unterstützt nur Docker Hub- und Artifact Registry-Images. Bei benutzerdefinierten Images können Sie Images in Artifact Registry übertragen und sie verwenden.

ports

Eine Liste von Portzuordnungen wie 8080:8080, die den Ingress-Container bestimmen.

expose

Eine Liste der Ports, die verfügbar gemacht, aber nicht veröffentlicht werden sollen, z. B. 3000. So wird sichergestellt, dass abhängigen Diensten ein Port für die Kommunikation zur Verfügung steht.

depends_on

Definiert die Startreihenfolge der Container. So wird sichergestellt, dass für jeden in run-compose aufgeführten Dienst ein Port definiert ist, entweder mit ports oder expose, damit andere Container mit ihm kommunizieren können.

cpus

Ein Hinweis zum Festlegen von CPU- und Arbeitsspeicherlimits für Cloud Run. Ressourcen werden automatisch nach der folgenden Logik zugewiesen:

  • <= 2 CPU: 1Gi Memory
  • <= 4 CPU: 2Gi Memory
  • > 4 CPU: 4Gi Memory
container_name

Legt den Namen des Containers für die Abhängigkeitsauflösung fest. Standardmäßig wird der Dienstname verwendet, wenn nichts angegeben ist.

environment

Übergibt Umgebungsvariablen an den entsprechenden Container in Cloud Run.

command

Überschreibt den Standardbefehl des Containers, der vom Container deklariert wird, indem er dem Attribut args in Cloud Run zugeordnet wird. Beispiel: die CMD-Anweisung eines Dockerfile.

entrypoint

Unterstützt.

env_file

Unterstützt.

x-google-cloudrun:ingress-container

(Erweiterung) Fügen Sie diese Google-spezifische Erweiterung einem Dienst hinzu und legen Sie sie auf true fest, um sie als Ingress-Container zu kennzeichnen, der den gesamten externen Traffic empfängt.

x-google-cloudrun:volume-type: in-memory

(Erweiterung) Fügen Sie diese Google-spezifische Erweiterung einem Volume hinzu und legen Sie sie auf in-memory anstelle des Standard-Volumes fest, das von Cloud Storage unterstützt wird.

Secrets, die Secret Manager zugeordnet sind

Wenn in Ihrer compose.yaml-Datei secrets definiert sind, stellt die gcloud CLI Secret Manager-Secrets bereit, um diese Daten zu speichern.

Volumes und Konfigurationen, die Cloud Storage zugeordnet sind

Wenn in Ihrer compose.yaml-Datei volumes oder configs auf oberster Ebene definiert sind, stellt die gcloud CLI einen Cloud Storage-Bucket bereit, um diese Daten zu verwalten. Pro Bereitstellung wird ein einzelner Bucket erstellt, wobei Volumes und Konfigurationen durch Ordner getrennt werden.

  • Benannte Volumes: Im Bucket wird ein leerer Ordner mit dem Namen des Volumes erstellt.
  • Bind-Mounts: Bei Bind-Mounts lädt Cloud Run den Inhalt des lokalen Quellverzeichnisses vor der Bereitstellung in einen Ordner im Bucket hoch.
  • Konfigurationen: Für jede Konfiguration, die mit einer file: Quelle definiert ist, lädt Cloud Run den Inhalt der lokalen Datei in einen Ordner im Bucket hoch.

Erforderliche Rollen

Während der Bereitstellung weist Cloud Run der Dienstidentität des bereitgestellten Dienstes automatisch die erforderlichen Rollen für den Zugriff auf die bereitgestellten Ressourcen zu:

  • Cloud Storage-Bucket: roles/storage.objectUser
  • Secret Manager-Secrets: roles/secretmanager.secretAccessor

Kommunikation zwischen Containern derselben Instanz

Cloud Run fügt in jedem Container einen Eintrag zur Datei /etc/hosts hinzu. Dieser Eintrag ordnet die Dienstnamen aus Ihrer compose.yaml-Datei ihren internen IP-Adressen zu. So können Dienste über ihre Dienstnamen miteinander kommunizieren.

Nächste Schritte