Cargando...

Apache, PHP, MySQL y PHPMyAdmin con Docker (LAMP)

Infraestructura LAMP con Docker Compose

​Si te has adentrado un poco en el mundo Docker, sabrás que Docker Compose es una utilidad de gran potencial, donde puedes crear configuraciones con una facilidad descomunal respecto a solamente programar un fichero Dockerfile. Te cuento que me ha sido difícil dejar los malos hábitos, en este caso, te lo expongo de la siguiente manera, si deseo ir más allá, adentrarme en la cultura DevOps, pues me será necesario iniciarme en diferentes  metodologías, herramientas y demás. El mal hábito del que te hablo se llama, XAMPP, WAMP, entre otros, así que decidí tirarme de lleno con Docker, que, en este caso, me lo estoy replanteando, pues se ha hecho enterprise y no lo sé, igual me instalo el Podman. A lo que quiero llegar, es que te profesionalices levantando un Stack LAMP (GNU/Linux, Apache, MySQL y PHP) por medio de contenedores. Ahora, perdona, pero haré de cuenta que ya tienes  instalado el docker y la extensión de Docker Compose, por lo que pasaré directo al grano.

Puedes ver el vídeo donde te explico todo desde acá, en el canal de Core Stack.

Descargar repositorio Docker LAMP

Te dejo el repositorio que te será necesario bajar para esta práctica, donde lo he preparado para ti con mucho cariño: Docker LAMP.

$ git clone https://github.com/jersonmartinez/docker-lamp.git
$ cd docker-lamp

Se muestra el árbol de directoios y ficheros.

$tree
.
├── Dockerfile
├── LICENSE
├── README.md
├── conf
├── docker-compose.yml
├── dump
│   └── myDb.sql
└── www
    └── index.php

Levanta Stack LAMP

Después de que accedas al repositorio, no hará falta hacer más nada que lanzar el Docker Compose.

$ docker-compose up -d

Creating network "docker-lamp_default" with the default driver
Creating docker-lamp_db_1 ... done
Creating docker-lamp_www_1        ... done
Creating docker-lamp_phpmyadmin_1 ... done

Por supuesto, como esta instalación la he hecho varias veces, ya no es necesario que baje las imágenes ni tenga que crear los volúmenes, así que tu salida será un poco más aflorada.


Verificando contenedores

Los contenedores están corriendo sin problemas, compartiendo la red por defecto, interconectados entre sí, se conocen y por lo tanto, pueden converger para presentar una solución.

$ docker-compose ps

          Name                        Command               State                 Ports
-----------------------------------------------------------------------------------------------------
docker-lamp_db_1           docker-entrypoint.sh --def ...   Up      0.0.0.0:3306->3306/tcp, 33060/tcp
docker-lamp_phpmyadmin_1   /docker-entrypoint.sh apac ...   Up      0.0.0.0:8000->80/tcp
docker-lamp_www_1          docker-php-entrypoint apac ...   Up      0.0.0.0:80->80/tcp


Web Server

✅ Se inicia el servidor web mediante la dirección local o loopback: http://127.0.0.1/


PHPMyAdmin

✅ Se inicia el sistema gráfico que gestiona las bases de datos con el motor MySQL mediante la dirección local o loopback: http://127.0.0.1:8000/ en el puerto correspondiente.


Correr un proyecto web PHP

He colocado un proyecto web, en este caso, este mismo sitio web. La ruta donde podrás poner tu sitio web será en el directorio www/. Por lo que, mi proyecto estará con el nombre www/Crashell/.


Explicación del código

No expondré código desde aquí, sino más bien, te dejaré un vídeo que he realizado para explicar el funcionamiento del Docker Compose, Dockerfile y cómo adaptar un proyecto web PHP a un Stack LAMP utilizando contenedores, precisamente haciendo referencia a este contenido.

He escrito en OpenWebinars un artículo con mayores detalles donde puedes orientarte sobre conceptos o algún detalle que no haya quedado claro. Igualmente, déjame por acá las dudas.

  • John Doe
    43 Sales$156,24 Totals
    62%
  • Rosy O'Dowell
    12 Leads$56,24 Totals
    32%

With supporting text below as a natural lead-in to additional content.

Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled.