IAW - Práctica 16

José Juan Sánchez Hernández

IES Celia Viñas (Almería) - 2019/2020

1 Práctica 16: «Dockerizar» una aplicación LAMP

En esta práctica tendremos que crear un archivo Dockerfile para crear una imagen Docker que contenga una aplicación web LAMP. Posteriormente deberá realizar la implantación del sitio web en Amazon Web Services (AWS) haciendo uso de contenedores Docker y de la herramienta Docker Compose.

1.1 Tareas a realizar

A continuación se describen muy brevemente algunas de las tareas que tendrá que realizar.

  1. Crear una máquina virtual Amazon EC2.

  2. Instalar y configurar Docker y Docker compose en la máquina virtual.

  3. Crear un archivo Dockerfile para crear una imagen que contenga el servicio de Apache con la siguiente aplicación web:

    • https://github.com/josejuansanchez/iaw-practica-lamp
  4. Crear un archivo docker-compose.yml para poder desplegar los servicios de Apache, MySQL y phpMyAdmin. Deberá utilizar las imágenes oficiales de Docker Hub.

  5. Busque cuál es la dirección IP pública de su instancia y compruebe que puede acceder a los servicios de Apache y phpMyAdmin desde una navegador web.

1.2 Requisitos del archivo Dockerfile

Tendrá que crear un archivo Dockerfile con los siguientes requisitos:

1.3 Requisitos del archivo docker-compose.yml

1.3.1 Servicio de MySQL

Deberá utilizar la última versión de la imagen de MySQL disponible en Docker Hub.

Importante: Para poder configurar la contraseña del usuario root mediante variables de entorno con la última versión de MySQL, deberá iniciar el servicio con el siguiente modificador --default-authentication-plugin=mysql_native_password

A continuación se muestra un ejemplo de cómo tendría que hacerlo en el archivo docker-compose.yml:

...
services:
    mysql:
        image: mysql
        command: --default-authentication-plugin=mysql_native_password

...

Importante: Tenga en cuenta que la imagen oficial de MySQL está preparada para permitirnos importar un script SQL con la base de datos inicial de nuestra aplicación. Para importar la base de datos de la aplicación web puede crear un volumen de tipo bind mount entre el directorio de su máquina local donde está el script SQL y el directorio /docker-entrypoint-initdb.d de la imagen oficial de MySQL. Esto hará que la primera vez que se instancie la base de datos leerá todos los archivos con extensión .sql que estén en este directorio y se ejecutarán.

A continuación se muestra un ejemplo de cómo tendría que hacerlo en el archivo docker-compose.yml:

...
    volumes:
      - mysql_data:/var/lib/mysql
      - ./sql:/docker-entrypoint-initdb.d 
...

1.3.2 Networks

Los servicios definidos en el archivo docker-compose.yml deberán usar dos redes:

En la red frontend-network estarán los servicios:

Y en la red backend-network sólo estará el servicio:

Sólo los servicios que están en la red frontend-network expondrán sus puertos en el host. Por lo tanto, el servicio de MySQL no deberá estar accesible desde el host.

A continuación se muestra un diagrama con las redes y los servicios que tiene que crear:

1.3.3 Docker restart policies

Deberá utilizar alguna política de reinicio para que los contenedores se reinicien cada vez que se detengan de forma inesperada.

1.3.4 Variables de entorno

Deberá hacer uso de un archivo .env para almacenar todas las variables de entorno que necesite en el archivo docker-compose.yml.

1.3.5 Orden en el que se inician los servicios

Deberá indicar el orden en el que se deben iniciar los servicios con la opción depends_on. Se recomienda la lectura del artículo Control startup and shutdown order in Compose

2 Referencias

3 Licencia

Licencia de Creative Commons
Esta página forma parte del curso Implantación de Aplicaciones Web por José Juan Sánchez y se distribuye bajo una licencia de Creative Commons Reconocimiento-NoComercial-CompartirIgual 4.0 Internacional.