Taller 1: Almacenamiento y redes en Docker

Almacenamiento

Trabajaremos con volúmenes de Docker:

  1. Crea un volumen de Docker llamado miweb.
javiercruces@docker:~$ docker volume create miweb
miweb
  1. Crea un contenedor a partir de la imagen php:7.4-apache, montando el volumen creado en el directorio /var/www/html (que es el DocumentRoot del servidor proporcionado por esa imagen).
javiercruces@docker:~$ docker run -d --name my-apache-app -v miweb:/var/www/html -p 8080:80 php:7.4-apache
  1. Utiliza el comando docker cp para copiar un archivo index.html (que contenga tu nombre) en el directorio /var/www/html.
javiercruces@docker:~$ echo "<h1>Javier Cruces</h1>" > index.html
javiercruces@docker:~$ docker cp index.html my-apache-app:/var/www/html/
Successfully copied 2.05kB to my-apache-app:/var/www/html/
  1. Accede al contenedor desde el navegador para ver la información del archivo index.html.
javiercruces@docker:~$ curl http://localhost:8080
<h1>Javier Cruces</h1>
  1. Elimina el contenedor
javiercruces@docker:~$ docker rm -f my-apache-app
my-apache-app
  1. Crea un nuevo contenedor y monta el mismo volumen que en el ejercicio anterior.
javiercruces@docker:~$ docker run -d --name Taller1 -v miweb:/var/www/html -p 8080:80 php:7.4-apache
9edd4b2dd2499f923090ce6a246e44db136f162528a51f84ddb33659503bafd7
  1. Accede al contenedor desde el navegador para ver la información del archivo index.html. ¿Sigue existiendo el archivo?
javiercruces@docker:~$ curl http://localhost:8080
<h1>Javier Cruces</h1>

Trabajaremos con bind mounts:

  1. Crea un directorio en tu host y, dentro de él, un archivo index.html (que contenga tu nombre).
javiercruces@docker:~$ mkdir taller1
javiercruces@docker:~$ cp index.html taller1/
  1. Crea un contenedor a partir de la imagen php:7.4-apache, montando el directorio creado en /var/www/html mediante un bind mount.
javiercruces@docker:~$ docker run -d --name Taller1 -v /home/javiercruces/taller1/:/var/www/html -p 8080:80 php:7.4-apache
  1. Accede al contenedor desde el navegador para ver la información del archivo index.html.
javiercruces@docker:~$ curl http://localhost:8080
<h1>Javier Cruces</h1>
  1. Modifica el contenido del archivo index.html en tu host y comprueba que, al refrescar la página en el navegador, el contenido ha cambiado.
javiercruces@docker:~$ echo "<h1>Javier Cruces Doval</h1>" > taller1/index.html
javiercruces@docker:~$ curl http://localhost:8080
<h1>Javier Cruces Doval</h1>
  1. Elimina el contenedor
javiercruces@docker:~$ docker rm -f Taller1
Taller1
  1. Crea un nuevo contenedor y monta el mismo directorio que en el ejercicio anterior.
javiercruces@docker:~$ docker run -d --name Taller1 -v /home/javiercruces/taller1/:/var/www/html -p 8080:80 php:7.4-apache
  1. Accede al contenedor desde el navegador para ver la información del archivo index.html. ¿Se sigue viendo el mismo contenido?
javiercruces@docker:~$ curl http://localhost:8080
<h1>Javier Cruces Doval</h1>

Redes

Despliegue de Nextcloud + MariaDB

Vamos a desplegar la aplicación Nextcloud con una base de datos (Nota: para evitar errores, utiliza la imagen mariadb:10.5). Puedes basarte en el ejercicio realizado para desplegar WordPress. Para ello, sigue estos pasos:

  1. Crea una red de tipo bridge.
javiercruces@docker:~$ docker network create taller1          
a1f8faf5a100ad01013bc147e7c2a9577a5a4376d7e33c7d961c5aaca93000b0
  1. Crea el contenedor de la base de datos conectado a la red que has creado. La base de datos se debe configurar para crear una base de datos y un usuario. Además el contenedor debe utilizar almacenamiento (volúmenes o bind mount) para guardar la información. Puedes seguir la documentación de mariadb o la de PostgreSQL.
javiercruces@docker:~$ docker run -d --name wp_db \
    --network taller1 \
    -v db_vol:/var/lib/mysql \
    -e MYSQL_ROOT_PASSWORD=wordpress \
    -e MYSQL_DATABASE=wordpress \
    -e MYSQL_USER=wordpress \
    -e MYSQL_PASSWORD=wordpress \
    mariadb:10.5
  1. A continuación, siguiendo la documentación de la imagen Nextcloud, crea un contenedor conectado a la misma red e indica las variables necesarias para que se configure correctamente y realice la conexión a la base de datos. El contenedor también debe ser persistente mediante el uso de almacenamiento.
javiercruces@docker:~$ docker run -d --name nextcloud \
    --network taller1 \
    -e MYSQL_DATABASE=wordpress \
    -e MYSQL_USER=wordpress \
    -e MYSQL_PASSWORD=wordpress \
    -e MYSQL_HOST=wp_db \
    -p 8080:80 \
    nextcloud:latest
  1. Accede a la aplicación usando un navegador web.