Crea tu ambiente de desarrollo PHP & MySQL con Docker

17/08/2019 | Docker, MySQL, PHP | 7 comentarios

Crea tu ambiente de desarrollo PHP / MySQL en Docker de manera sencilla y en minutos.

Descargar archivos


Lo básico para cualquier desarrollador en PHP es tener un ambiente de desarrollo local con las mismas versiones del servidor de producción.

Existen herramientas como MAMP o XAMPP para este trabajo pero dependen del sistema operativo utilizado, sólo permiten una versión de los servicios esto genera problemas de compatibilidad.

Docker al rescate

La forma más sencilla de crear ambientes de desarrollo es con Docker, donde utilizamos el archivo docker-compose.yml para configurar las características (versiones, puertos, variables de entorno, etc) de los servicios que necesitamos.

Los contenedores se crean con el comando:

docker-compose up -d

Los contenedores se manejas con los comandos:


docker-compose start    # Iniciar los contenedores
docker-compose stop     # Detener los contenedores
docker-compose down     # Detener y eliminar los contenedores

Si aún no conoces acerca de Docker te recomiendo leer Simplifica el uso de contenedores con Docker Compose.

Implementando los Servicios

La implementación del ambiente de desarrollo consiste en crear un archivo docker-compose.yml donde vamos a configurar dos servicios:

  • mysql: será el servidor de base de datos MySQL.
  • php: será el servidor web con PHP

Servidor de Base de Datos

Creamos un servidor de base de datos con la imagen de MySQL 5.7, le asignamos el nombre docker-mysql y exponemos el puerto 3306.


version: '3'

services:
  mysql:
    image: mysql:5.6
    container_name: docker-mysql
    environment:
      MYSQL_DATABASE: database_name
      MYSQL_USER: my_username
      MYSQL_PASSWORD: my_password
      MYSQL_ROOT_PASSWORD: my_password
    ports:
      - "3306:3306"
    restart: always

Hemos usado el parámetro environment para configurar: base de datos, usuario y clave del servidor de base de datos.

Servidor PHP con Apache

Creamos un servidor web con la imagen de PHP 7.3 con Apache, le asignamos el nombre docker-php y exponemos el puerto 80.


version: '3'

services:
  web:
    image: php:7.3-apache
    container-name: docker-php
    ports:
      - "80:80"
    volumes:
      - ./www:/var/www/html

Hemos usado el parámetro volumes para exponer la carpeta de publicación de apache a la carpeta local www/.

Uniendo los servicios

El paso final es unir y enlazar estos servicios, donde agregamos un nuevo parámetro llamado links donde se permite el acceso desde el servicio web hacía el servicio mysql.


version: '3'

services:
  mysql:
    image: mysql:5.6
    container_name: docker-mysql
    environment:
      MYSQL_DATABASE: database_name
      MYSQL_USER: my_username
      MYSQL_PASSWORD: my_password
      MYSQL_ROOT_PASSWORD: my_password
    ports:
      - "3306:3306"
    restart: always
    
  web:
    image: php:7.3-apache
    container_name: docker-php
    ports:
      - "80:80"
    volumes:
      - ./www:/var/www/html
    links:
      - mysql

Ahora creamos el ambiente de desarrollo con el siguiente comando:

docker-compose up -d

Para acceder al servidor web utiliza la ruta http://localhost donde verás el contenido de la carpeta www/. Para acceder al servidor de base de datos puedes usar las credenciales creadas previamente y el dominio localhost si usas un cliente externo o mysql si te conectas desde el servidor web.

Mejoras finales

Es posible mejorar esta instalación agregando extensiones adicionales de PHP (mysql, pdo, pdo_mysql) o habilitando módulos extras de Apache (rewrite) o incluso usar un archivo de configuración global.

Compartimos un proyecto llamado Docker: PHP & MySQL para crear ambientes de desarrollo local, configurable y con buena documentación.

Referencias

Comentarios

MartinY 31/03/2020 10:23 am

Genial el articulo!

Conrado 28/04/2020 3:22 pm

Hola, puedo levantar el contenedor perfectamente pero al intentar acceder al intentar ingresar me dice que no poseo permisos. Sito:

Forbidden

You don't have permission to access this resource.
Apache/2.4.38 (Debian) Server at 192.168.1.10 Port 80

la carpeta del proyecto posee todos los permisos. Gracias saludos.

George 12/03/2021 1:02 pm

Hola, eso sucede porque el servidor no encuentra un archivo index.php o default.php, cuando visites la dirección finaliza con el nombre de archivo http://localhost/info.php

Carlos 06/06/2021 12:13 pm

Como puedo ejecutar phpmyadmin para trabajar gráficamente con MySQL

kodetop 26/06/2021 9:30 am

Hola @Carlos, para instalar PHPMyAdmin lo mas sencillo es:

* Descargar los archivos desde: https://www.phpmyadmin.net/downloads/
* Descomprimir los archivos y colocarlos en la carpeta: /www/phpmyadmin/
* Acceder a PHPMyAdmin mediante: http://localhost/phpmyadmin/

pablo 13/09/2022 7:33 am

Lo he instalado por fichero o por git pero no arranca el apache, en docker arranca perfectamente pero el servidor web no se inicializa

Abel 19/10/2022 7:20 pm

Step 4/4 : RUN a2enmod rewrite
—> Running in 218ca86244a3
/bin/sh: 1: a2enmod: not found
ERROR: Service ‘php’ failed to build: The command ‘/bin/sh -c a2enmod rewrite’ returned a non-zero code: 127
root@abelvera-Inspiron-5559:/home/abelvera/Escritorio/projects/prueba#

Envíar Comentario

En este sitio los comentarios se publican previa aprobación del equipo de Kodetop. Evita los comentarios ofensivos, obscenos o publicitarios. Si deseas publicar código fuente puedes hacerlo entre las etiquedas <pre></pre>