Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
clase:daw:daw:2eval:tema08 [2025/02/03 12:54] 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 | + | # Documenta que puerto |
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 |
</ | </ | ||
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 '' | ||
+ | |||
+ | ^ Opción ^ Ventaja | ||
+ | | Copiar ficheros desde fuera con '' | ||
+ | | Descargar ficheros desde el '' | ||
+ | |||
+ | </ | ||
+ | |||
+ | - **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 nada. Es simplemente para documentar en que puerto | ||
<sxh> | <sxh> | ||
Línea 92: | Línea 101: | ||
</ | </ | ||
- | - **WORKDIR**: | + | - **WORKDIR**: |
<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. |
<sxh> | <sxh> | ||
- | CMD [" | + | CMD [" |
</ | </ | ||
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 ''/ | + | * Copia el fichero de la máquina real que está en ''/ |
- | * Ejecuta el japp.jar | + | * Ejecuta el app.jar |
<sxh base> | <sxh base> | ||
FROM eclipse-temurin: | FROM eclipse-temurin: | ||
RUN mkdir /opt/app | RUN mkdir /opt/app | ||
- | COPY / | + | COPY / |
WORKDIR /opt/app | WORKDIR /opt/app | ||
EXPOSE 8080 | EXPOSE 8080 | ||
- | CMD [" | + | CMD [" |
</ | </ | ||
Línea 243: | Línea 252: | ||
/app | /app | ||
facturas.jar | facturas.jar | ||
- | /compilador | + | /compilar |
/volumes | /volumes | ||
- | /target | + | |
- | /logs | + | pom.xml |
+ | /src | ||
+ | /scripts | ||
+ | | ||
+ | / | ||
/build | /build | ||
Dockerfile | Dockerfile | ||
/src | /src | ||
+ | /root | ||
+ | /.m2 | ||
+ | settings.xml | ||
/opt | /opt | ||
- | /openjdk-21 | + | /java |
.... | .... | ||
/maven | /maven | ||
... | ... | ||
- | /log | ||
/app | /app | ||
- | pom.xml | + | |
- | ..... | + | |
- | /target | + | |
- | | + | ==== Compilar ==== |
+ | Vamos a crea una imagen de Docker con lo siguiente para poder compilar aplicaciones Java: | ||
+ | * JDK | ||
+ | * Maven | ||
+ | * NodeJS | ||
+ | * sass | ||
+ | * Fichero '' | ||
+ | <sxh yaml> | ||
+ | FROM ubuntu: | ||
+ | |||
+ | # Configurar entorno no interactivo para evitar prompts en apt | ||
+ | ENV DEBIAN_FRONTEND=noninteractive | ||
+ | |||
+ | # Actualizar paquetes y instalar dependencias necesarias | ||
+ | RUN apt-get update | ||
+ | RUN apt-get install -y curl unzip ca-certificates | ||
+ | | ||
+ | # Instalar Node.js y npm desde los repositorios oficiales | ||
+ | RUN curl -fsSL https:// | ||
+ | RUN apt-get install -y nodejs | ||
+ | RUN npm install -g sass | ||
+ | |||
+ | COPY /opt /opt | ||
+ | |||
+ | |||
+ | |||
+ | # Instalar JDK Temurin desde una carpeta local | ||
+ | ENV JAVA_HOME=/ | ||
+ | ENV PATH=" | ||
+ | |||
+ | # Instalar Maven desde una carpeta local | ||
+ | ENV MAVEN_HOME=/ | ||
+ | ENV PATH=" | ||
+ | |||
+ | # Crear un settings.xml básico para maven para que se conecte a los servidores | ||
+ | RUN mkdir -p /root | ||
+ | COPY /root /root | ||
+ | |||
+ | |||
+ | WORKDIR /opt/app | ||
+ | |||
+ | CMD [" | ||
+ | </ | ||
+ | * Fichero '' | ||
+ | |||
+ | <sxh xml> | ||
+ | <?xml version=" | ||
+ | < | ||
+ | xmlns: | ||
+ | xsi: | ||
+ | http:// | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | * Ejecutarlo todo: | ||
+ | <sxh bash> | ||
+ | sudo docker image rm logongas/ | ||
+ | sudo docker buildx build --tag logongas/ | ||
+ | sudo docker container run \ | ||
+ | -it \ | ||
+ | --rm \ | ||
+ | | ||
+ | -v ./ | ||
+ | | ||
+ | | ||
+ | -u $(id -u):$(id -g) \ | ||
+ | | ||
+ | </ | ||
+ | |||
+ | |||
+ | * En vez de crear la imagen se puede bajar con: | ||
+ | <sxh bash> | ||
+ | docker image pull logongas/ | ||
+ | </ | ||
+ | |||
+ | Un ejemplo de todo ésto se puede ver en: | ||
+ | * [[https:// | ||
+ | * [[https:// | ||
===== Gestión de Redes ===== | ===== Gestión de Redes ===== |