Clase 10: Ejemplos de escenarios multicontenedor

Ejemplo 1: Despliegue de la aplicación guestbook

En este ejemplo vamos a desplegar con Docker Compose la aplicación guestbook.

En el fichero docker-compose.yaml vamos a definir el escenario. El comando docker compose se debe ejecutar en el directorio donde este ese fichero.

services:
  app:
    container_name: guestbook
    image: iesgn/guestbook
    restart: always
    environment:
      REDIS_SERVER: redis
    ports:
      - 8080:5000
  db:
    container_name: redis
    image: redis
    restart: always
    command: redis-server --appendonly yes
    volumes:
      - redis:/data
volumes:
  redis:

Veamos algunas observaciones:

  • Aunque ya sabemos que la variable de entorno REDIS_SERVER tiene el valor redis por defecto, la hemos indicado indicando el nombre del contenedor redis.
  • Podríamos haber usado también el nombre del servicio, es decir, REDIS_SERVER: db, ya que, como hemos comentado, la resolución se puede hacer usando el nombre del contenedor o el nombre del servicio.
  • Como vimos en el ejemplo del módulo 3, al crear el contenedor tenemos que ejecutar el comando redis-server --appendonly yes para que redis guarde la información de la base de datos en el directorio /datos. Para indicar el comando que hay que ejecutar al crear el contenedor usamos el parámetro command.
  • Por último indicar que hemos uso un volumen docker llamado redis para guardar la información de la base de datos (en el módulo3 usamos un bind mount).
  • Recuerda que para eliminar también el volumen usaremos docker compose down -v.

Ejercicio

  1. Crea el escenario, pero ten en cuenta que el nombre del contenedor de redis debe ser bd_redis.
  2. Comprueba que esta funcionando de forma adecuada.
  3. Elimina el escenario y el volumen asociado.

Ejemplo 2: Despliegue de la aplicación Temperaturas

En este ejemplo vamos a desplegar con Docker Compose la aplicación Temperaturas.

En este caso el fichero docker-compose.yaml puede tener esta forma:

services:
  frontend:
    container_name: temperaturas-frontend
    image: iesgn/temperaturas_frontend
    restart: always
    ports:
      - 8081:3000
    environment:
      TEMP_SERVER: temperaturas-backend:5000
    depends_on:
      - backend
  backend:
    container_name: temperaturas-backend
    image: iesgn/temperaturas_backend
    restart: always

Como hicimos en el ejemplo anterior, aunque no es necesario porque es valor por defecto, declaramos la variable de entorno TEMP_SERVER: temperaturas-backend:5000. Como indicábamos también, podríamos uso del nombre del servicio, de esta manera quedaría como TEMP_SERVER: backend:5000.

Ejercicio

  1. Crea el escenario, pero ten en cuenta que el nombre del contenedor de temperaturas_backend se debe llamar api-temp.
  2. Comprueba que esta funcionando de forma adecuada.
  3. Elimina el escenario y el volumen asociado.

Ejemplo 3: Despliegue de WordPress + Mariadb

En este ejemplo vamos a desplegar con Docker Compose la aplicación WordPress + MariaDB.

Utilizando volúmenes docker

Por ejemplo para la ejecución de wordpress persistente con volúmenes docker podríamos tener un fichero docker-compose.yaml con el siguiente contenido:

services:
  wordpress:
    container_name: servidor_wp
    image: wordpress
    restart: always
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: user_wp
      WORDPRESS_DB_PASSWORD: asdasd
      WORDPRESS_DB_NAME: bd_wp
    ports:
      - 80:80
    volumes:
      - wordpress_data:/var/www/html/wp-content
  db:
    container_name: servidor_mysql
    image: mariadb
    restart: always
    environment:
      MYSQL_DATABASE: bd_wp
      MYSQL_USER: user_wp
      MYSQL_PASSWORD: asdasd
      MYSQL_ROOT_PASSWORD: asdasd
    volumes:
      - mariadb_data:/var/lib/mysql
volumes:
    wordpress_data:
    mariadb_data:

Utilizando bind-mount

Por ejemplo para la ejecución de wordpress persistente con bind mount podríamos tener un fichero docker-compose.yaml con el siguiente contenido:

services:
  wordpress:
    container_name: servidor_wp
    image: wordpress
    restart: always
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: user_wp
      WORDPRESS_DB_PASSWORD: asdasd
      WORDPRESS_DB_NAME: bd_wp
    ports:
      - 80:80
    volumes:
      - ./wordpress:/var/www/html/wp-content
  db:
    container_name: servidor_mysql
    image: mariadb
    restart: always
    environment:
      MYSQL_DATABASE: bd_wp
      MYSQL_USER: user_wp
      MYSQL_PASSWORD: asdasd
      MYSQL_ROOT_PASSWORD: asdasd
    volumes:
      - ./mysql:/var/lib/mysql

Ejercicio

Vamos a desplegar la aplicación nextcloud con una base de datos (puedes elegir mariadb o PostgreSQL) utilizando la aplicación docker compose. Puedes coger cómo modelo el fichero docker-compose.yaml el que hemos estudiado para desplegar WordPress.

  1. Dentro de un directorio crea un fichero docker-compose.yaml para realizar el despliegue de nextcloud con una base de datos. Recuerda las variables de entorno y la persistencia de información.
  2. Levanta el escenario con docker compose.
  3. Muestra los contenedores con docker compose.
  4. Accede a la aplicación y comprueba que funciona.
  5. Comprueba el almacenamiento que has definido y que se ha creado una nueva red de tipo bridge.
  6. Borra el escenario con docker compose.