Repositorio git: https://github.com/FranJaviMN/Docker-php/tree/main/Tarea%202
Tarea 2: Ejecución de una aplicación web PHP en docker
-
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.
-
Crea esta imagen en docker hub
-
Crea un script con docker compose que levante el escenario con los dos contenedores.
Para ello vamos a seguir los mismo pasos que hemos seguido en el ejercicio 1, primero lo que vamos a hacer es irnos a la documentación de la imagen de php que tenemos en DockerHub
Una vez la hayamos leido vamos a generar, en primer lugar nuestra nuevo Dockerfile
Generando nueva imagen
Vamos a generar una imagen a partir de la imagen de php:7.4-apache para poder hacer lo que hicimos en el ejercicio 1 pero esta vez con otra imagen, por lo que vamos a generar la imagen con el siguiente fichero de Dockerfile:
FROM php:7.4-apache
RUN docker-php-ext-install pdo pdo_mysql mysqli json
RUN a2enmod rewrite
ENV DATABASE_USER=bookmedik
ENV DATABASE_PASSWORD=bookmedik
ENV DATABASE_HOST=db
EXPOSE 80
WORKDIR /var/www/html
COPY ./bookmedik /var/www/html
ADD script.sh /usr/local/bin/script.sh
RUN chmod +x /usr/local/bin/script.sh
CMD ["/usr/local/bin/script.sh"]
Debemos de tener en cuenta que ahora nuestro nuevo fichero de script.sh es el mismo que en el ejercicio 1, ya que vamos a desplegar la aplicación de bookmedik por lo que tenemos el siguiente fichero script.sh:
#!/bin/bash
sed -i 's/$this->user="root";/$this->user="'${DATABASE_USER}'";/g' /var/www/html/core/controller/Database.php
sed -i 's/$this->pass="";/$this->pass="'${DATABASE_PASSWORD}'";/g' /var/www/html/core/controller/Database.php
sed -i 's/$this->host="localhost";/$this->host="'${DATABASE_HOST}'";/g' /var/www/html/core/controller/Database.php
apache2ctl -D FOREGROUND
Una vez hecho solo debemos de generar la imagen con el comando build:
#### Generamos la imagen ####
francisco@debian10:~/Documentos/Implantacion/Docker/Docker-php/Tarea 2/Build$ docker build -t franjavimn/bookmedik-php:v1 .
#### Comprobamos que se haya creado ####
francisco@debian10:~/Documentos/Implantacion/Docker/Docker-php/Tarea 2/Build$ docker image list
REPOSITORY TAG IMAGE ID CREATED SIZE
franjavimn/bookmedik-php v1 c8d4ad15a095 5 hours ago 418MB
Creando el fichero docker-compose
Una vez hayamos creado la imagen, vamos a editar neustro fichero de docker-compose.yml y le vamos a añadir un nuevo contenedor, en este caso es donde vamos a tener nuestra aplicacion de bookmedik:
version: "3.1"
services:
db:
container_name: servidor_mysql-php
image: mariadb
restart: always
environment:
MYSQL_DATABASE: bookmedik
MYSQL_USER: bookmedik
MYSQL_PASSWORD: bookmedik
MYSQL_ROOT_PASSWORD: franciscojavier
volumes:
- /opt/mysql_bookmedik-php:/var/lib/mysql
bookmedik:
container_name: bookmedik-php
image: franjavimn/bookmedik-php:v1
restart: always
ports:
- 8083:80
volumes:
- /opt/bookmedik-php:/var/log/apache2
Una vez hecho esto, debemos de pasar el script de la creacion de las tablas a nuestro contenedor de mariadb, este fichero esta en el directorio que hemos generado tras clonar el repositorio y su nombre es schema.sql:
#### Levantamos el escenario ####
francisco@debian10:~/Documentos/Implantacion/Docker/Docker-php/Tarea 2/Deploy$ docker-compose up -d
Creating servidor_mysql-php ... done
Creating bookmedik-php ... done
#### Le pasamos el script ####
francisco@debian10:~/Documentos/Implantacion/Docker/Docker-php/Tarea 2$ cat ../Build/bookmedik/schema.sql | docker exec -i servidor_mysql-php /usr/bin/mysql -u root --password=franciscojavier bookmedik
Y ahora, si entramos en localhost:8083 veremos que nos sale nuestro login el cual es admin/admin y debe de salirnos algo como lo siguiente: