====== Dockeritzar aplicacions Java ====== En aquest article veurem com "dockeritzar" aplicacions Java. {{ java-docker.png }} {{tag> #Ciber #CiberMp03 #Ceti #CetiMp03 docker java }} Pot ser d'utilitat perquè molts cops es desenvolupa i compila el codi usant una versió de Java i JDK que l'usuari no té instal.lada, fent que no funcioni quan s'executa. {{ java_error2.png }} NOTA: Java 16 uses major version 60; Java 8 uses major version 52 (versió instal.lada). ===== Executar una aplicació Java senzilla en Docker ===== Per a començar, crearem la nostra primera aplicació Java sobre Docker. Passos: * Crear una carpeta de projecte amb els fitxers de codi Java de la nostra aplicació. Fitxer **docker_java.java**: class docker_java { public static void main(String[] args) { System.out.println("Aplicació Java en Docker"); } * Crear l'arxiu **Dockerfile** amb una configuració com: FROM java:8 WORKDIR /var/www/java COPY . /var/www/java RUN javac docker_java.java CMD ["java", "docker_java"] A CMD es posen dos arguments: la comanda i el nom de la classe del codi Java * Crear la imatge Docker $ docker build -t docker_java . Podem posar el nom de la app que volem, en aquest cas, docker_java * Executar la imatge Docker $ docker run docker_java En el cas que ja tinguem el codi en un arxiu .jar i compilat en una versió diferent de la instal.lada, caldria modificar el fitxer Dockfile de la manera següent: FROM openjdk:18 WORKDIR /var/www/java COPY . /var/www/java CMD ["java", "-jar", "app.jar"] FROM cerca la imatge que es necessita a Docker Hub. Enllaç a les versions d'OpenJDK que hi ha a Docker Hub: [[https://hub.docker.com/_/openjdk?tab=tags]] WORKDIR pot tenir el valor que es vulgui. /var/www/java és un espai temporal La resta de passos són els mateixos, crear la imatge Docker amb "docker build" i executar-la amb "docker run" \\ ===== Executar una aplicació Java basada en Maven en Docker ===== Amb la següent configuració de **Dockerfile** podem executar Maven en Docker FROM maven:3.8-jdk-11 RUN mkdir /project COPY . /project WORKDIR /project RUN mvn clean package -DskipTests CMD ["java", "-jar","app_maven.jar"] FROM cerca la imatge que es necessita a Docker Hub. En aquest cas, una de Maven. Enllaç a les versions de Maven que hi ha a Docker Hub: [[https://hub.docker.com/_/maven?tab=tags]] RUN per executar Maven CMD per executar el codi Java a partir del .jar La resta de passos són els mateixos, crear la imatge Docker amb «docker build» i executar-la amb «docker run» \\ ===== Executar una aplicació Java basada en Gradle en Docker ===== Amb la següent configuració de **Dockerfile** podem executar Gradle en Docker FROM gradle:7.4-jdk11 RUN mkdir /project COPY . /project WORKDIR /project RUN gradle build CMD ["java", "-jar", "app_gradle.jar"] FROM cerca la imatge que es necessita a Docker Hub. En aquest cas, una de Gradle. Enllaç a les versions de Gradle que hi ha a Docker Hub: [[https://hub.docker.com/_/gradle?tab=tags]] RUN per executar Gradle CMD per executar el codi Java a partir del .jar La resta de passos són els mateixos, crear la imatge Docker amb «docker build» i executar-la amb «docker run» \\ ===== Exercicis ===== Crear una aplicació Java senzilla i executar-la en Docker Crear una aplicació Java, generar el .jar i executar-la en Docker Quan s'ha executat un .jar en Docker ha donat aquest error. {{ error_docker_java.png }} Explicar com arreglar-lo Crear una aplicació Java, usar Maven, generar el .jar i executar en Docker Crear una aplicació Java, usar Gradle, generar el .jar i executar en Docker \\ ===== Referències ===== * Build your Java image: [[https://docs.docker.com/language/java/build-images/]] * Run the Java application in a Docker container: [[https://www.jetbrains.com/help/idea/running-a-java-app-in-a-container.html#run_java_app_in_container]] * Dockerizing Java Apps using Jib: [[https://www.baeldung.com/jib-dockerizing]] * (Maven) Build Docker image and run tests: [[https://maven.apache.org/surefire/maven-surefire-plugin/docker.html]] {{tag> #Ciber #CiberMp03 #Ceti #CetiMp03 docker java }}