rulează

Într-o lume în care agilitatea contează, efortul de a reduce timpul pierdut în configurațiile de mediu este evident în multe tehnologii. Unele tehnici, cum ar fi mașinile virtuale, care permit distribuirea imaginilor preconfigurate, există de zeci de ani, în timp ce altele precum containerele Linux sunt mai recente.

Chiar și platformele precum Java permit dezvoltatorilor să împacheteze toate dependențele, resursele și fișierele de configurare într-un singur fișier JAR (Java Archive). Ceea ce a început inițial ca o modalitate de a avea clase Java executabile în Java SE (Standard Edition), a câștigat acum notorietate și în Enterprise. Promisiunea de a livra servere rulabile într-un „fat-jar” care conține nu numai aplicația dvs., ci și runtime-ul serverului și resursele sale (biblioteci, surse de date, configurația tranzacțiilor etc.); proiecte realizate precum WildFly Swarm, Spring Boot și Vert.x devin foarte populare în „Java land”.

Deși aceste proiecte permit „ambalarea” timpului de rulare al serverului, un mediu elastic precum „Cloud computing” are nevoie de un alt „strat” de împachetare, iar containerele Linux sunt perfecte pentru acesta. Când înfășurați „vasul de grăsime” într-un container, puteți oferi, de asemenea, un mediu de execuție personalizat pentru fișierul JAR care oferă un sistem operațional, mașina virtuală Java și poate fi, de asemenea, îmbogățit cu JMX (Java Management Extensions) care permite monitorizarea ușoară a JVM. De asemenea, puteți seta semnalizatoare de configurare care să permită depanarea etc.

Soluția

Pentru containerele Linux, o metodă pentru rularea „fat-jars” este folosirea fabric8/java-jboss-openjdk8-jdk ca imagine de andocare de bază. Această imagine oferă Open JDK 1.8 și un script de pornire (run.sh) care permite un agent Jolokia - un JMX la distanță cu JSON prin HTTP - și permite, de asemenea, utilizarea variabilelor de mediu pentru a modifica comportamentul JVM în funcție de ceea ce este determinat de Al treilea factor al „Aplicației cu doisprezece factori”: stocați configurația în mediu

Să luăm, de exemplu, microserviciul „hello world” WildFly-Swarm numit „hola” care returnează „hello world” în spaniolă. Codul sursă pentru această aplicație este disponibil pe Github, aici: https://github.com/redhat-helloworld-msa/hola.

Notă: Pentru un exemplu complet MSA (Microservices Architecture) care integrează tehnologii precum WildFly Swarm, Spring-boot, Vert.x și NodeJS, răsfoiți documentația disponibilă la: https://github.com/redhat-helloworld-msa/helloworld-msa

Rețineți că fișierul Docker al aplicației „hola” este foarte simplu. Trebuie doar să setați numele fișierului dvs. JAR în variabila de mediu JAVA_APP_JAR, iar scriptul de pornire se va ocupa de restul:

Notă: Variabila de mediu AB_OFF = true dezactivează utilizarea Jolokia. Avem nevoie de acesta pentru vasele de grăsime WildFly-Swarm din cauza unei erori cunoscute.

Această imagine de bază vă permite, de asemenea, să personalizați pornirea procesului Java cu multe alte variabile de mediu pe care le puteți vedea în fișierul readme al proiectului. Aici sunt cateva exemple:

  • JAVA_OPTIONS - opțiuni de adăugat la apelarea java
  • JAVA_MAIN_CLASS - O clasă principală de utilizat ca argument pentru java .
  • JAVA_APP_JAR - Un fișier jar cu un manifest adecvat, astfel încât să poată fi pornit cu java -jar dacă nu este setat $ JAVA_MAIN_CLASS. În toate cazurile, acest fișier jar este adăugat și la classpath.
  • JAVA_APP_NAME - Numele de utilizat pentru proces
  • JAVA_CLASSPATH - calea de clasă de utilizat. Dacă nu este dat, scriptul verifică dacă există un fișier $/classpath și folosește conținutul său literal ca classpath. Dacă acest fișier nu există, se adaugă toate borcanele din direcția aplicației (clase: $/*).
  • JAVA_ENABLE_DEBUG - Dacă este setat, depanarea la distanță va fi activată
  • JAVA_DEBUG_PORT - Port utilizat pentru depanare la distanță. Implicit: 5005

După ce creați o imagine Docker cu comanda „docker build -t redhatmsa/hola”. veți putea rula un container folosind Docker, Kubernetes și Openshift.

Tot ce ai nevoie pentru a-ți dezvolta cariera.

Odată cu abonamentul gratuit la programul Red Hat Developer, deblocați biblioteca noastră de foi de trucuri și cărți electronice despre dezvoltarea de aplicații de generația următoare.

Docher

Nu este atât de simplu?

Dar cum modificați configurația containerului? Variabilele de mediu trebuie setate înainte de executarea containerului, deci dacă doriți să executați această aplicație cu 1 GB de memorie Heap, puteți face pur și simplu:

Kubernetes

Aceeași imagine poate fi utilizată în interiorul Kubernetes. Pentru a rula containerul cu un Heap de 1 GB, executați:

Openshift

O comandă similară pentru a implementa această imagine în Openshift va fi:

Un sfat suplimentar pentru Openshift: Dacă doriți să actualizați configurația, actualizați doar variabila de mediu în configurația de implementare „hola”. Configurarea de implementare va avea grijă să înlocuiască toate pod-urile care rulează cu altele noi cu noua configurație.

Concluzie

În loc să codificați hard un „CMD java -jar ”În interiorul unui fișier Docker, utilizarea fabric8/java-jboss-openjdk8-jdk ca imagine de andocare de bază vă permite să utilizați un runtime JDK 1.8 existent cu configurații JVM externalizate - fișierul Docker pentru aplicația dvs. devine extrem de simplu. Funcții precum depanarea și monitorizarea la distanță pot fi ușor activate fără a fi nevoie să vă modificați imaginea existentă.

Pentru mai multe informații legate de containere (și multe altele), înregistrați-vă astăzi pe site-ul web Red Hat Developers.