Halaman ini menjelaskan cara men-deploy layanan ke Cloud Run menggunakan file berdasarkan spesifikasi Compose.
Anda dapat men-deploy ke Cloud Run dengan file Compose menggunakan cara berikut:
Menggunakan Compose untuk men-deploy ke Cloud Run sangat ideal untuk pengembangan dan menyederhanakan transisi dari lingkungan lokal ke lingkungan cloud. Dengan Compose, Anda dapat mempertahankan format konfigurasi yang konsisten untuk aplikasi lokal dan aplikasi yang di-deploy.
Untuk mengelola lingkungan produksi di lingkungan infrastruktur sebagai kode (IaC) lingkungan, sebaiknya gunakan Terraform.
Batasan
- Deployment Compose men-deploy satu layanan Cloud Run dengan beberapa container.
- Deployment Compose hanya menerjemahkan sebagian fitur Cloud Run yang didukung .
- Layanan yang dibuat menggunakan Compose ditetapkan secara default ke 1 instance maksimum.
- Meskipun menyederhanakan deployment, deployment Compose Cloud Run bukanlah pengganti strategi infrastruktur sebagai kode yang komprehensif untuk lingkungan produksi.
Men-deploy layanan dari image container dengan Compose
Tentukan layanan Anda dalam file compose.yaml dan deploy dari image container yang ada. Untuk mengetahui informasi selengkapnya, lihat Men-deploy image container.
Contoh: Aplikasi satu layanan
Contoh berikut menunjukkan file compose.yaml untuk layanan web yang menggunakan image container bawaan.
services:
web:
image: us-docker.pkg.dev/cloudrun/container/hello
ports:
- "8080:8080"
Contoh: Aplikasi multi-container dengan Nginx, Flask, dan MongoDB
Contoh berikut menunjukkan file compose.yaml untuk aplikasi dengan proxy Nginx, backend Flask, dan database MongoDB.
Untuk men-deploy contoh ini, diperlukan struktur project berikut:
compose.yaml: File Compose yang menentukan layanan.nginx/nginx.conf: Konfigurasi untuk proxy Nginx.flask/: Direktori yang berisi kode aplikasi Flask (server.py,Dockerfile, danrequirements.txt).
services:
web:
image: nginx
volumes:
- ./nginx/nginx.conf:/tmp/nginx.conf
environment:
- FLASK_SERVER_ADDR=backend:9091
command: /bin/bash -c "envsubst < /tmp/nginx.conf > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
- 80:80
x-google-cloudrun:
ingress-container: true
depends_on:
- backend
backend:
build:
context: flask
target: builder
stop_signal: SIGINT
environment:
- FLASK_SERVER_PORT=9091
volumes:
- ./flask:/src
depends_on:
- mongo
ports:
- 9091:9091
mongo:
image: mongo
ports:
- 27017:27017
Men-deploy layanan
Untuk men-deploy layanan, jalankan perintah
gcloud run compose up:gcloud run compose up compose.yamlRespons
yterhadap setiap perintah untuk menginstal komponen yang diperlukan atau mengaktifkan API.Opsional: Tampilkan layanan Anda ke publik jika ingin mengizinkan akses tanpa autentikasi ke layanan.
Setelah deployment, URL layanan Cloud Run akan ditampilkan. Salin URL ini dan tempel ke browser Anda untuk melihat container yang sedang berjalan. Anda dapat menonaktifkan autentikasi default dari Google Cloud konsol.
Men-deploy dari sumber dengan Compose
Tentukan layanan Anda dalam file compose.yaml dan deploy dengan mem-build dari kode sumber. Untuk mengetahui informasi selengkapnya, lihat Men-deploy layanan dari kode sumber.
Contoh: Aplikasi satu layanan
Contoh berikut menunjukkan file compose.yaml untuk layanan web yang di-build dari sumber di direktori saat ini.
services:
web:
build: .
ports:
- "8080:8080"
Men-deploy layanan
Di direktori project Anda, buat file
compose.yamldengan definisi layanan Anda.Untuk men-deploy layanan, jalankan perintah
gcloud run compose up:gcloud run compose up compose.yamlRespons
yterhadap setiap perintah untuk menginstal komponen yang diperlukan atau mengaktifkan API.Opsional: Tampilkan layanan Anda ke publik jika ingin mengizinkan akses tanpa autentikasi ke layanan.
Setelah deployment, URL layanan Cloud Run akan ditampilkan. Salin URL ini dan tempel ke browser Anda untuk melihat container yang sedang berjalan. Anda dapat menonaktifkan autentikasi default dari Google Cloud konsol.
Memaksa rebuild
Secara default, deployment Compose Cloud Run akan melewati proses build jika kode sumber Anda tidak berubah sejak build terakhir. Untuk memaksa
rebuild layanan apa pun yang ditentukan dengan konfigurasi build, gunakan flag --build
sebagai berikut:
gcloud run compose up compose.yaml --build
Hal ini sangat berguna jika repositori jarak jauh, image, atau ringkasan dihapus, tetapi kode sumber lokal Anda tetap sama. Flag --build dan --no-build tidak dapat muncul bersamaan.
Fitur yang didukung
Saat Anda men-deploy menggunakan file compose.yaml, Cloud Run dapat
otomatis menyediakan resource lain seperti yang ditentukan dalam file
Compose Anda. Google Cloud Jika resource diperlukan, Cloud Run akan meminta izin Anda sebelum membuatnya.
Cloud Run mendukung subset fitur Compose berikut:
| Kolom Compose | Pemetaan &deskripsi Cloud Run |
|---|---|
services |
Layanan dipetakan ke container individual dalam layanan Cloud Run yang di-deploy. |
volumes |
Didukung sebagian. Menerjemahkan pemasangan |
secrets |
Didukung. Menggunakan Secret Manager. |
configs |
Didukung. Menggunakan Cloud Storage. |
build |
Didukung. Mem-build container menggunakan konteks build, memberi tag, dan mengirim ke repositori |
image |
Men-deploy image container bawaan dari registry yang didukung. Gunakan jika Anda memiliki image bawaan. Hanya mendukung image Docker Hub dan Artifact Registry. Untuk image kustom, Anda dapat mengirim image ke Artifact Registry dan menggunakannya. |
ports |
Daftar pemetaan port, seperti |
expose |
Daftar port yang akan diekspos, tetapi tidak dipublikasikan, seperti |
depends_on |
Menentukan urutan startup container. Hal ini memastikan bahwa layanan yang tercantum dalam |
cpus |
Petunjuk yang digunakan untuk menetapkan batas CPU dan memori Cloud Run, yang secara otomatis mengalokasikan resource sesuai dengan logika berikut:
|
container_name |
Menetapkan nama container untuk resolusi dependensi, yang secara default menggunakan nama layanan jika tidak ditentukan. |
environment |
Meneruskan variabel lingkungan ke container yang sesuai di Cloud Run. |
command |
Mengganti perintah default container, yang dideklarasikan oleh container, dengan memetakan ke atribut |
entrypoint |
Didukung. |
env_file |
Didukung. |
x-google-cloudrun:ingress-container |
(Ekstensi) Tambahkan ekstensi khusus Google ini ke layanan dan tetapkan ke |
x-google-cloudrun:volume-type: in-memory |
(Ekstensi) Tambahkan ekstensi khusus Google ini ke volume dan tetapkan ke |
Secret yang dipetakan ke Secret Manager
Jika file compose.yaml Anda menentukan secrets, gcloud CLI akan menyediakan secret Secret Manager untuk menyimpan data ini.
Contoh berikut menunjukkan file compose.yaml untuk layanan gcloud CLI yang menggunakan secret yang disimpan di Secret Manager:
services:
web:
image: us-docker.pkg.dev/cloudrun/container/hello
ports:
- "8080:8080"
secrets:
- my_app_password
secrets:
my_app_password:
file: my_app_password.txt
Nama secret di Secret Manager mengikuti pola ini: SERVICE_NAME-REGION-SECRET_NAME.
Untuk mengetahui informasi selengkapnya, lihat Batasan pemasangan secret.
Volume dan konfigurasi yang dipetakan ke Cloud Storage
Jika file compose.yaml Anda menentukan volumes atau configs tingkat atas, gcloud CLI akan menyediakan bucket Cloud Storage untuk mengelola data ini. Satu bucket dibuat per deployment, menggunakan folder untuk memisahkan volume dan konfigurasi.
- Volume bernama: Folder kosong yang sesuai dengan nama volume di buat di bucket.
- Pemasangan bind: Untuk pemasangan bind, Cloud Run mengupload konten direktori sumber lokal ke folder di bucket sebelum deployment.
- Konfigurasi: Untuk setiap konfigurasi yang ditentukan dengan sumber
file:, Cloud Run mengupload konten file lokal ke folder di bucket.
Peran yang diperlukan
Selama deployment, Cloud Run secara otomatis memberikan peran yang diperlukan kepada identitas layanan dari layanan yang di-deploy untuk mengakses resource yang disediakan:
- Bucket Cloud Storage:
roles/storage.objectUser - Secret Secret Manager:
roles/secretmanager.secretAccessor
Komunikasi antar-container dari instance yang sama
Cloud Run menambahkan entri ke file /etc/hosts di setiap container. Entri ini memetakan nama layanan dari file compose.yaml ke alamat IP internalnya, yang memungkinkan layanan berkomunikasi satu sama lain menggunakan nama layanannya.
Langkah berikutnya
- Pelajari lebih lanjut cara mengelola layanan.
- Pelajari cara menyiapkan autentikasi.
- Pelajari cara mengelola secret.