Es gibt zwei Methoden zum Erstellen von Container-Images mit Buildpacks:
- Erstellen Sie einen lokalen Build mit der
pack
-Befehlszeile, um Ihre Funktion lokal zu testen und vor der Bereitstellung schnell Prototypen für Änderungen zu erstellen. - Build per Remotezugriff ausführen mit Cloud Build. Das Erstellen mit Cloud Build ist nützlich für Funktionen, die ressourcenintensive Build-Prozesse haben und kann auch zum Schutz Ihrer Softwarelieferkette beitragen.
Projekt zum Erstellen von Funktionen konfigurieren
So erstellen Sie Funktionen mit Buildpacks:
Fügen Sie die Bibliothek Functions Framework ein.
Legen Sie die Umgebungsvariable
GOOGLE_FUNCTION_TARGET
auf den Namen der Funktion fest, die Sie als Einstiegspunkt verwenden. Dazu fügen Sie eineproject.toml
in denselben Ordner wie den Quellcode ein. Die Dateiproject.toml
muss die folgende Konfiguration haben:
[[build.env]]
name = "GOOGLE_FUNCTION_TARGET"
value = "ENTRY_POINT"
Ersetzen Sie ENTRY_POINT durch die Funktionsmethode.
Weitere Informationen zur Verwendung von Umgebungsvariablen mit Cloud Run-Funktionen finden Sie unter Cloud Run-Funktionen-Dienste konfigurieren.
Lokale Builds
Pack ist ein Befehlszeilentool, das vom CNB-Projekt zur Unterstützung der Verwendung von Buildpacks verwaltet wird. Verwenden Sie die pack
-Befehlszeile, um Ihre Funktionen lokal in einem Container-Image zu erstellen.
Vorbereitung
- Installieren Sie die Docker Community Edition (CE) auf Ihrer Workstation. Docker wird von
pack
als OCI-Image-Builder verwendet. - Installieren Sie die Pack-Befehlszeile.
- Installieren Sie das Tool Git Source Control, um die Beispielanwendung von GitHub herunterzuladen.
Funktion lokal erstellen
Verwenden Sie den pack build
-Befehl und geben Sie den Standard-Builder --builder=gcr.io/buildpacks/builder
an, um Ihre Container-Images lokal zu erstellen.
pack build --builder=gcr.io/buildpacks/builder IMAGE_NAME
Ersetzen Sie IMAGE_NAME durch den Namen Ihres Container-Images.
Sie können das Container-Image anpassen. Dazu erweitern Sie die Build- und Ausführungs-Images.
Beispielfunktion lokal erstellen
In den folgenden Beispielen wird gezeigt, wie ein Sample lokal erstellt wird.
- Klonen Sie das Beispiel-Repository auf Ihren lokalen Computer:
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- Wechseln Sie in das Verzeichnis, das den Workflows-Beispielcode enthält:
Go
cd buildpack-samples/sample-functions-framework-go
Java
cd buildpack-samples/sample-functions-framework-java-mvn
Node.js
cd buildpack-samples/sample-functions-framework-node
Python
cd buildpack-samples/sample-functions-framework-python
Ruby
cd buildpack-samples/sample-functions-framework-ruby
- Erstellen Sie die Beispielfunktion mit
pack
:Go
pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-go
Java
pack build --builder gcr.io/buildpacks/builder:v1 sample-functions-java-mvn
Node.js
pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-node
Python
pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-python
Ruby
pack build --builder=gcr.io/buildpacks/builder sample-functions-framework-ruby
- Führen Sie das Image mit
docker
aus:Go
docker run -p8080:8080 sample-functions-framework-go
Java
docker run -it -ePORT=8080 -p8080:8080 sample-functions-java-mvn
Node.js
docker run -it -ePORT=8080 -p8080:8080 sample-functions-framework-node
Python
docker run -it -ePORT=8080 -p8080:8080 sample-functions-framework-python
Ruby
docker run -it -ePORT=8080 -p8080:8080 sample-functions-framework-ruby
- Um die ausgeführte Funktion auszuführen, rufen Sie localhost:8080 auf.
Remote-Builds
Verwenden Sie Cloud Build, um Ihre Funktion in einem Container-Image zu erstellen, und Artifact Registry als Container-Repository, um die einzelnen Images zu speichern und bereitzustellen.
Vorbereitung
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build and Artifact Registry APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Build and Artifact Registry APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Ihr Google Cloud-Projekt muss Zugriff auf ein Container-Image-Repository haben.
So konfigurieren Sie den Zugriff auf ein Docker-Repository in Artifact Registry:
- Erstellen Sie ein neues Docker-Repository an dem Speicherort, an dem sich auch Ihr Google Cloud-Projekt befindet.
Ersetzen Sie:gcloud artifacts repositories create REPO_NAME \ --repository-format=docker \ --location=REGION --description="DESCRIPTION"
REPO_NAME
durch den Namen, den Sie für Ihr Docker-Repository wählen.REGION
durch einen Standort direkt im oder maximal nahe am Google Cloud-Projekt.DESCRIPTION
mit einer Beschreibung Ihrer Wahl.
Beispiel: Um ein
docker
-Repository inus-west2
mit der Beschreibung "Docker repository" zu erstellen, führen Sie folgenden Befehl aus:gcloud artifacts repositories create buildpacks-docker-repo --repository-format=docker \ --location=us-west2 --description="Docker repository"
- Prüfen Sie, ob das Repository erstellt wurde:
gcloud artifacts repositories list
Der Name, den Sie für Ihr Docker-Repository wählen, sollte in der Liste angezeigt werden.
- Erstellen Sie ein neues Docker-Repository an dem Speicherort, an dem sich auch Ihr Google Cloud-Projekt befindet.
Funktion per Remote-Zugriff erstellen
Mit dem gcloud builds submit
-Befehl können Sie Ihr Container-Image erstellen und in Ihr Repository hochladen.
Sie können das Container-Image im Befehl selbst angeben oder eine Konfigurationsdatei verwenden.
Mit Befehl erstellen
Für die Erstellung ohne Konfigurationsdatei geben Sie das image
-Flag an:
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME
Ersetzen Sie:
LOCATION
durch den Namen der Region Ihres Container-Repositorys, z. B.us-west2
- Ersetzen Sie
PROJECT_ID
durch die ID Ihres Google Cloud-Projekts. REPO_NAME
durch den Namen des Docker-Repositorys.IMAGE_NAME
durch den Namen Ihres Container-Images
Beispiel:
gcloud builds submit --pack image=us-west2-docker.pkg.dev/my-project-id/my-buildpacks-docker-repo
Mit Konfigurationsdateien erstellen
Sie können eine Konfigurationsdatei verwenden, um die Details der Image-Repository-Konfiguration zu definieren und den Build-Befehl zu vereinfachen. Die Konfigurationsdatei verwendet das YAML-Dateiformat und muss einen Build-Schritt enthalten, der die pack
-Befehlszeile verwendet.
- Erstellen Sie eine YAML-Datei mit dem Namen
cloudbuild.yaml
, die den URI Ihres Container-Image-Repositorys enthält.
options: logging: CLOUD_LOGGING_ONLY pool: {} projectId: PROJECT_ID steps: - name: gcr.io/k8s-skaffold/pack entrypoint: pack args: - build - LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME - --builder - gcr.io/buildpacks/builder:latest - --network - cloudbuild images: - LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME
Ersetzen Sie:
LOCATION
durch den Namen der Region Ihres Container-Repositorys, z. B.us-west2
.- Ersetzen Sie
PROJECT_ID
durch die ID Ihres Google Cloud-Projekts. REPO_NAME
durch den Namen des Docker-Repositorys.IMAGE_NAME
durch den Namen Ihres Container-Images
Erstellen Sie die Anwendung.
Wenn Sie Ihre Konfigurationsdatei
cloudbuild.yaml
genannt haben, können Sie folgenden Befehl ausführen:gcloud builds submit .
Beispiel: Beispielfunktion per Remotezugriff erstellen
In folgenden Beispielen wird gezeigt, wie Sie ein Beispiel für einen Remote-Build erstellen und dann prüfen, ob das Container-Image per Push in Ihr Repository in Artifact Registry übertragen wurde.
- Klonen Sie das Beispiel-Repository auf Ihren lokalen Computer:
git clone https://github.com/GoogleCloudPlatform/buildpack-samples.git
- Wechseln Sie in das Verzeichnis, das den Workflows-Beispielcode enthält:
Go
cd buildpack-samples/sample-functions-framework-go
Java
cd buildpack-samples/sample-functions-framework-java-mvn
Node.js
cd buildpack-samples/sample-functions-framework-node
Python
cd buildpack-samples/sample-functions-framework-python
Ruby
cd buildpack-samples/sample-functions-framework-ruby
- Verwenden Sie
gcloud
, um den Anwendungsquellcode an Cloud Build zu senden:Go
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-go
Java
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-gradle
Node.js
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-node
Python
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-python
Ruby
gcloud builds submit --pack image=LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/sample-functions-framework-ruby
Ersetzen Sie:
LOCATION
durch den Namen der Region Ihres Container-Repositorys. Beispiel:us-west2-docker.pkg.dev
- Ersetzen Sie
PROJECT_ID
durch die ID Ihres Google Cloud-Projekts. REPO_NAME
durch den Namen des Docker-Repositorys.
-
Prüfen Sie, ob die Beispielfunktion erfolgreich in
REPO_NAME
veröffentlicht wurde:gcloud artifacts docker images list LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME
Ersetzen Sie:
LOCATION
durch den Namen der Region Ihres Container-Repositorys, z. B.us-west2
.- Ersetzen Sie
PROJECT_ID
durch die ID Ihres Google Cloud-Projekts. REPO_NAME
durch den Namen des Docker-Repositorys.
Weitere Informationen
- Stellen Sie das Funktions-Image in Cloud Run bereit.
- Umgebungsvariablen festlegen
- Build-Images konfigurieren
- Builds mit Cache-Images beschleunigen