Anda dapat mengonfigurasi instance virtual machine (VM) atau template instance untuk men-deploy dan meluncurkan container Docker. Compute Engine menyediakan image Container-Optimized OS (COS) terbaru dengan Docker yang sudah diinstal dan meluncurkan container Anda saat VM dimulai.
Sebelum memulai
- Jika Anda belum terbiasa dengan container, baca Apa itu container dan manfaatnya.
- Jika Anda tidak terbiasa dengan Docker, baca dokumentasi Docker.
- Baca tentang Container-Optimized OS.
- Baca tentang grup instance terkelola (MIG).
-
Siapkan autentikasi, jika Anda belum melakukannya.
Autentikasi adalah proses verifikasi identitas Anda untuk akses ke layanan dan API Google Cloud.
Untuk menjalankan kode atau contoh dari lingkungan pengembangan lokal, Anda dapat melakukan autentikasi ke Compute Engine sebagai berikut.
Pilih tab untuk melihat bagaimana Anda berencana menggunakan contoh di halaman ini:
Konsol
Saat menggunakan Konsol Google Cloud untuk mengakses API dan layanan Google Cloud, Anda tidak perlu menyiapkan autentikasi.
gcloud
-
Instal Google Cloud CLI, lalu initialize dengan menjalankan perintah berikut:
gcloud init
- Menetapkan region dan zona default.
-
Memilih untuk men-deploy container pada VM dan MIG
Dengan men-deploy container di Compute Engine, Anda dapat menyederhanakan deployment aplikasi sambil mengontrol infrastruktur VM.
- Kelola VM yang menjalankan container dengan cara yang sama seperti Anda memperlakukan VM lain saat mengonfigurasi dan mengelola infrastruktur Compute Engine.
- Buat layanan skalabel menggunakan container yang sedang berjalan dari grup instance terkelola (MIG), yang menawarkan fitur seperti penskalaan otomatis, autohealing, update berkelanjutan, deployment multi-zona, dan load balancing.
- Gunakan proses dan alat yang sudah dikenal seperti Google Cloud CLI atau Compute Engine API untuk mengelola VM dengan container.
Atau, Anda dapat mempertimbangkan untuk men-deploy ke Google Kubernetes Engine untuk:
- Menjalankan microservice dalam jumlah besar
- Memiliki waktu startup container yang lebih cepat
- Memanfaatkan orkestrasi otomatis Kubernetes, termasuk upgrade otomatis, perbaikan otomatis node, dan penskalaan otomatis
Menjalankan setiap microservice pada virtual machine (VM) terpisah di Compute Engine dapat membuat overhead sistem operasi menjadi bagian signifikan biaya Anda. Google Kubernetes Engine memungkinkan Anda men-deploy beberapa container dan grup container untuk setiap instance VM, yang dapat mengalokasikan resource VM host secara lebih efisien ke microservice dengan jejak yang lebih kecil.
Cara kerja deployment container di Compute Engine
Metode umum untuk men-deploy software ke instance VM Compute Engine meliputi:
- Men-deploy software pada booting VM menggunakan skrip startup atau cloud-init.
- Membuat boot disk image kustom dengan software yang sudah diinstal sebelumnya.
Kedua metode di atas menggabungkan tugas mengonfigurasi aplikasi dan menyiapkan lingkungan sistem operasi. Sebagai developer, Anda harus melacak dan menyelesaikan setiap dependensi runtime dengan cermat. Misalnya, jika dua aplikasi yang berjalan di VM menggunakan versi berbeda library yang sama, Anda harus menginstal kedua versi dan mengarahkannya melalui variabel sistem.
Atau, Anda dapat men-deploy software dalam container ke instance VM atau ke MIG. Container membawa software aplikasi dan library yang diperlukan, serta diisolasi dari aplikasi dan library OS. Container dapat dengan mudah dipindahkan antara lingkungan deployment tanpa berurusan dengan versi library yang bertentangan di container dan OS-nya.
Proses berikut menjelaskan cara men-deploy container di Compute Engine:
- Anda memaketkan aplikasi dan library yang diperlukan ke dalam image Docker dan memublikasikan image ke Artifact Registry, atau registry pihak ketiga seperti Docker Hub.
- Anda menentukan nama image Docker dan konfigurasi
docker run
saat membuat instance VM atau template instance untuk MIG.
Compute Engine menjalankan tugas-tugas berikut setelah Anda membuat permintaan untuk membuat instance VM:
- Compute Engine membuat instance VM yang menggunakan image Container-Optimized OS yang disediakan Google. Image ini mencakup runtime Docker dan software tambahan yang bertanggung jawab untuk memulai container Anda.
- Compute Engine menyimpan setelan container Anda di
metadata instance di bagian kunci metadata
gce-container-declaration
. - Saat VM dimulai, image Container-Optimized OS akan menggunakan konfigurasi perintah
docker run
yang disimpan dalam metadata instance, mengambil image container dari repositori, dan memulai container.
Batasan
- Anda hanya dapat men-deploy satu container untuk setiap instance VM. Pertimbangkan Google Kubernetes Engine jika Anda perlu men-deploy beberapa container per instance VM.
Anda hanya dapat men-deploy container dari repositori publik atau dari repositori Artifact Registry atau Container Registry pribadi yang dapat Anda akses. Repositori pribadi lainnya tidak didukung.
Lihat dokumentasi kontrol akses untuk Artifact Registry atau Container Registry untuk mengetahui informasi tentang izin registry pribadi.
Anda tidak dapat memetakan port instance VM ke port container (opsi
-p
Docker). Untuk mengaktifkan akses ke penampung Anda, lihat Memublikasikan port container.Anda hanya dapat menggunakan Image Container-Optimized OS dengan metode deployment ini.
Anda hanya dapat menggunakan fitur ini melalui konsol Google Cloud atau Google Cloud CLI, bukan API.
Menyiapkan container untuk deployment
Pilih salah satu pendekatan berikut agar image container Anda dapat diakses oleh Compute Engine:
- Upload image Docker Anda ke Artifact Registry.
- Gunakan image container yang tersedia secara publik dari Docker Hub atau registry lainnya.
Men-deploy container pada instance VM baru
Anda dapat men-deploy container pada instance VM baru menggunakan konsol Google Cloud atau Google Cloud CLI.
Konsol
Contoh berikut men-deploy container dari image Nginx Docker yang disediakan Google,
https://gcr.io/cloud-marketplace/google/nginx1:latest
, ke instance VM. Untuk menggunakan image Docker yang berbeda, tentukan image yang Anda inginkan
pada contoh di bawah.
Buka halaman Buat instance.
Tentukan detail VM.
Di bagian Container, klik Deploy container.
Pada halaman Konfigurasi container, tentukan nama image container dan konfigurasi opsi untuk menjalankan container sesuai kebutuhan Anda. Misalnya, Anda dapat menentukan
gcr.io/cloud-marketplace/google/nginx1:latest
untuk image container.Lanjutkan dengan proses pembuatan VM.
gcloud
Gunakan perintah gcloud compute instances create-with-container
:
gcloud compute instances create-with-container VM_NAME \ --container-image DOCKER_IMAGE
Misalnya, perintah berikut membuat instance VM baru bernama
nginx-vm
,
yang meluncurkan dan menjalankan image Docker
gcr.io/cloud-marketplace/google/nginx1:latest
.
gcloud compute instances create-with-container nginx-vm \ --container-image gcr.io/cloud-marketplace/google/nginx1:latest
Pelajari perintah gcloud compute instances create-with-container
lebih lanjut.
Anda harus selalu menentukan nama image Docker lengkap saat menggunakan image publik dari Docker Hub. Misalnya, tentukan nama image berikut untuk men-deploy image container Apache:
docker.io/httpd:2.4
Mengupdate container pada instance VM
Anda dapat mengupdate image Docker dan opsi konfigurasi untuk menjalankan container pada instance VM menggunakan konsol Google Cloud atau Google Cloud CLI.
Saat Anda mengupdate VM yang menjalankan container, Compute Engine melakukan dua langkah:
- Mengupdate deklarasi container pada instance. Compute Engine
menyimpan deklarasi container yang telah diupdate di
metadata instance pada
kunci metadata
gce-container-declaration
. - Menghentikan dan memulai ulang instance untuk mengaktifkan konfigurasi yang diupdate, jika instance sedang berjalan. Jika instance dihentikan, update deklarasi container dan biarkan instance tetap dihentikan. Instance VM mendownload image baru dan meluncurkan container saat VM dimulai.
Konsol
Buka halaman VM instances.
Klik nama VM yang akan diupdate.
Di halaman detail instance, klik Edit.
Tentukan image container baru dan perbarui opsi untuk menjalankan container sesuai kebutuhan.
Untuk menyimpan perubahan, klik Simpan dan mulai ulang. Compute Engine menyimpan perubahan dan memulai ulang instance secara otomatis untuk melakukan update. Setelah dimulai ulang, VM akan mendownload image baru dan memulai container dengan konfigurasi yang diupdate.
gcloud
Update deklarasi container menggunakan perintah
gcloud compute instances update-container
. Contoh:
gcloud compute instances update-container nginx-vm \ --container-image gcr.io/cloud-marketplace/google/nginx1:latest
Perintah ini menetapkan image container ke
gcr.io/cloud-marketplace/google/nginx1:latest
dan memulai ulang instance untuk mengaktifkan perubahan. Anda juga dapat mengupdate
properti apa pun yang dijelaskan dalam
Mengonfigurasi opsi untuk menjalankan container
dengan menambahkan flag yang sesuai.
Setelah instance dimulai ulang, instance akan mendownload image container baru dan memulai container dengan konfigurasi baru.
Men-deploy container pada grup instance terkelola
Anda dapat men-deploy container ke grup instance terkelola (MIG) baru menggunakan konsol Google Cloud atau Google Cloud CLI dengan mengikuti langkah-langkah berikut:
Buat template instance yang didasarkan pada image Docker.
Buat MIG dari template instance baru.
Konsol
Contoh berikut membuat template instance yang men-deploy
container dari image Docker Nginx (gcr.io/cloud-marketplace/google/nginx1:15
) yang disediakan Google ke MIG.
Untuk menggunakan image Docker lainnya, tentukan gambar
yang Anda inginkan, bukan gcr.io/cloud-marketplace/google/nginx1:15
,
pada contoh berikut.
Buka halaman Template instance.
Untuk membuat template instance, klik Buat template instance.
Di bagian Container, pilih Deploy image container.
Di bagian Image container, tentukan nama image Docker dan konfigurasikan opsi untuk menjalankan container jika diinginkan. Misalnya, Anda dapat menentukan
gcr.io/cloud-marketplace/google/nginx1:15
untuk image container.Klik Create.
Selanjutnya, buat MIG yang menggunakan template instance baru.
gcloud
Buat template instance untuk menjalankan image Docker menggunakan perintah
gcloud compute instance-templates create-with-container
:
gcloud compute instance-templates create-with-container TEMPLATE_NAME \ --container-image DOCKER_IMAGE
Anda juga dapat mengonfigurasi opsi untuk menjalankan container jika diinginkan.
Misalnya, perintah berikut akan membuat template instance baru dengan nama
nginx-template
, yang menyertakan informasi tentang image Docker.
Instance VM yang dibuat dari template ini akan diluncurkan dan menjalankan image
Docker gcr.io/cloud-marketplace/google/nginx1:15
saat VM dimulai.
gcloud compute instance-templates create-with-container nginx-template \ --container-image gcr.io/cloud-marketplace/google/nginx1:15
Selanjutnya, buat MIG menggunakan template instance baru.
Setelah memiliki template instance, Anda dapat
membuat MIG
yang menggunakan template instance. Misalnya, untuk membuat MIG
menggunakan gcloud CLI dan nginx-template
yang baru saja Anda
buat, jalankan perintah berikut:
gcloud compute instance-groups managed create example-group \ --base-instance-name nginx-vm \ --size 3 \ --template nginx-template
Mengupdate grup instance terkelola yang menjalankan container
Anda dapat mengupdate grup instance terkelola (MIG) untuk men-deploy image Docker versi baru atau versi baru image Container-Optimized OS.
Mengupdate MIG ke versi baru image container
Anda dapat men-deploy image Docker versi baru ke MIG menggunakan Updater Grup Instance Terkelola, dalam tiga langkah:
- Siapkan image Docker baru untuk deployment.
- Buat template instance berdasarkan image Docker baru dengan cara yang sama seperti Anda membuat template berbasis container.
- Update MIG ke template instance baru dengan menggunakan Updater Grup Instance Terkelola.
Mengupdate grup instance terkelola ke versi baru image Container-Optimized OS
Google mengupdate image Container-Optimized OS secara teratur, dan sebaiknya terapkan update tersebut ke MIG dalam container tanpa mengubah image Docker Anda. Anda dapat mengupdate MIG ke versi baru image Container-Optimized OS menggunakan konsol Google Cloud atau Google Cloud CLI dalam dua langkah:
- Buat template instance berdasarkan versi image Docker Anda saat ini, dengan cara yang sama seperti Anda membuat template berbasis container untuk MIG baru. Versi terbaru image Container-Optimized OS yang didukung akan digunakan secara default.
- Update MIG dengan template instance baru menggunakan Updater Grup Instance Terkelola.
Menghubungkan ke container menggunakan SSH
Anda dapat terhubung ke container di VM dengan menggunakan SSH. Gunakan
gcloud CLI untuk menjalankan gcloud compute ssh
dengan flag --container
:
gcloud compute ssh VM_NAME --container CONTAINER_NAME
Ganti kode berikut:
VM_NAME
: nama instance VMCONTAINER_NAME
: nama container
Pelajari perintah gcloud compute ssh
dan argumennya lebih lanjut.
Memantau container di Compute Engine
Untuk memantau instance yang menjalankan image Container-Optimized OS, gunakan agen Pendeteksi Masalah Node, yang berkomunikasi dengan Cloud Monitoring dan melaporkan metrik terkait kesehatan. Agen ini dibangun ke dalam image Container-Optimized OS mulai dari Milestone 77.
Untuk mengaktifkan agen, dalam container yang menggunakan dengan Milestone 88 atau yang lebih baru, edit
bagian metadata kustom
dan tetapkan google-monitoring-enabled
ke true
.
Untuk menemukan cara lain mengaktifkan Pendeteksi Masalah Node, buka Mengaktifkan pemantauan kondisi.
Agen Pendeteksi Masalah Node mendukung metrik dalam daftar metrik
yang dimulai dengan guest/
.
Untuk berinteraksi dengan metrik yang dikumpulkan oleh agen, kunjungi Metrics Explorer.
Melihat log
Anda dapat melihat tiga jenis log yang terkait dengan container:
Log agen startup, juga dikenal sebagai log konlet. Agen startup mengurai konfigurasi container dan menjalankan tugas untuk memulai container di instance VM Compute Engine.
Log aktivitas Docker melaporkan peristiwa container, termasuk peristiwa awal dan penghentian container.
Log dari container Anda menyertakan
STDOUT
dari aplikasi yang berjalan di container Anda.
Melihat log agen startup
Log agen startup tersedia di konsol serial, melalui layanan sistem
journald
yang disertakan dalam image OS, dan melalui
Cloud Logging.
Melihat log agen startup di konsol serial
Konsol
Buka halaman VM instances.
Pilih instance VM dengan log agen startup yang ingin Anda lihat.
Pada Log, klik Port serial 1 (konsol) untuk melihat log konsol serial.
gcloud
Gunakan
perintah get-serial-port-output
untuk melihat log pada port serial instance.
gcloud compute instances get-serial-port-output VM_NAME
Ganti VM_NAME
dengan nama instance VM.
Misalnya, gunakan perintah berikut untuk melihat output port serial
instance VM bernama nginx-vm
:
gcloud compute instances get-serial-port-output nginx-vm
Melihat log agen startup di journald
- Hubungkan ke instance Anda dengan container menggunakan SSH.
Jalankan perintah
sudo journalctl
untuk melihat log startup container dan startup VM. Gunakan perintah berikut untuk memfilter log agen startup container (konlet
).sudo journalctl -u konlet*
Melihat log agen startup di Logging
Konsol
Buka halaman VM instances.
Pilih instance VM dengan log agen startup yang ingin Anda lihat.
Pada Log, klik Cloud Logging untuk melihat log Cloud Logging.
Masukkan filter penelusuran untuk mengambil log agen startup.
resource.type="gce_instance" logName="projects/PROJECT_ID/logs/cos_system" jsonPayload.SYSLOG_IDENTIFIER="konlet-startup" jsonPayload._HOSTNAME="VM_NAME"
Ganti kode berikut:
PROJECT_ID
: project ID yang berisi instanceVM_NAME
: nama instance yang lognya ingin Anda dapatkan
gcloud
Gunakan perintah gcloud logging read
dengan filter yang sesuai untuk melihat log agen startup container.
gcloud logging read "resource.type=gce_instance AND \ logName=projects/PROJECT_ID/logs/cos_system AND \ jsonPayload.SYSLOG_IDENTIFIER=konlet-startup AND \ jsonPayload._HOSTNAME=VM_NAME"
Ganti kode berikut:
PROJECT_ID
: project ID yang berisi instanceVM_NAME
: nama instance yang ingin Anda dapatkan lognya
Misalnya, gunakan perintah berikut untuk melihat 10 log agen startup
terakhir di Logging untuk instance VM bernama nginx-vm
yang menjalankan COS 70 dan yang ada di my-project
.
gcloud logging read "resource.type=gce_instance AND \ logName=projects/my-project/logs/cos_system AND \ jsonPayload.SYSLOG_IDENTIFIER=konlet-startup AND \ jsonPayload._HOSTNAME=nginx-vm" \ --limit 10
Melihat log aktivitas Docker
Anda dapat melihat log aktivitas Docker di journald
dan di Cloud Logging.
Melihat log aktivitas Docker di journald
- Hubungkan ke instance Anda dengan container menggunakan SSH.
Jalankan perintah
sudo journalctl
dengan filter berikut untuk melihat log aktivitas Docker.sudo journalctl -u docker-events-collector
Melihat log aktivitas Docker di Logging
Konsol
Buka halaman VM instances.
Pilih instance VM dengan log agen startup yang ingin Anda lihat.
Pada Log, klik Cloud Logging untuk melihat log Cloud Logging.
Masukkan filter penelusuran berikut untuk mengambil log aktivitas Docker.
resource.type="gce_instance" logName="projects/PROJECT_ID/logs/cos_system" jsonPayload._HOSTNAME="VM_NAME" jsonPayload.SYSLOG_IDENTIFIER="docker"
Ganti kode berikut:
PROJECT_ID
: project ID yang berisi instanceVM_NAME
: nama instance yang lognya ingin Anda dapatkan
gcloud
Gunakan perintah gcloud logging read
dengan filter yang sesuai untuk melihat log aktivitas Docker.
gcloud logging read "resource.type=gce_instance AND \ logName=projects/PROJECT_ID/logs/cos_system AND \ jsonPayload._HOSTNAME=VM_NAME AND \ jsonPayload.SYSLOG_IDENTIFIER=docker"
Ganti kode berikut:
PROJECT_ID
: project ID yang berisi instanceVM_NAME
: nama instance yang lognya ingin Anda dapatkan
Misalnya, gunakan perintah berikut untuk melihat 10 log aktivitas Docker terakhir
di Logging untuk instance VM bernama nginx-vm
yang
menjalankan COS 70 dan yang ada di my-project
.
gcloud logging read "resource.type=gce_instance AND \ logName=projects/my-project/logs/cos_system AND \ jsonPayload._HOSTNAME=nginx-vm AND \ jsonPayload.SYSLOG_IDENTIFIER=docker" \ --limit 10
Melihat log container
Konsol
Buka halaman VM instances.
Pilih instance VM dengan log agen startup yang ingin Anda lihat.
Pada Log, klik Cloud Logging untuk melihat log Cloud Logging.
Pemuatan halaman Cloud Logging dengan filter penelusuran default. Salin nilai untuk
resource.labels.instance_id
. Anda akan menggunakannya nanti.Update filter penelusuran untuk mengambil log container.
resource.type="gce_instance" logName="projects/PROJECT_ID/logs/cos_containers" resource.labels.instance_id="INSTANCE_ID"
Ganti kode berikut:
PROJECT_ID
: project ID yang berisi instanceINSTANCE_ID
: ID instance yang ingin Anda dapatkan lognya
gcloud
Gunakan perintah gcloud logging read
untuk melihat log container.
Tentukan ID untuk instance yang ingin Anda dapatkan lognya:
gcloud compute instances describe VM_NAME \ --zone ZONE \ --format="value(id)"
Ganti kode berikut:
VM_NAME
: nama instance yang ingin Anda dapatkan lognyaZONE
: zona tempat instance berada
Gunakan filter dan perintah berikut untuk melihat log container instance.
gcloud logging read "resource.type=gce_instance AND \ logName=projects/PROJECT_ID/logs/cos_containers AND \ resource.labels.instance_id=INSTANCE_ID"
Ganti kode berikut:
PROJECT_ID
: project ID yang berisi instance.INSTANCE_ID
: ID instance.
Misalnya, gunakan perintah berikut untuk melihat 10 log container terakhir di Cloud Logging untuk instance VM yang menjalankan COS 70, yang ada di
my-project
, dan yang memiliki ID instance555123456789012345
.gcloud logging read "resource.type=gce_instance AND \ logName=projects/my-project/logs/cos_containers AND \ resource.labels.instance_id=555123456789012345" \ --limit 10
Menentukan image atau kelompok imager yang dioptimalkan untuk container
Instance VM dalam container atau template instance dibuat untuk menggunakan
image yang dioptimalkan untuk container terbaru yang didukung secara default. Image
ini termasuk dalam project cos-cloud
.
Anda dapat mengganti default ini dengan image lain dari project cos-cloud
.
Untuk mengetahui informasi tentang kelompok image yang tersedia dan atributnya, baca
Memilih versi Container-Optimized OS yang tepat.
Misalnya, setelah Anda mengetahui image mana yang ingin digunakan, di
gcloud CLI, berikan flag --image
untuk
mengganti image default yang dioptimalkan container atau berikan
flag --image-family
untuk memilih image terbaru dari kelompok
yang ditentukan pada waktu pembuatan VM.
Contoh berikut akan membuat instance VM dalam container yang menggunakan gambar terbaru
dari kelompok gambar cos-dev
:
gcloud compute instances create-with-container nginx-vm \ --image-family cos-dev \ --image-project cos-cloud \ --container-image gcr.io/cloud-marketplace/google/nginx1:1.15
Mengonfigurasi aturan firewall
VM dalam container meluncurkan container yang jaringannya ditetapkan ke mode host. Container berbagi stack jaringan host, dan semua antarmuka dari host tersedia untuk container tersebut.
Secara default, aturan firewall Google Cloud akan memblokir semua koneksi masuk ke instance VM dan mengizinkan semua koneksi keluar dari instance VM.
Buat aturan firewall untuk mengizinkan koneksi masuk ke instance Anda dan juga ke container.
Mengonfigurasi opsi untuk menjalankan container
Anda dapat mengonfigurasi opsi berikut untuk menjalankan container:
- Tentukan kebijakan mulai ulang container.
- Ganti
ENTRYPOINT
container (perintah default untuk dijalankan saat container dimulai). - Teruskan argumen ke perintah
ENTRYPOINT
container. - Jalankan container dalam mode dilindungi.
- instal direktori host atau
tmpfs
sebagai volume data di dalam container. - Tetapkan variabel lingkungan.
- Alokasikan buffering untuk
STDIN
dalam runtime container. - Alokasikan pseudo-TTY.
Pelajari lebih lanjut cara mengonfigurasi opsi untuk menjalankan container Anda.
Langkah selanjutnya
- Pelajari cara mengonfigurasi opsi untuk menjalankan container.
- Pelajari grup instance terkelola lebih lanjut.
- Pelajari Container-Optimized OS.