Herramientas de usuario

Herramientas del sitio


clase:daw:daw:2eval:tema08

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
clase:daw:daw:2eval:tema08 [2025/02/03 20:46]
admin [Docker Compose]
clase:daw:daw:2eval:tema08 [2025/02/22 14:22] (actual)
admin [Creación de imágenes]
Línea 44: Línea 44:
 COPY origen destino COPY origen destino
  
-Expone un puerto en el contenedor+Documenta que puerto usa el contenedor
 EXPOSE puerto EXPOSE puerto
  
Línea 78: Línea 78:
 - **COPY**: Copia archivos desde la ruta de origen en la máquina host hacia el contenedor en la ruta de destino. - **COPY**: Copia archivos desde la ruta de origen en la máquina host hacia el contenedor en la ruta de destino.
 <sxh> <sxh>
-COPY ./japp.jar /opt/app+COPY ./app.jar /opt/app
 </sxh> </sxh>
  
Línea 86: Línea 86:
  
  
-- **EXPOSE**: Informa a Docker que el contenedor escuchará en el puerto especificado en tiempo de ejecución. No publica el puerto en el host.+<note important> 
 +¿Qué es mejor copiar ficheros dentro con ''COPY'' o que la propia imagen  los descargue con una comando ''RUN''? 
 + 
 +^ Opción ^  Ventaja  ^  Desventaja 
 +| Copiar ficheros desde fuera con ''COPY'' |  Siguen estando aunque desparezcan de internet  |  Para crear la imagen es necesario que lo hayamos descargado previamente 
 +| Descargar ficheros desde el ''RUN''  |  No necesitas descargar nada previamente y es más cómodo  |  No podrás crear la imagen si desaparecen esos ficheros de internet. 
 + 
 +</note> 
 + 
 +- **EXPOSE**: Informa a Docker que el contenedor escuchará en el puerto especificado en tiempo de ejecución. No publica el puerto en la máquina real ni hace realmente nadaEs simplemente para documentar en que puerto 
  
 <sxh> <sxh>
Línea 92: Línea 101:
 </sxh> </sxh>
  
-- **WORKDIR**: Establece el directorio de trabajo para cualquier instrucción posterior en el Dockerfile.+- **WORKDIR**: Establece el directorio de trabajo para cualquier instrucción posterior en el Dockerfile. Se usando tanto para crear la imagen como en el contenedor.
  
 <sxh> <sxh>
Línea 106: Línea 115:
  
  
-- **CMD**: Especifica el comando predeterminado que se ejecutará cuando el contenedor se inicie. +- **CMD**: Especifica el comando predeterminado que se ejecutará cuando el contenedor se inicie. **Solo puede haber una comando ''CMD''** 
  
 <sxh> <sxh>
-CMD ["java", "-jar","/opt/app/japp.jar"]+CMD ["java", "-jar","/opt/app/app.jar"]
 </sxh> </sxh>
  
Línea 119: Línea 128:
 ==== Ejemplo: Ejecutar app java ==== ==== Ejemplo: Ejecutar app java ====
   * Una imagen basada en el JDK 17    * Una imagen basada en el JDK 17 
-  * Copia el fichero de la máquina real que está en ''/opt/peliculas/target/japp.jar'' dentro de loa imagen en la carpeta ''/opt/app'' +  * Copia el fichero de la máquina real que está en ''/opt/peliculas/target/app.jar'' dentro de loa imagen en la carpeta ''/opt/app'' 
-  * Ejecuta el japp.jar+  * Ejecuta el app.jar
  
 <sxh base> <sxh base>
 FROM eclipse-temurin:17.0.10_7-jdk FROM eclipse-temurin:17.0.10_7-jdk
 RUN mkdir /opt/app RUN mkdir /opt/app
-COPY /opt/peliculas/target/japp.jar /opt/app+COPY /opt/peliculas/target/app.jar /opt/app
 WORKDIR /opt/app WORKDIR /opt/app
 EXPOSE 8080 EXPOSE 8080
-CMD ["java", "-jar","/opt/app/japp.jar"]+CMD ["java", "-jar","/opt/app/app.jar"]
 </sxh> </sxh>
  
Línea 243: Línea 252:
             /app             /app
               facturas.jar               facturas.jar
-    /compilador+    /compilar
       /volumes       /volumes
         /app         /app
Línea 249: Línea 258:
           /src           /src
           /scripts           /scripts
 +          /target
 +            /facturas.jar  //Se crea después al ejecutar el contenedor
       /build       /build
         Dockerfile         Dockerfile
         /src         /src
 +          /root
 +            /.m2
 +              settings.xml
           /opt           /opt
             /java             /java
Línea 260: Línea 274:
  
    
-  * Dockerfile +==== Compilar ==== 
-<sxh Dockerfile>+Vamos a crea una imagen de Docker con lo siguiente para poder compilar aplicaciones Java: 
 +  JDK 
 +  * Maven 
 +  * NodeJS 
 +  * sass 
 + 
 + 
 + 
 +  * Fichero ''Dockerfile'' 
 +<sxh yaml>
 FROM ubuntu:24.04 FROM ubuntu:24.04
  
Línea 268: Línea 291:
  
 # Actualizar paquetes y instalar dependencias necesarias # Actualizar paquetes y instalar dependencias necesarias
-RUN apt-get update && apt-get install -y +RUN apt-get update 
-    curl +RUN apt-get install -y curl unzip ca-certificates 
-    unzip +     
-    ca-certificates \ +# Instalar Node.js y npm desde los repositorios oficiales 
-    && rm -rf /var/lib/apt/lists/* +RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - 
 +RUN apt-get install -y nodejs  
 +RUN npm install -g sass
  
 COPY /opt /opt COPY /opt /opt
 +
 +
  
 # Instalar JDK Temurin desde una carpeta local # Instalar JDK Temurin desde una carpeta local
Línea 285: Línea 311:
 ENV PATH="${MAVEN_HOME}/bin:${PATH}" ENV PATH="${MAVEN_HOME}/bin:${PATH}"
  
-Instalar Node.js y npm desde los repositorios oficiales +Crear un settings.xml básico para maven para que se conecte a los servidores 
-RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \ +RUN mkdir -/root 
-    apt-get install -y nodejs && \ +COPY /root /root
-    npm install -g sass+
  
-# Crear un settings.xml básico para evitar mirrors bloqueados 
-RUN mkdir -p /root/.m2 && echo '<?xml version="1.0" encoding="UTF-8"?> \ 
-<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" \ 
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \ 
-  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 \ 
-                      http://maven.apache.org/xsd/settings-1.0.0.xsd"> \ 
-  <mirrors> \ 
-    <mirror> \ 
-      <id>central</id> \ 
-      <mirrorOf>central</mirrorOf> \ 
-      <url>https://repo.maven.apache.org/maven2</url> \ 
-      <layout>default</layout> \ 
-    </mirror> \ 
-  </mirrors> \ 
-</settings>' > /root/.m2/settings.xml 
  
 WORKDIR /opt/app WORKDIR /opt/app
Línea 310: Línea 320:
 CMD ["mvn","clean","install"] CMD ["mvn","clean","install"]
 </sxh>              </sxh>             
 +  * Fichero ''settings.xml''
 +
 +<sxh xml>
 +<?xml version="1.0" encoding="UTF-8"?>
 +<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
 +  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 +  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
 +                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
 +  <mirrors>
 +    <mirror>
 +      <id>central</id>
 +      <mirrorOf>central</mirrorOf>
 +      <url>https://repo.maven.apache.org/maven2</url>
 +      <layout>default</layout>
 +    </mirror>
 +  </mirrors>
 +</settings>
 +</sxh>
  
   * Ejecutarlo todo:   * Ejecutarlo todo:
 <sxh bash> <sxh bash>
-sudo docker image rm compilar:1.0.0 +sudo docker image rm logongas/compilar:1.0.0 
-sudo docker buildx build --tag compilar:1.0.0 --file ./build/Dockerfile ./build/src+sudo docker buildx build --tag logongas/compilar:1.0.0 --file ./build/Dockerfile ./build/src
 sudo docker container run \ sudo docker container run \
      -it \      -it \
Línea 322: Línea 350:
      --name  compilar \      --name  compilar \
      --hostname compilar \      --hostname compilar \
-     compilar:1.0.0 +     -u $(id -u):$(id -g) \ 
 +     logongas/compilar:1.0.0 
 </sxh> </sxh>
  
  
-  * Además de crear la imagen te la puedes bajar con:+  * En vez de crear la imagen se puede bajar con:
 <sxh bash> <sxh bash>
 docker image pull logongas/compilar:1.0.0 docker image pull logongas/compilar:1.0.0
 </sxh> </sxh>
 +
 +Un ejemplo de todo ésto se puede ver en:
 +  * [[https://github.com/lgonzalezmislata/DesplegarFacturasDocker]]
 +  * [[https://github.com/lgonzalezmislata/Facturas]]
  
 ===== Gestión de Redes ===== ===== Gestión de Redes =====
clase/daw/daw/2eval/tema08.1738612012.txt.gz · Última modificación: 2025/02/03 20:46 por admin