Configuración de un entorno local de Laravel con Docker
En los últimos años, Docker se ha convertido en una herramienta popular y de uso frecuente para implementar aplicaciones. Gracias Docker por simplificar la ejecución y la implementación de aplicaciones.
En este artículo, vamos a configurar Laravel en el entorno local con Docker usando la pila LEMP, por ejemplo, Nginx, MySQL, PHP y phpMyAdmin. En primer lugar, debe descargar e instalar Docker Desktop en su sistema. Docker Desktop funciona con su elección de herramientas de desarrollo e idiomas y le brinda acceso a una amplia biblioteca de imágenes y plantillas certificadas en Docker Hub. Usaremos Docker Compose para ejecutar aplicaciones Docker de varios contenedores. Todo lo que necesitamos es un solo archivo YAML
para configurar los servicios de la aplicación y luego con solo usar un solo comando podemos crear e iniciar todos los servicios en el archivo de configuración. Aquí está la estructura del diseño que tendremos.
Creación del archivo de composición de Docker
Para configurar el proyecto Laravel, necesitamos crear el archivo docker-compose.yml
en el directorio del proyecto que definirá nuestro servidor web (Nginx), base de datos (MySQL), servicios de aplicación (PHP) y servicio phpMyAdmin.
Añadiendo Nginx
# Web Server Service nginx: image: nginx:alpine container_name: nginx ports: - "8080:80" volumes: - ./src:/var/www - ./nginx/conf.d/:/etc/nginx/conf.d/ depends_on: - php - db networks: - laravel
En esta sección, intentamos crear un contenedor con el nombre nginx
debajo de laravel
network que inicializamos en la primera sección.
Este contenedor se construye a partir de la imagen nginx:alpine
y se expone en el puerto :8080
de nuestra máquina local. Bajo el item depends_on
, estamos agregando contenedores php
y db
, lo que significa que antes de ejecutar nginx
, Docker debería inicializar los contenedores php
y db
.
¿Qué pasa con los volúmenes en el servicio nginx?
- La carpeta local
/src
está vinculada a/var/www
en el contenedor. - El archivo
/nginx/conf.d/default.conf
que creamos está vinculado al archivo contenedor/etc/nginx/conf.d/default.conf
y nos permite modificar el servidor web nginx localmente.
Agregar MySQL
# Database Service db: # If you're using Mac with ARM architecture processor uncomment the below code # platform: linux/x86_64 image : mysql container_name : mysql restart: unless-stopped tty: true volumes: - ./mysql/data:/var/lib/mysql ports: - "3306:3306" environment: MYSQL_DATABASE: gateway MYSQL_USER: gateway MYSQL_PASSWORD: password MYSQL_ROOT_PASSWORD: password SERVICE_TAGS: dev SERVICE_NAME: mysql networks: - laravel
En esta sección, estamos creando un contenedor mysql
que se construye a partir de la imagen mysql
. El puerto predeterminado que utiliza MySQL es el puerto :3306
en nuestra máquina local. En esta configuración, definimos un volumen de datos denominado ./mysql/data
, que se adjunta al contenedorysql montado en el directorio /var/lib/mysql
. Este es el directorio predeterminado utilizado por MySQL para almacenar todos los archivos de datos.
Nota: Si está utilizando Mac con un procesador de arquitectura ARM, no olvide agregar la platform:linux/x86_64
en su configuración.
Agregar phpMyAdmin
#phpMyAdmin Service phpmyadmin: image: phpmyadmin/phpmyadmin restart: unless-stopped ports: - "3400:80" depends_on: - db networks: - laravel
Añadiendo PHP
# PHP Service php: build: context: ./php dockerfile: Dockerfile volumes: - ./src:/var/www ports: - "9000:9000" networks: - laravel
Debido a una dependencia que Laravel requiere, vamos a construir nuestra propia imagen a partir de un Dockerfile
local. Así que definimos el contexto como una carpeta php y definimos el dockerfile
en este directorio que Docker usará en el paso de construcción. Y también estamos definiendo un volumen al que la carpeta local /src
está vinculada a /var/www
en el contenedor.
Creando el Dockerfile
Ahora es el momento de crear el Dockerfile para especificar el entorno dentro de los contenedores individuales. En esta sección, solo necesitamos crear un Dockerfile para el contenedor php. Así que deberíamos crear un Dockerfile en el directorio php y agregarle el siguiente código. En el Dockerfile estamos especificando que queremos que nuestro contenedor php se construya a partir de la imagen php:8.0.3-fpm
PHP e instale pdo
y pdo_mysql
.
FROM php:8.0.3-fpm RUN docker-php-ext-install pdo pdo_mysql
Configuración de Nginx
Ahora deberíamos configurar Nginx en base al siguiente código que no necesita ninguna explicación adicional y se usa para la configuración de Nginx con la mayoría de las aplicaciones básicas de Laravel.
server { listen 80; index index.php index.htm index.html; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; server_name localhost; root /var/www/public; location / { try_files $uri $uri/ /index.php?$query_string; } location /index.php { try_files $uri = 404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }
Crear proyecto Laravel
Después de configurar nuestra pila, es hora de crear y agregar el proyecto Laravel a este directorio. Así que intente hacer un nuevo proyecto de Laravel con nombre src
usando Composer: composer create-project laravel/laravel src
Iniciando Docker
Por fin ha llegado el momento de iniciar la red Docker. Primero, navegue hasta el repositorio principal del proyecto y luego ejecute docker-compose build
para generar datos de imagen definidos. Puede tardar unos minutos en completarse. Después de finalizar el proceso de compilación, es hora de ejecutar docker-compose con este comando docker-compose up -d
.
Ejecutando su aplicación
Después de completar todos estos pasos con éxito, es hora de ver la página de inicio de su proyecto Laravel en el navegador en el puerto 8080 que ha definido en el servicio nginx en el archivo de configuración de composición de Docker.
Usando la interfaz de usuario phpMyAdmin
Usamos phpMyAdmin para manejar la administración de MySQL en la web. así que navegue hasta la dirección http://127.0.0.1:3400
en su navegador e ingrese el nombre y la contraseña del usuario que definió en el docker-compose.yml
. Aquí está, nuestra base de datos está aquí, puede administrar tablas y sus relaciones a través de la interfaz de usuario de phpMyAdmin.
¡Felicidades! Lo ha hecho.
Si no desea hacer todas las cosas usted mismo, simplemente puede clonar el siguiente repositorio y comenzar a ejecutar la ventana acoplable.