di

Resumen

En este laboratorio se trabaja el despliegue de aplicaciones basadas en contenedores en clouds diferentes. Se practicará creando una imagen de una aplicación y subiéndola a Docker Hub. Posteriormente, se preparará una máquina virtual con Docker en OpenStack y se desplegará la imagen de Docker Hub. Finalmente, se desplegará la misma imagen en una máquina virtual de Google Compute Engine y en Google Cloud Run.

Objetivos
  • Crear imágenes propias

  • Subir imágenes a un registro de contenedores

  • Desplegar contenedores en máquinas virtuales

  • Interactuar con el Google Container Registry

  • Desplegar contenedores en Cloud Run

Prerrequisitos
  • Cuenta creada en Docker Hub.

  • Cuenta y proyecto creado en OpenStack-DI.

  • Cuenta y proyecto creado en Google Cloud.

  • Los usuarios de Windows deben tener instalada una herramienta para acceso SSH (p.e. Git Bash, Putty). Los usuarios de Linux y Mac usarán la terminal y no tendrán que instalar nada.

1. Recursos

2. Actividades

2.1. Creación de imagen

  1. Clonar el repositorio con el proyecto de una web estática básica.

  2. Modificar el código del index.html añadiendo debajo del encabezado

    <h1 class="display-3">Web estática básica</h1>

    la línea siguiente

    <h2 class="display-6">Nombre Completo (<usuarioUALSin@inlumine.ual.es>)</h2>

    sustituyendo los valores por tu nombre completo y tu usuario UAL sin @inlumine.ual.es.

  3. Modificar el Dockerfile para que:

    1. Tome como base una imagen de Apache (httpd)

    2. Añada el código de la aplicación al directorio donde Apache sirve su contenido (/usr/local/apache2/htdocs/)

    3. Cambie el punto de montaje del volumen a /usr/local/apache2/htdocs/

  4. Crear una imagen Docker con el tag <usuarioDockerHub>/web-estatica-basica:v0 (cambiando el usuario de Docker Hub por el valor correspondiente).

  5. Subir la imagen a Docker Hub

2.2. Creación de una máquina virtual en OpenStack-DI con un contenedor desplegado

  1. Lanzar una instancia (máquina virtual) seleccionando una imagen disponible de Ubuntu 22.04.3 LTS (Jammy Jellyfish).

    Important

    En el paso del Asistente de OpenStack para la creación de una nueva instancia especificar que No cree un nuevo volumen para la nueva instancia.

  2. Configurar el grupo de seguridad default y añadir las reglas del puerto SSH (22) para que se pueda acceder a ella por SSH y HTTP (80) para que se pueda acceder a ella por el puerto 80.

  3. Seleccionar el Sabor (Tamaño) de la instancia: small (1 vCPU, 2 GB RAM y 20 GB de disco).

  4. En Configuración, añadir en Customization Script el script de instalación de Docker y Docker Compose.

  5. Asignar una IP flotante a la instancia creada.

  6. Acceder a la instancia creada mediante una terminal indicando su IP flotante.

  7. Editar el archivo /home/ubuntu/.ssh/authorized_keys y añadir la clave pública del profesor, disponible en el foro general de la asignatura en Aula virtual.

  8. Ejecutar un contenedor en modo dettached con docker run a partir de la imagen de Docker Hub del ejercicio anterior haciendo que el contenedor se muestre en el puerto 80.

  9. Adjuntar en la actividad disponible en Aula Virtual la dirección IP flotante de la instancia creada.

Al acceder a la instancia desde un navegador debe mostrarse la web que está ejecutando el contenedor y mostrar un resultado similar al de esta figura.

webEstaticaBasicaPersonalizada

2.3. Creación de una máquina virtual en Google Cloud con un contenedor desplegado

Google Cloud Compute Engine permite la creación de una instancia inicializada con una imagen Docker. Sigue los pasos siguientes:

  1. Crear en Google Cloud Compute Engine una nueva instancia de máquina virtual con las características siguientes:

    1. Nombre: web-estatica-basica

    2. Configuración de máquina

      1. Serie: N1

      2. Tipo de máquina: g1-small (1 vCPU y 1.7 GB de RAM)

  2. Activar la casilla de verificación Desplegar una imagen de contenedor en esta instancia de VM

  3. En Imagen del contenedor introducir el nombre completo de la imagen subida a Docker Hub en el ejercicio anterior (p.e. ualmtorres/web-estatica-basica:v0)

    Note

    Al activar el despliegue de una imagen de contenedor en la instancia, la imagen del disco de arranque pasa a ser una imagen optimizada para contenedores.

  4. Activar la casilla de verificación Permitir el tráfico HTTP

  5. Crear la instancia.

  6. Adjuntar en la actividad disponible en Aula Virtual la dirección IP de la instancia creada.

Transcurridos unos instantes, la instancia será creada y se desplegará la imagen seleccionada. Google Cloud le asignará una IP externa. Al pulsarla se mostrará la web desplegada en el contenedor con la personalización de nuestro nombre y usuario en la UAL.

webEstaticaBasicaPersonalizada

2.4. Desplegar un contenedor en Google Cloud Run

Google Cloud Run es una plataforma gestionada para el despliegue y escalado de aplicaciones basadas en contenedores. Cloud Run aumenta o disminuye la infraestructura de forma elástica en función del tráfico en un modelo de pago por uso.

Subida de una imagen Docker a Google Container Registry

Google Cloud proporciona un registro de imágenes privado para cada proyecto. Cloud Run despliega imágenes que estén almacenadas en el registro de imágenes de un proyecto. Para ello, las imágenes deben estar etiquetadas de esta forma

gcr.io/<proyecto>/<imagen>:<etiqueta>

Cloud Shell incorpora el CLI de Docker. Entonces, usaremos Cloud Shell para subir la imagen que tenemos en Docker Hub. Previamente habrá que descargarla a Cloud Shell. Seguir estos pasos:

  1. Activar Cloud Shell (Habrá que autorizar a Cloud Shell para que pueda hacer llamadas a la API de Google Cloud).

  2. Descargar en Cloud Shell la imagen subida a Docker Hub en el primer ejercicio (p.e. docker pull ualmtorres/web-estatica-basica:v0)

  3. Etiquetar en Cloud Shell la imagen descargada de acuerdo con el criterio de Google Cloud Container Registry siguiendo esta sintaxis docker tag <imagen> <etiqueta-google-cloud-container-registry>. Por ejemplo:

    docker tag ualmtorres/web-estatica-basica:v0 gcr.io/<proyecto>/web-estatica-basica:v0
  4. Configurar el CLI de Docker para que use la herramienta de línea de comandos de gcloud a fin de autenticar las solicitudes a Container Registry. Esto permite que podamos usar el CLI de Docker asociado a Container Registry.

    gcloud auth configure-docker
  5. Subir la imagen al registro privado del proyecto con el id del proyecto adecuado

    docker push gcr.io/<proyecto>/web-estatica-basica:v0

Una vez que la imagen ya está en el proyecto podrá ser usada desde diferentes productos de Google Cloud. En este caso usaremos Cloud Run.

Sigue los pasos siguientes:

  1. Seleccionar Cloud Run en la sección Compute del menú de navegación.

  2. En la barra de herramientas superior selecciona Crear servicio.

  3. Dejar Cloud Run` como plataforma de despliegue, elegir una región e introducir un nombre de servicio (p.e. web-estatica-basica)

    CloudRun ConfiguracionServicio
  4. Pulsar Seleccionar para seleccionar la imagen subida al Container Registry.

    CloudRun ConfigurarImagen

    Aparecerá un cuadro de diálogo para que indiquemos la versión exacta de la imagen que queremos desplegar. Container Registry mantiene un control de versiones sobre las imágenes. Seleccionar la versión deseada.

    CloudRun SeleccionarImagen
  5. Desplegar Configuración avanzada e introducir el puerto del contenedor al que se envían las peticiones

    CloudRun SeleccionarPuerto

    Revisar los valores de capacidad de memoria, CPU, tiempos de espera y peticiones por contenedor. Estos valores son lo que se usarán para aumentar o reducir el número de instancias del contenedor en función de su carga. Prestar atención al número de instancias para el autoescalado.

  6. Ir al paso siguiente

  7. Configurar las peticiones HTTP sin autenticar. Es la opción para webs y APIs públicas.

    CloudRun ActivacionServicio
  8. Crear el servicio

  9. Adjuntar en la actividad disponible en Aula Virtual la URL del servicio creado.

El servicio ha quedado desplegado como un contenedor y está disponible en la URL indicada. Cloud Run muestra información de interés sobre el servicio creado incluyendo URL de la imagen, puertos, capacidad asignada, instancias para el autoescalado, y demás.

CloudRun Resultado

También proporciona gráficos con métricas de uso, registro de logs y otras opciones interesantes.

Note

Cada servicio de Cloud Run tiene un punto de conexión único y autoescala los contenedores desplegados. Además, a partir de dos imágenes desplegadas es posible gestionar el tráfico que se dirige a cada uno de los contenedores de cada versión.

La figura siguiente ilustra la aplicación desplegada.

webEstaticaBasicaPersonalizada

3. Detener los recursos iniciados

La instancia creada en Compute Engine y el contenedor desplegado en Cloud Run consumen crédito del cupón de la asignatura mientras estén activos. Haz una parada de los recursos no necesarios para no malgastar el crédito del cupón de la asignatura en Google Cloud. Se trata de detenerlos, no de eliminarlos. En otras actividades los volveremos a iniciar. Mientras tanto, deben quedar detenidos.