Dienste mit Compose bereitstellen

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

Sie haben folgende Möglichkeiten, eine Compose-Datei in Cloud Run bereitzustellen:

Die Verwendung von Compose für die Bereitstellung in Cloud Run 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-(IaC-)Umgebung empfehlen wir die Verwendung von Terraform.

Beschränkungen

  • Bei der Compose-Bereitstellung wird ein einzelner Cloud Run-Dienst mit mehreren Containern bereitgestellt.
  • Bei der Compose-Bereitstellung wird nur ein Teil der unterstützten Cloud Run-Funktionen übersetzt.
  • Für Dienste, die mit Compose erstellt wurden, ist standardmäßig 1 maximale Instanz festgelegt.
  • Die Bereitstellung wird zwar vereinfacht, aber „Cloud Run Compose deploy“ ist kein Ersatz für eine 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 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"

Dienste bereitstellen

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

    gcloud beta run compose up compose.yaml

  2. Antworten Sie mit y auf alle Aufforderungen, erforderliche 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 Quelle bereitstellen

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

Beispiel: Anwendung mit einem Dienst

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

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

Dienste bereitstellen

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

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

      gcloud beta run compose up compose.yaml
    2. Antworten Sie mit y auf alle Aufforderungen, erforderliche 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.

Unterstützte Features

Wenn Sie die Bereitstellung mit einer compose.yaml-Datei vornehmen, 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 Einwilligung gebeten, bevor sie erstellt werden.

Cloud Run unterstützt die folgenden Compose-Funktionen:

Feld zum Verfassen 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-Bereitstellungen in Cloud Run-Entsprechungen.

secrets

Unterstützt. Secret Manager verwenden

configs

Unterstützt. Cloud Storage verwenden

build

Cloud Build erstellt den Container mit dem Build-Kontext, taggt ihn und überträgt ihn per Push in das cloud-run-source-deploy-Repository in Artifact Registry.

image

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

ports

Eine Liste von Portzuordnungen, z. B. 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, damit abhängige Dienste einen Port für die Kommunikation zur Verfügung haben.

depends_on

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

cpu_count/cpus

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

  • <= 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. Wenn nichts angegeben ist, wird standardmäßig der Dienstname verwendet.

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, z. B. der 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 markieren, 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 standardmäßigen, von Cloud Storage unterstützten Volumes fest.

Secrets, die Secret Manager zugeordnet sind

Wenn in Ihrer compose.yaml-Datei secrets definiert ist, stellt die gcloud CLI Secret Manager-Secrets zum Speichern dieser Daten bereit.

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 zur Verwaltung dieser Daten bereit. Pro Bereitstellung wird ein Bucket erstellt. Volumes und Konfigurationen werden durch Ordner getrennt.

  • Benannte Volumes: Im Bucket wird ein leerer Ordner erstellt, der dem Volumennamen entspricht.
  • Bind Mounts: Bei Bind Mounts lädt Cloud Run den Inhalt des lokalen Quellverzeichnisses vor dem Bereitstellen 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 bereitgestellte 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 in die Datei /etc/hosts ein. 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