====== 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 }}