Il runtime Java 8

Il runtime Java 8 non include alcun framework di servizi web. L'unico requisito è che la tua app sia in ascolto e risponda sulla porta 8080. Il codice campione qui mostra come aggiungere un framework personalizzato, ad esempio Spring Boot, al runtime Java 8.

Prerequisiti

  • Prima di iniziare a sviluppare, scarica la versione più recente di Google Cloud CLI o aggiorna gcloud CLI alla versione attuale:

    gcloud components update
    
  • Per eseguire il deployment con Maven, devi aggiungere il plug-in Maven di App Engine a pom.xml:

    <plugin>
       <groupId>com.google.cloud.tools</groupId>
       <artifactId>appengine-maven-plugin</artifactId>
       <version>2.7.0</version>
    </plugin>

    Altre opzioni per il deployment includono l'utilizzo del comando gcloud app deploy o del plug-in Gradle di App Engine.

  • Segui le istruzioni per il framework dell'applicazione per configurare la build di un JAR eseguibile. Questo JAR eseguibile deve essere eseguito tramite java -jar app.jar. Ad esempio, consulta la documentazione di Spring Boot.

Organizzazione dei file

La gerarchia dei file di sviluppo dovrebbe essere simile alla seguente:

MyDir/
  pom.xml
  [index.yaml]
  [cron.yaml]
  [dispatch.yaml]
  src/main/
    appengine/
      app.yaml
    docker/
      Dockerfile
    java/
      com.example.mycode/
        MyCode.java

app.yaml

È richiesto un file app.yaml. Definisci un file simile al seguente:

runtime: java
env: flex

Specificando runtime: java, l'immagine di runtime gcr.io/google-appengine/openjdk:8 viene selezionata automaticamente quando esegui il deployment di un file JAR (*.jar).

Per selezionare una versione JDK, utilizza il campo runtime_config.jdk.

runtime: java
env: flex
runtime_config:
  jdk: openjdk8

Puoi trovare altre impostazioni di app.yaml in Utilizzo di app.yaml.

File facoltativi

Questi file di configurazione sono facoltativi:

Posiziona questi file al livello superiore di MyDir. Se utilizzi questi file, devi eseguirne il deployment separatamente con il comando gcloud app deploy.

Punto di ingresso predefinito

Il punto di ingresso per l'immagine OpenJDK 8 è docker-entrypoint.bash, che elabora gli argomenti della riga di comando passati per cercare un'alternativa eseguibile o argomenti per il comando predefinito (java).

Se il primo argomento dell'immagine non è un eseguibile, il comando java viene aggiunto implicitamente. Ad esempio:

$ docker run openjdk -jar /usr/share/someapplication.jar

Se il primo argomento dell'immagine è un eseguibile, come bash, verrà eseguito quel comando.

Ad esempio, puoi eseguire una shell con:

> docker run -it --rm openjdk bash
root@c7b35e88ff93:/#

Variabili di ambiente

Utilizza la chiave env_variables nel file app.yaml per impostare le variabili di ambiente. Ad esempio:

env_variables:
   MY_VAR_COLOR: 'blue'

La seguente tabella elenca le variabili di ambiente che puoi utilizzare per abilitare, disabilitare o configurare le funzionalità.

Var amb. Descrizione Tipo Predefinito
TMPDIR Directory temporanea dirname
JAVA_TMP_OPTS Argomenti tmpdir JVM Argomenti JVM -Djava.io.tmpdir=${TMPDIR}
GAE_MEMORY_MB Memoria disponibile dimensioni Impostato da Google App Engine o /proc/meminfo-400 M
HEAP_SIZE_RATIO Memoria per l'heap percentuale 80
HEAP_SIZE_MB Heap disponibile dimensioni ${HEAP_SIZE_RATIO}% di ${GAE_MEMORY_MB}
JAVA_HEAP_OPTS Argomenti heap JVM Argomenti JVM -Xms${HEAP_SIZE_MB}M -Xmx${HEAP_SIZE_MB}M
JAVA_GC_OPTS Argomenti GC JVM Argomenti JVM -XX:+UseG1GC più configurazione
JAVA_USER_OPTS Altri argomenti JVM Argomenti JVM
JAVA_OPTS Argomenti JVM Argomenti JVM Vedi di seguito
SHUTDOWN_LOGGING_THREAD_DUMP Chiudi il dump dei thread boolean false
SHUTDOWN_LOGGING_HEAP_INFO Informazioni sull'heap di arresto boolean false
SHUTDOWN_LOGGING_SAMPLE_THRESHOLD Campionamento per arresto percentuale 100

Se non viene configurato esplicitamente, il valore predefinito per JAVA_OPTS è JAVA_OPTS:=-showversion \ ${JAVA_TMP_OPTS} \ ${DBG_AGENT} \ ${JAVA_HEAP_OPTS} \ ${JAVA_GC_OPTS} \ ${JAVA_USER_OPTS}

La riga di comando eseguita è efficace (dove $@ sono gli argomenti passati nel punto di ingresso Docker):

java $JAVA_OPTS "$@"

Test locale

Puoi creare la tua app utilizzando:

mvn package

Ed eseguila utilizzando la riga di comando java:

java -jar target/myjar.jar

In alternativa, segui le istruzioni per il framework dell'applicazione su come eseguire l'app in locale.

Quando esegui test nel tuo ambiente locale, potresti preferire l'utilizzo dei servizi cloud di Google emulati, anziché dei servizi cloud di Google remoti. Sono disponibili emulatori per Datastore, Pub/Sub e Bigtable. Utilizza il comando gcloud per avviarle prima di eseguire l'app:

gcloud beta emulators datastore start
gcloud beta emulators pubsub start
gcloud beta emulators bigtable start

Deployment dell'app

Dopo aver completato le configurazioni, puoi utilizzare Google Cloud CLI per eseguire il deployment di questa directory contenente il file app.yaml e il JAR utilizzando:

gcloud app deploy app.yaml

Se utilizzi uno dei file di configurazione facoltativi (index.yaml, cron.yaml e dispatch.yaml), assicurati di eseguirne il deployment separatamente con il comando gcloud. Ad esempio:

gcloud app deploy cron.yaml

Maven

Utilizza Maven per eseguire il deployment della tua app:

mvn package appengine:deploy -Dapp.deploy.projectId=PROJECT_ID

Sostituisci PROJECT_ID con l'ID del tuo progetto Google Cloud. Se il file pom.xml specifica già l'ID progetto, non è necessario includere la proprietà -Dapp.deploy.projectId nel comando che esegui.

Gradle

Utilizza Gradle per eseguire il deployment della tua app:

gradle appengineDeploy

Personalizzazione del runtime Java 8

Non è necessario un Dockerfile per eseguire il deployment dell'app nel runtime Java 8. Tuttavia, se la tua app richiede una configurazione aggiuntiva, puoi fornire esplicitamente un Dockerfile per personalizzare il runtime Java.

Se vuoi utilizzare l'immagine come base per un runtime personalizzato, puoi specificare runtime: custom nel file app.yaml e quindi scrivere il Dockerfile in questo modo:

FROM gcr.io/google-appengine/openjdk:8
COPY your-application.jar $APP_DESTINATION

Queste righe aggiungono il JAR nella posizione corretta per il container Docker.

Puoi aggiungere altre istruzioni al Dockerfile per personalizzare il runtime Java. Consulta Creazione di runtime personalizzati.