Puoi configurare un'istanza di una macchina virtuale (VM) o un modello di istanza per eseguire il deployment e avviare un container Docker. Compute Engine fornisce Container-Optimized OS (COS) aggiornato immagine con Docker ha installato e avvia il container all'avvio della VM.
Prima di iniziare
- Se non hai familiarità con i container, consulta Cosa sono i container e quali vantaggi offrono.
- Se non hai dimestichezza con Docker, leggi la documentazione di Docker.
- Scopri di più su Container-Optimized OS.
- Scopri di più sui gruppi di istanze gestite (MIG).
-
Se non l'hai già fatto, configura l'autenticazione.
L'autenticazione è la procedura mediante la quale la tua identità viene verificata per l'accesso alle API e ai servizi Google Cloud.
Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine come segue.
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Gestisci le VM che eseguono container come faresti a qualsiasi altra VM durante la configurazione e la gestione dell'infrastruttura.
- Crea servizi scalabili utilizzando gruppi di istanze gestite (MIG) che eseguono i contenitori, che offrono funzionalità come la scalabilità automatica, la riparazione automatica, gli aggiornamenti in sequenza, i deployment multizona e il bilanciamento del carico.
- Usa processi e strumenti che già conosci come Google Cloud CLI l'API Compute Engine per gestire le VM con i container.
- Esegui un numero elevato di microservizi
- Avere un tempo di avvio del contenitore più rapido
- Sfrutta l'orchestrazione automatica di Kubernetes, inclusi upgrade automatici, riparazione automatica dei nodi e scalabilità automatica
- Esegui il deployment del software all'avvio della VM utilizzando un script di avvio o cloud-init.
- Creazione di un'immagine del disco di avvio personalizzato con software preinstallato.
- Raggruppa l'app e le librerie richieste in un'immagine Docker e pubblica l'immagine in Artifact Registry o in un registro di terze parti come Docker Hub.
- Devi specificare il nome di un'immagine Docker e
docker run
configurazione quando si crea un'istanza VM o un modello di istanza gruppo di istanze gestite - Compute Engine crea un'istanza VM che utilizza un'immagine Container-Optimized OS fornita da Google. Questa immagine include un runtime Docker e un software aggiuntivo responsabile avviando il container.
- Compute Engine archivia le impostazioni dei container
metadati dell'istanza nel
gce-container-declaration
. - All'avvio della VM, l'immagine Container-Optimized OS utilizza
docker run
del comando gcloud archiviato nei metadati dell'istanza, l'immagine container dal repository e avvia il container. - Puoi eseguire il deployment di un solo container per ogni istanza VM. Valuta la possibilità di utilizzare Google Kubernetes Engine se devi eseguire il deployment di più contenuti per istanza VM.
Puoi eseguire il deployment dei container solo da un repository pubblico o da un repository Artifact Registry o Container Registry privato a cui puoi accedere. Altro e i repository privati non sono supportati.
Per informazioni sulle autorizzazioni dei registry privati, consulta la documentazione sul controllo dell'accesso per Artifact Registry o Container Registry.
Non puoi mappare le porte di un'istanza VM alle porte del container (
-p
di Docker ). Per abilitare l'accesso ai container, consulta Pubblicazione delle porte del container.Puoi utilizzare solo immagini Container-Optimized OS con questo metodo di deployment.
Puoi utilizzare questa funzionalità solo tramite la console Google Cloud o Google Cloud CLI, non tramite l'API.
- Carica l'immagine Docker in Artifact Registry.
- Utilizza qualsiasi immagine container disponibile pubblicamente da Docker Hub o da altri registry.
Vai alla pagina Crea un'istanza.
Specifica i dettagli della VM.
Nella sezione Contenitore, fai clic su Esegui il deployment del contenitore.
Nella pagina Configura container, specifica un nome per l'immagine container e configura le opzioni per l'esecuzione del container in base alle tue esigenze. Ad esempio, puoi specificare
gcr.io/cloud-marketplace/google/nginx1:latest
per l'immagine del contenitore.Continua con il processo di creazione della VM.
- Aggiorna la dichiarazione del contenitore nell'istanza. Google Compute Engine
la dichiarazione del container aggiornata
metadati dell'istanza nel
gce-container-declaration
. - Interrompe e riavvia l'istanza per attivare la configurazione aggiornata, se l'istanza è in esecuzione. Se l'istanza è interrotta, aggiorna la dichiarazione del contenitore e mantiene l'istanza interrotta. L'istanza VM scarica la nuova immagine e avvia il container all'avvio della VM.
Vai alla pagina Istanze VM.
Fai clic sul nome della VM da aggiornare.
Nella pagina dei dettagli dell'istanza, fai clic su Modifica.
Specifica la nuova immagine del contenitore e aggiorna le opzioni per l'esecuzione del contenitore in base alle esigenze.
Per salvare le modifiche, fai clic su Salva e riavvia. Google Compute Engine salva le modifiche e riavvia l'istanza automaticamente per rendere aggiornamento. Dopo il riavvio, la VM scarica la nuova immagine e avvia il contenitore con la configurazione aggiornata.
Crea un modello di istanza basato su un'immagine Docker.
Crea un MIG dal nuovo modello di istanza.
Vai alla pagina Modelli di istanza.
Per creare un modello di istanza, fai clic su Crea modello istanza.
In Contenitore, seleziona Esegui il deployment dell'immagine container.
In Immagine contenitore, specifica il nome dell'immagine Docker e configura, se vuoi, le opzioni per l'esecuzione del contenitore. Ad esempio, puoi specificare
gcr.io/cloud-marketplace/google/nginx1:15
per l'immagine container.Fai clic su Crea.
- Preparare una nuova immagine Docker per il deployment.
- Crea un modello di istanza basato sulla nuova immagine Docker nello stesso modo in cui creare un modello basato su container.
- Aggiorna un gruppo di istanze gestite al nuovo modello di istanza utilizzando il metodo Autore aggiornamento gruppi di istanze gestite.
- Crea un modello di istanza basato sulla versione corrente dell'immagine Docker, nello stesso modo in cui crei un modello basato su container per un nuovo gruppo di istanze gestite. Per impostazione predefinita viene utilizzata la versione più recente supportata di un'immagine Container-Optimized OS.
- Aggiorna un gruppo di istanze gestite con il nuovo modello di istanza utilizzando Autore aggiornamento gruppi di istanze gestite.
VM_NAME
: il nome dell'istanza VMCONTAINER_NAME
: il nome del contenitoreLog dell'agente di avvio, noti anche come log konlet. L'agente di avvio analizza la configurazione del contenitore ed esegue le attività per avviarlo su un'istanza VM di Compute Engine.
I log degli eventi Docker registrano gli eventi dei container, inclusi gli eventi di avvio e di interruzione dei container.
I log del contenitore includono i
STDOUT
delle app eseguite nel tuo container.Vai alla pagina Istanze VM.
Seleziona l'istanza VM per la quale vuoi visualizzare i log dell'agente di avvio.
In Log, fai clic su Porta seriale 1 (console) per visualizzare il numero seriale. log della console Cloud.
- Connettiti all'istanza con un container tramite SSH.
Esegui il comando
sudo journalctl
per visualizzare l'avvio e il container della VM log di avvio. Utilizza il seguente comando per filtrare i log dell'agente di avvio del contenitore (konlet
).sudo journalctl -u konlet*
Vai alla pagina Istanze VM.
Seleziona l'istanza VM per cui vuoi visualizzare i log dell'agente di avvio.
In Log, fai clic su Cloud Logging per visualizzare i log di Cloud Logging.
Inserisci un filtro di ricerca per recuperare i log dell'agente di avvio.
resource.type="gce_instance" logName="projects/PROJECT_ID/logs/cos_system" jsonPayload.SYSLOG_IDENTIFIER="konlet-startup" jsonPayload._HOSTNAME="VM_NAME"
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto che contiene istanzaVM_NAME
: il nome dell'istanza che ti interessa per ottenere i log
PROJECT_ID
: l'ID progetto che contiene istanzaVM_NAME
: il nome dell'istanza per cui vuoi recuperare i log- Connettiti all'istanza con un contenitore tramite SSH.
Esegui il comando
sudo journalctl
con il seguente filtro per visualizzare i log degli eventi Docker.sudo journalctl -u docker-events-collector
Vai alla pagina Istanze VM.
Seleziona l'istanza VM per la quale vuoi visualizzare i log dell'agente di avvio.
In Log, fai clic su Cloud Logging per visualizzare i log di Cloud Logging.
Inserisci il seguente filtro di ricerca per recuperare i log eventi Docker.
resource.type="gce_instance" logName="projects/PROJECT_ID/logs/cos_system" jsonPayload._HOSTNAME="VM_NAME" jsonPayload.SYSLOG_IDENTIFIER="docker"
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto che contiene istanzaVM_NAME
: il nome dell'istanza che ti interessa per ottenere i log
PROJECT_ID
: l'ID progetto che contiene istanzaVM_NAME
: il nome dell'istanza per cui vuoi recuperare i logVai alla pagina Istanze VM.
Seleziona l'istanza VM per la quale vuoi visualizzare i log dell'agente di avvio.
In Log, fai clic su Cloud Logging per visualizzare i log di Cloud Logging.
La pagina Cloud Logging viene caricata con un filtro di ricerca predefinito. Copia il per
resource.labels.instance_id
. Lo utilizzerai in un secondo momento.Aggiorna il filtro di ricerca per recuperare i log del contenitore.
resource.type="gce_instance" logName="projects/PROJECT_ID/logs/cos_containers" resource.labels.instance_id="INSTANCE_ID"
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto che contiene l'istanzaINSTANCE_ID
: l'ID dell'istanza per la quale vuoi recuperare i log
Determina l'ID dell'istanza per cui vuoi recuperare i log:
gcloud compute instances describe VM_NAME \ --zone ZONE \ --format="value(id)"
Sostituisci quanto segue:
VM_NAME
: il nome dell'istanza per cui vuoi recuperare i logZONE
: la zona in cui si trova l'istanza
Utilizza il comando e il filtro seguenti per visualizzare i log del contenitore dell'istanza.
gcloud logging read "resource.type=gce_instance AND \ logName=projects/PROJECT_ID/logs/cos_containers AND \ resource.labels.instance_id=INSTANCE_ID"
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto che contiene l'istanza.INSTANCE_ID
: l'ID dell'istanza.
Ad esempio, utilizza il seguente comando per visualizzare gli ultimi 10 log dei container in Cloud Logging per un'istanza VM che esegue COS 70, che esiste in
my-project
e che ha un ID istanza555123456789012345
.gcloud logging read "resource.type=gce_instance AND \ logName=projects/my-project/logs/cos_containers AND \ resource.labels.instance_id=555123456789012345" \ --limit 10
- Specifica un criterio di riavvio del container.
- Esegui l'override del container
ENTRYPOINT
(comando predefinito da eseguire sul container . - Passa argomenti al comando
ENTRYPOINT
del container. - Esegui un container in una modalità con privilegi.
- Monta una directory dell'host o
tmpfs
come volume di dati all'interno del contenitore. - Imposta le variabili di ambiente.
- Alloca un buffer per
STDIN
nel runtime del container. - Alloca uno pseudo-TTY.
- Scopri di più su come configurare le opzioni per eseguire il container.
- Scopri di più sui gruppi di istanze gestite.
- Scopri di più su Container-Optimized OS.
Scelta di eseguire il deployment di container su VM e MIG
Eseguendo il deployment dei container su Compute Engine, puoi semplificare deployment delle app e il controllo dell'infrastruttura delle VM.
In alternativa, puoi valutare il deployment Google Kubernetes Engine per:
L'esecuzione di ogni microservizio su una macchina virtuale (VM) separata su Compute Engine potrebbe far sì che il sovraccarico del sistema operativo rappresenti una parte significativa del costo. Google Kubernetes Engine ti consente di eseguire il deployment di più container e gruppi di container per ogni istanza VM, in modo da allocare in modo più efficiente le risorse della VM host ai microservizi con un'impronta più ridotta.
Come funziona il deployment dei container su Compute Engine
I metodi comuni per il deployment di software su una VM di Compute Engine includono:
Entrambi i metodi precedenti combinano le attività di configurazione dell'app e delle impostazioni dell'ambiente del sistema operativo. In qualità di sviluppatore, devi monitorare attentamente e risolvere eventuali dipendenze del runtime. Ad esempio, se due app in esecuzione su una VM utilizzano versioni diverse della stessa libreria, devi installare entrambe le versioni e fare riferimento a queste tramite le variabili di sistema.
In alternativa, puoi eseguire il deployment del software in un container su un'istanza VM o gruppo di istanze gestite Un container trasporta sia il software dell'applicazione sia ed è isolato dalle app e dalle librerie del sistema operativo. Un container può essere facilmente spostati tra ambienti di deployment senza gestire librerie in conflitto del container e del relativo sistema operativo.
La procedura seguente descrive come eseguire il deployment di un container Compute Engine:
Compute Engine esegue le seguenti attività dopo che hai effettuato una richiesta per creare un'istanza VM:
Limitazioni
Preparazione di un container per il deployment
Scegli uno dei seguenti approcci per rendere accessibile l'immagine del contenitore a Compute Engine:
Deployment di un container su una nuova istanza VM
Puoi eseguire il deployment di un container su una nuova istanza VM utilizzando la console Google Cloud oppure Google Cloud CLI.
Console
L'esempio seguente esegue il deployment di un container da un'immagine Docker Nginx fornita da Google,
https://gcr.io/cloud-marketplace/google/nginx1:latest
, a un'istanza VM. Per utilizzare un'immagine Docker diversa, specifica l'immagine che preferisci nei seguenti esempi.gcloud
Usa il comando
gcloud compute instances create-with-container
:gcloud compute instances create-with-container VM_NAME \ --container-image DOCKER_IMAGE
Ad esempio, il comando seguente crea una nuova istanza VM denominata
nginx-vm
, che avvia ed esegue l'immagine Dockergcr.io/cloud-marketplace/google/nginx1:latest
.gcloud compute instances create-with-container nginx-vm \ --container-image gcr.io/cloud-marketplace/google/nginx1:latest
Scopri di più sul comando
gcloud compute instances create-with-container
.Devi sempre specificare un nome completo dell'immagine Docker quando utilizzi un'immagine pubblica di Docker Hub. Ad esempio, specifica il seguente nome immagine per eseguire il deployment di un'immagine container Apache:
docker.io/httpd:2.4
Aggiornamento di un container su un'istanza VM
Puoi aggiornare un'immagine e le opzioni di configurazione Docker per eseguire un container su un'istanza VM usando la console Google Cloud o Google Cloud CLI.
Quando aggiorni una VM che esegue un container, Compute Engine esegue due passaggi:
Console
gcloud
Aggiorna la dichiarazione del container utilizzando la proprietà Comando
gcloud compute instances update-container
. Ad esempio:gcloud compute instances update-container nginx-vm \ --container-image gcr.io/cloud-marketplace/google/nginx1:latest
Questo comando imposta l'immagine del contenitore su
gcr.io/cloud-marketplace/google/nginx1:latest
e riavvia l'istanza per applicare le modifiche. Puoi anche aggiornare qualsiasi proprietà descritta in Configurazione delle opzioni per l'esecuzione del contenitore aggiungendo i flag corrispondenti.Dopo il riavvio, l'istanza scarica la nuova immagine container avvia il container con la nuova configurazione.
Deployment di un container in un gruppo di istanze gestite
Puoi eseguire il deployment di un container in un nuovo gruppo di istanze gestite (MIG) utilizzando la console Google Cloud o Google Cloud CLI seguendo questi passaggi:
Console
L'esempio seguente crea un modello di istanza che esegue il deployment di da un container Nginx fornito da Google (
gcr.io/cloud-marketplace/google/nginx1:15
) immagine Docker in un gruppo di istanze gestite. Per utilizzare altre immagini Docker, specifica l'immagine che ti interessa anzichégcr.io/cloud-marketplace/google/nginx1:15
nel seguente esempio.Crea un gruppo di istanze gestite che utilizza il nuovo modello di istanza.
gcloud
Crea un modello di istanza per l'esecuzione di immagini Docker utilizzando il comando
gcloud compute instance-templates create-with-container
:gcloud compute instance-templates create-with-container TEMPLATE_NAME \ --container-image DOCKER_IMAGE
Puoi anche configurare opzioni per eseguire il container se lo desideri.
Ad esempio, il seguente comando crea un nuovo modello di istanza con nome
nginx-template
, che include informazioni sull'immagine Docker. Un'istanza VM creata da questo modello avvia ed esegue l'immagine Dockergcr.io/cloud-marketplace/google/nginx1:15
all'avvio della VM.gcloud compute instance-templates create-with-container nginx-template \ --container-image gcr.io/cloud-marketplace/google/nginx1:15
Crea un gruppo di istanze gestite utilizzando il nuovo modello di istanza.
Ora che hai un modello di istanza, puoi crea un gruppo di istanze gestite che utilizza il modello di istanza. Ad esempio, per creare un MIG utilizzando l'interfaccia a riga di comando gcloud e il
nginx-template
appena creato, esegui il seguente comando:gcloud compute instance-groups managed create example-group \ --base-instance-name nginx-vm \ --size 3 \ --template nginx-template
Aggiornamento di un gruppo di istanze gestite che esegue un container
Puoi aggiornare un gruppo di istanze gestite per eseguire il deployment di una nuova versione di un immagine Docker o una nuova versione dell'immagine Container-Optimized OS.
Aggiornamento di un MIG a una nuova versione di un'immagine del contenitore
Puoi eseguire il deployment di una nuova versione di un'immagine Docker in un gruppo di istanze gestite utilizzando lo strumento di aggiornamento dei gruppi di istanze gestite in tre passaggi:
Aggiornamento di un gruppo di istanze gestite a una nuova versione dell'immagine Container-Optimized OS
Google aggiorna le immagini Container-Optimized OS regolarmente, e potresti voler applicare questi aggiornamenti ai MIG containerizzati senza modificando l'immagine Docker. Puoi aggiornare un gruppo di istanze gestite a una nuova versione di un'immagine del sistema operativo ottimizzata per i container utilizzando la console Google Cloud o Google Cloud CLI in due passaggi:
Connessione a un contenitore tramite SSH
Puoi connetterti a un contenitore su una VM utilizzando SSH. Utilizza la gcloud CLI per eseguire
gcloud compute ssh
con il flag--container
:gcloud compute ssh VM_NAME --container CONTAINER_NAME
Sostituisci quanto segue:
Scopri di più sulle
gcloud compute ssh
e i relativi argomenti.Monitoraggio dei container su Compute Engine
Per monitorare le istanze che eseguono un'immagine del sistema operativo ottimizzata per i container, utilizza l'agente Node Problem Detector, che comunica con Cloud Monitoring e genera report sulle metriche relative all'integrità. L'agente viene integrato nelle immagini Container-Optimized OS a partire da Milestone 77.
Per attivare l'agente, nei container che utilizzano immagini con Milestone 88 o versioni successive, modifica la sezione dei metadati personalizzati e imposta
google-monitoring-enabled
sutrue
.Per scoprire altri modi per attivare il rilevatore problemi nodo, consulta Attivare il monitoraggio dello stato di integrità.
L'agente Node Problem Detector supporta le metriche nell'elenco delle metriche che iniziano con
guest/
.Per interagire con le metriche raccolte dall'agente, vai a Metrics Explorer.
Visualizzazione dei log
Puoi visualizzare tre tipi di log relativi ai container:
Visualizzazione dei log dell'agente di avvio
I log degli agenti di avvio sono disponibili nella console seriale, tramite
journald
servizio di sistema incluso nell'immagine sistema operativo e tramite Cloud Logging:Visualizzazione dei log dell'agente di avvio nella console seriale
Console
gcloud
Utilizza il comando
get-serial-port-output
per visualizzare i log sulla porta seriale dell'istanza.gcloud compute instances get-serial-port-output VM_NAME
Sostituisci
VM_NAME
con il nome dell'istanza VM.Ad esempio, utilizza il seguente comando per visualizzare l'output della porta seriale di un'istanza VM denominata
nginx-vm
:gcloud compute instances get-serial-port-output nginx-vm
Visualizzazione dei log dell'agente di avvio in
journald
Visualizzazione dei log dell'agente di avvio in Logging
Console
gcloud
Usa il comando
gcloud logging read
con un filtro appropriato per visualizzare i log dell'agente di avvio dei 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"
Sostituisci quanto segue:
Ad esempio, utilizza il seguente comando per visualizzare gli ultimi 10 agenti di avvio log in Logging per un'istanza VM denominata
nginx-vm
che esegue COS 70 ed esiste inmy-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
Visualizzazione dei log degli eventi Docker
Puoi visualizzare i log eventi di Docker in
journald
e in Cloud Logging.Visualizzazione dei log eventi Docker in
journald
visualizza i log eventi Docker in Logging
Console
gcloud
Utilizza il comando
gcloud logging read
con un filtro appropriato per visualizzare i log eventi di 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"
Sostituisci quanto segue:
Ad esempio, utilizza il seguente comando per visualizzare gli ultimi 10 log eventi Docker in Logging per un'istanza VM denominata
nginx-vm
che è in esecuzione su COS 70 ed esiste inmy-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
Visualizzazione dei log dei container
Console
gcloud
Utilizza il comando
gcloud logging read
per visualizzare i log dei container.Specificare le immagini o le famiglie di immagini ottimizzate per i container
Le istanze VM containerizzate o i modelli di istanza vengono creati in modo da utilizzare supportata per impostazione predefinita immagine ottimizzata per il container. L'immagine appartiene al progetto
cos-cloud
.Puoi sostituire questo valore predefinito con un'altra immagine del progetto
cos-cloud
. Per informazioni sulle famiglie di immagini disponibili e sui relativi attributi, consulta Scelta della versione giusta di Container-Optimized OS.Ad esempio, dopo aver stabilito quale immagine vuoi utilizzare, nella CLI gcloud fornisci il flag
--image
per eseguire l'override dell'immagine ottimizzata per i container predefinita o il flag--image-family
per scegliere l'immagine più recente dalla famiglia specificata al momento della creazione della VM.Il seguente esempio crea un'istanza VM containerizzata che utilizza l'immagine più recente della famiglia di immagini
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
Configurazione delle regole del firewall
Le VM containerizzate avviano container la cui rete è impostata sulla modalità host. Un contenutore condivide lo stack di rete dell'host e tutte le interfacce dell'host sono disponibile per il contenitore.
Per impostazione predefinita, Google Cloud Le regole firewall bloccano tutte le connessioni in entrata a un un'istanza VM e consentire tutte le connessioni in uscita da un'istanza VM.
Crea regole firewall per consentire le connessioni in entrata all'istanza e quindi al container.
Configurazione delle opzioni per l'esecuzione di un container
Puoi configurare le seguenti opzioni per eseguire il container:
Scopri di più su configurare le opzioni per eseguire il container.
Passaggi successivi
Salvo quando diversamente specificato, i contenuti di questa pagina sono concessi in base alla licenza Creative Commons Attribution 4.0, mentre gli esempi di codice sono concessi in base alla licenza Apache 2.0. Per ulteriori dettagli, consulta le norme del sito di Google Developers. Java è un marchio registrato di Oracle e/o delle sue consociate.
Ultimo aggiornamento 2024-10-14 UTC.
-