Continuando con la serie de tutoriales de Docker Compose y basandonos en el último Asociar un Docker file para tener una imagen personalizada (Apache + PHP + Python) dentro de Docker Compose vamos a crear un servicio XAMPP o LAMPP que incluye Apache2, PHP y MySQL aprovechando contenedores Docker y uniéndolos mediante Docker Compose.
Utilizando el código de base, descargar código de Github
version: "3" #Indicamos la version docker compose que utilizamos #Y luego los servicios que vamos a implementar services: #Aquí indicamos el nombre que queramos mi_servicio_apache: #Indicamos la carpeta donde guardamos el Docker File build: context: ./Dockerfile #Indicamos el archivo dockerfile de este contenedor dockerfile: apache_file #Eliminamos esta línea que se sustituye por el dockerfile #image: php:7.0-apache container_name: apache-container volumes: #Carpeta donde guardaremos los archivos web : carpeta interna de Docker - ./www/:/var/www/html expose: #Puerto que queremos exponer a para poder compartirlo con otros contenedores - 80 ports: # Puerto de nuestra máquina : puerto dentro de Docker (siempre va a ser el 80 para apache o 443 para SSL) - 80:80
Vamos a añadir el contenedor de MySQL oficial mysql:5.7
contendor_mysql: image: mysql:5.7 container_name: mysql-container environment: MYSQL_DATABASE: db # Puedes utilizar el usuario que quieras, en el ejemplo usamos test MYSQL_USER: test # Contraseña para el usuario de MySQL MYSQL_PASSWORD: testp # Contraseña para root MYSQL_ROOT_PASSWORD: root volumes: # Montamos un volumen para MySQL para no perder los datos de bd - ./mysql:/var/lib/mysql expose: - 3306 ports: - 3306:3306
Creamos el contenedor exponiendo el puerto por defecto de MySQL 3306.
Creamos también un volumen que llamamos MySQL, es una carpeta dónde vamos a añadir nuestra base de datos inicial si la tenemos, este contenedor es capaz de cargarla automáticamente.
Ahora vamos a juntar los dos contenedores dentro del mismo fichero de Docker Compose, vamos a añadir MySQL primero.
version: "3" #Indicamos la version docker compose que utilizamos #Y luego los servicios que vamos a implementar services: contendor_mysql: image: mysql:5.7 container_name: mysql-container environment: MYSQL_DATABASE: db # Puedes utilizar el usuario que quieras, en el ejemplo usamos test MYSQL_USER: test # Contraseña para el usuario de MySQL MYSQL_PASSWORD: testp # Contraseña para root MYSQL_ROOT_PASSWORD: root volumes: # Montamos un volumen para MySQL para no perder los datos de bd - ./mysql:/var/lib/mysql expose: - 3306 ports: - 3306:3306 #Aquí indicamos el nombre que queramos mi_servicio_apache: #Indicamos la carpeta donde guardamos el Docker File build: context: ./Dockerfile #Indicamos el archivo dockerfile de este contenedor dockerfile: apache_file #Eliminamos esta línea que se sustituye por el dockerfile #image: php:7.0-apache container_name: apache-container volumes: #Carpeta donde guardaremos los archivos web : carpeta interna de Docker - ./www/:/var/www/html expose: #Puerto que queremos exponer a para poder compartirlo con otros contenedores - 80 ports: # Puerto de nuestra máquina : puerto dentro de Docker (siempre va a ser el 80 para apache o 443 para SSL) - 80:80
Una vez unidos los dos contenedores, nos queda hacer un link entre el contendor apache y MySQL, para ello vamos a añadir
links: - contendor_mysql
Y queda de la siguiente forma:
version: "3" #Indicamos la version docker compose que utilizamos #Y luego los servicios que vamos a implementar services: contendor_mysql: image: mysql:5.7 container_name: mysql-container environment: MYSQL_DATABASE: db # Puedes utilizar el usuario que quieras, en el ejemplo usamos test MYSQL_USER: test # Contraseña para el usuario de MySQL MYSQL_PASSWORD: testp # Contraseña para root MYSQL_ROOT_PASSWORD: root volumes: # Montamos un volumen para MySQL para no perder los datos de bd - ./mysql:/var/lib/mysql expose: - 3306 ports: - 3306:3306 #Aquí indicamos el nombre que queramos mi_servicio_apache: #Indicamos la carpeta donde guardamos el Docker File build: context: ./Dockerfile #Indicamos el archivo dockerfile de este contenedor dockerfile: apache_file #Eliminamos esta línea que se sustituye por el dockerfile #image: php:7.0-apache container_name: apache-container volumes: #Carpeta donde guardaremos los archivos web : carpeta interna de Docker - ./www/:/var/www/html expose: #Puerto que queremos exponer a para poder compartirlo con otros contenedores - 80 ports: # Puerto de nuestra máquina : puerto dentro de Docker (siempre va a ser el 80 para apache o 443 para SSL) - 80:80 links: - contendor_mysql
NOTA: ahora hemos creado un link con el contenedor de MySQL qué hemos llamado contenedor_mysql. Esto quiere decir que cuándo hagamos una conexión en PHP con MySQL tendremos que poner contenedor_mysql en vez de localhost (dónde se indica el host de nuestra conexión) es decir, quedaría de la siguiente forma:
$conn = new mysqli('contenedor_mysql', 'test', 'testp');
Ahora ya tenemos todo listo para desplegar.
La estructura de carpetas queda así:
Y ahora ya podemos desplegar nuestro XAMP Dockerizado.
sudo docker-compose up -d
Os dejo el código en GitHub en este enlace.
Si buscas libros de Segunda Mano te recomiendo www.quierolibros.com
Ingeniero en Informática, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.
falto la extension de pdo