Configurar Docker para Laravel fácil y rápido

¿Has escucha sobre Docker? Si es así, quizás sepas que hoy día la mayoría de los desarrollos de aplicaciones web están siendo acopladas o dockerizadas. Esto significa que el uso de Docker, ha facilitado que las aplicaciones se ejecuten independiente del equipo, del sistema operativo o del ambiente de desarrollo que estemos utilizando.

Miremos el siguiente escenario, imaginemos que estamos desarrollando una aplicación en nuestro equipo que tiene como Sistema Operativo (SO) Linux, y para el desarrollo necesitamos las extensiones de Php, la cual instalaríamos de manera local en nuestro equipo.

Resulta, que tenemos un compañer@ de trabajo, el cual tiene una Mac como Sistema Operativo en su equipo, tenemos que compartir el mismo ambiente de desarrollo, ¿Que haríamos en este caso? Por supuesto, lo primero que se me ocurre es que debe de instalar todas las extensiones en su equipo con los diferentes tipo de comandos de instalación, en este proceso podríamos encontrarnos con algunos errores de instalación, error en las versiones usadas; esto dificultaría replicar el mismo ambiente de desarrollo que se utiliza en el equipo que tiene Linux. Imaginemos también, este mismo proceso para hacer que la aplicación se ejecute en un ambiente de producción, en un servidor de producción, seria repetir los mismo pasos sujetos a errores y todo lo que ello implica. ¡Terrible! ¿No?

Es aquí donde Docker entra en acción para ayudarnos, “Todas las dependencias que necesita para el desarrollo de nuestra aplicación se incluyen dentro de Docker”, sin importa el ambiente o sistema operativo en la que estemos trabajando, cualquiera puede ejecutar nuestra aplicación en cualquier lugar.

En esta publicación tratare de mostrar la forma más sencilla de poder ejecutar nuestras aplicaciones desarrolladas en Laravel usando Docker. Básicamente, lo primero que haremos es crear una imagen personalizada usando Dockerfile; y luego crearemos un docker-composer para hacer las cosas aun más sencillas. ¡Comencemos!

Un Dockerfile para Laravel:

Este procedimiento no debería convertirse en un problema, si estamos familiarizados con la sintaxis básica de Docker. Asumiré que tienes instalado un proyecto de Laravel localmente en tu equipo, sino puedes crearlo con la siguiente linea de comando:

composer create-project laravel/laravel --prefer-dist my_app_with_dockerfile

Ahora , entremos en el directorio creado del proyecto para crear el archivo con el nombre “Dockerfile”, el nombre comienza con mayuscula y no tiene extensión. En este archivo escribamos los siguiente:

1. FROM php:7.4-fpm-alpine
2.  RUN docker-php-ext-install pdo pdo_mysql sockets
3.  RUN curl -sS https://getcomposer.org/installer​ | php -- \
4.      --install-dir=/usr/local/bin --filename=composer
5.
6.  COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
7.
8.  WORKDIR /app
9.  COPY . .
10. RUN composer install

En la linea 1: Usaremos la imagen de Php en su versión 7. Siéntete libre de usar la versión que quieras, cambiándola aquí.

Desde la linea 2 – 7: es donde indicamos que se instalen todas la dependencia que se requieren para nuestro proyecto. En la linea 6: se ejecuta Composer para instalar tales dependencias.

En las 8 – 10: Cambiamos al directorio /app, y luego allí se copian todos los archivos locales de nuestro contenedor Docker, luego ejecutamos Composer install.

Ahora, el siguiente paso es construir (build) nuestro DockerFile, lo hacemos con la siguiente linea de comando:

docker build -t my_app_with_dockerfile .

Veamos el ID de la imagen de Docker que se ha construido para ello usaremos el comando:

docker image ls

Copiemos el Id de la imagen de la lista que se muestra, y ejecutemos la imagen con la siguiente linea de comando:

docker run -p 8000:8000 -d <imageID>

Los flags -p expone el puerto de nuestra máquina principal, dentro del puerto de Docker; y -d significa que la imagen se ejecuta en segundo plano.

Bien, una vez ejecutado la imagen necesitamos saber cual es el nombre o el id de nuestra aplicación, y eso lo podemos conocer usando el siguiente comando:

docker ps

Conociendo el Id o nombre del contenedor podemos accesar a su linea de comando usando este comando:

docker exec -it <container ID> sh

Una vez dentro de la línea de comando de nuestro contenedor , podremos ejecutar nuestro servidor como generalmente lo hacemos:

php artisan serve –host=0.0.0.0

¡Listo!, desde tu equipo local, podemos abrir localhost:8000 y veremos que nuestra aplicación se esta ejecutando desde el contenedor Docker.

Ejecutar la imagen con Docker Compose:

Muy bien, se ejecuto nuestro archivo Dockerfile, pero sin duda alguna son muchos comandos para ejecutar una imagen desde Docker. Para nuestra fortuna existe docker-compose que nos facilitará las cosas. Lo primero es crear un archivo llamado docker-compose.yml dentro de la raíz de nuestro proyecto, con las siguientes lineas:

1.  version: '3'
2.  services: 
3.     main:
4.         build: 
5.             context: .
6.             dockerfile: Dockerfile
7.         command: 'php artisan serve --host=0.0.0.0'
8.         volumes:
9.             - .:/app
10.         ports:
11.             - 8000:8000

Las líneas de comando que se escriben en el archivo son más o menos similares a lo que hicimos manualmente en la linea de comando para ejecutar nuestro contenedor anteriormente. Para ejecutar nuestra aplicación, fácilmente sólo debemos escribir la linea de comando:

docker-compose up

¡Listo! Nuestra aplicación esta ejecutándose desde el contenedor de docker usando docker-compose.

Pero de seguro, en este punto te estarás preguntando ¿Qué pasa con la Base de datos?, ¿Cómo podemos conectar nuestra aplicación a la Base de datos?, es una pregunta razonable pues todas las aplicaciones de una u otra manera necesitan de una Base de datos, afortunadamente no es difícil integrar nuestra aplicación dentro de una Base de Datos usando docker-compose. Si se necesita ejecutar otros servicios desde la linea de comandos como por ejemplo: artisan queue; esto lo podemos hacer dentro del docker-compose, como a continuación veremos, la ejecución de este servicio y la instalación de la Base de Datos.

1.  version: '3'
2.  services: 
3.      main:
4.          build: 
5.              context: .
6.              dockerfile: Dockerfile
7.          command: 'php artisan serve --host=0.0.0.0'
8.          volumes:
9.              - .:/app
10.         ports:
11.             - 8000:8000
12.         depends_on: 
13.             - db
14.
15.     queue:
16.         build: 
17.             context: .
18.             dockerfile: Dockerfile
19.         command: 'php artisan queue:work'
20.         depends_on: 
21.             - db        
22.
23.     db:
24.        platform: linux/x86_64
25.        image: mysql:8.0
26.        environment: 
27.             MYSQL_DATABASE: main
28.             MYSQL_USER: admin
29.             MYSQL_ROOT: admin
30.             MYSQL_PASSWORD: admin
31.             MYSQL_ROOT_PASSWORD: root
32.        volumes:
33.             - ./storage/dbdata:/var/lib/mysql
34.        ports:
35.             - 3306:3306

Lo que se hizo fue agregar un nuevo servicio para ejecutar queue y la Base de datos MySQL. En la linea 24, solo será necesaria esa linea si se usa como equipo el modelo M1 Mac.

Luego, lo único que se requerirá es ejecutar el comando:

docker-compose up

Y esto es todo, aprendimos como acoplar nuestra aplicación de Laravel de una forma fácil y rápida. Ya tenemos todo lo necesario para realizar nuestro desarrollo, sin importar el sistema operativo que este usando nuestro equipo de programadores o que tipo de maquina tenga.

Gracias por leerme, espero que haya sido útil este artículo para ti; deja tus comentarios al respecto que con gusto te responderé. Tengas un excelente día.

Abrir Chat
1
¿Cómo puedo ayudarte?👋🏻
Hola!
¿Cómo puedo ayudarte?