Práctica: Implantación de aplicaciones web PHP en docker
Imaginemos que el equipo de desarrollo de nuestra empresa ha desarrollado una aplicación PHP que se llama BookMedik (https://github.com/evilnapsis/bookmedik).
Queremos crear una imagen Docker para implantar dicha aplicación.
Tenemos que tener en cuenta los siguientes aspectos:
Contenedor mariadb
- Es necesario que nuestra aplicación guarde su información en un contenedor docker mariadb.
- El script para generar la base de datos y los registros lo encuentras en el repositorio y se llama
schema.sql
. Debes crear un usuario con su contraseña en la base de datos. La base de datos se llamabookmedik
y se crea al ejecutar el script. - Ejecuta el contenedor mariadb y carga los datos del script
schema.sql
. Para más información. - El contenedor mariadb debe tener un volumen para guardar la base de datos.
Contenedor bookmedik
- Vamos a crear tres versiones de la imagen que nos permite implantar la aplicación PHP.
- La imagen debe crear las variables de entorno necesarias con datos de conexión por defecto.
- Al crear un contenedor a partir de estas imágenes se ejecutará un script bash que realizará las siguientes tareas:
- Modifique el fichero
core\controller\Database.php
para que lea las variables de entorno. Para obtener las variables de entorno en PHP usar la funcióngetenv
. Para más información. - Inicialice la base de datos con el fichero
schema.sql
. - Ejecute el servidor web.
- Modifique el fichero
- El contenedor que creas debe tener un volumen para guardar los logs del servidor web.
- La imagen la tienes que crear en tu entorno de desarrollo con el comando
docker build
.
Tarea 1: Creación de una imagen docker con una aplicación web desde una imagen base
- Vamos a crear una imagen que se llame
usuario/bookmedik:v1
. - Crea una imagen docker con la aplicación desde una imagen base de debian o ubuntu.
- Entrega la url del repositorio GitHub donde tengas los ficheros necesarios para hacer la construcción de la imagen.
- Entrega una captura de pantalla donde se vea la imagen en el registro de tu entorno de desarrollo.
Tarea 2: Despliegue en el entorno de desarrollo
- Crea un script con
docker-compose
que levante el escenario con los dos contenedores. - Recuerda que para acceder a la aplicación: Usuario: admin, contraseña: admin.
- Entrega la url del repositorio GitHub donde hayas añadido el fichero
docker-compose.yml
. - Entrega la instrucción para ver los dos contenedores del escenario funcionando.
- Entrega una captura de pantalla donde se vea funcionando la aplicación, una vez que te has logueado.
Tarea 3: Creación de una imagen docker con una aplicación web desde una imagen PHP
- Vamos a crear una imagen que se llame
usuario/bookmedik:v2
. - Realiza la imagen docker de la aplicación a partir de la imagen oficial PHP que encuentras en docker hub. Lee la documentación de la imagen para configurar una imagen con apache2 y php, además seguramente tengas que instalar alguna extensión de php.
- Modifica el fichero docker-compose.yml` para probar esta imagen.
- Entrega la url del repositorio GitHub donde tengas los ficheros necesarios para hacer la construcción de la imagen.
- Entrega una captura de pantalla donde se vea la imagen en el registro de tu entorno de desarrollo.
- Entrega la instrucción para ver los dos contenedores del escenario funcionando.
- Entrega una captura de pantalla donde se vea funcionando la aplicación, una vez que te has logueado.
Tarea 4: Ejecución de una aplicación PHP en docker con nginx (OPTATIVA)
- Vamos a crear una imagen que se llame
usuario/bookmedik:v3
. - En este caso queremos usar un contenedor que utilice nginx para servir la aplicación PHP. Puedes crear la imagen desde una imagen base debian o ubuntu o desde la imagen oficial de nginx.
- Vamos a crear otro contenedor que sirva php-fpm.
- Para que funcione de forma adecuada el php-fpm tiene que tener acceso al directorio donde se encuentra la aplicación.
- Y finalmente nuestro contenedor con la aplicación.
- Crea un script con docker compose que levante el escenario con los tres contenedores.
A lo mejor te puede ayudar el siguiente enlace: Dockerise your PHP application with Nginx and PHP7-FPM
- Entrega la url del repositorio GitHub donde tengas los ficheros necesarios para hacer la construcción de la imagen.
- Entrega una captura de pantalla donde se vea la imagen en el registro de tu entorno de desarrollo.
- Entrega la instrucción para ver los tres contenedores del escenario funcionando.
- Entrega una captura de pantalla donde se vea funcionando la aplicación, una vez que te has logueado.
Tarea 5: Puesta en producción de nuestra aplicación
- Elige una de las tres imágenes y súbela a Docker Hub.
- En tu VPS instala Docker y utilizando el
docker-compose.yml
correspondiente, crea un contenedor en ella de la aplicación. - Configura el nginx de tu VPS para que haga de proxy inverso y nos permita acceder a la aplicación con
https://bookmedik.tudominio.xxx
.
- Entrega una captura de pantalla de Docker Hub donde se vea tu imagen subida.
- Entrega la configuración de nginx.
- Entrega una captura de pantalla donde se vea funcionando la aplicación, una vez que te has logueado.
Tarea 6: Modificación de la aplicación
- En el entorno de desarrollo vamos a hacer una modificación de la aplicación. Por ejemplo modifica el fichero
core/app/view/login-view.php
y pon tu nombre en la línea<h4 class="title">Acceder a BookMedik</h4>
. - Vamos a trabajar con la primera imagen que construimos. Vuelve a crear la imagen con la etiqueta
v1_2
. - Cambia el
docker-compose
para probar el cambio. - Modifica la aplicación en producción.
- Entrega una captura de pantalla de Docker Hub donde se vea tu imagen subida.
- Entrega una captura de pantalla donde se vea funcionando la aplicación, una vez que te has logueado.