Docker: Configuración de un entorno local de Laravel

docker

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.

docker


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 phpdb, lo que significa que antes de ejecutar nginx, Docker debería inicializar los contenedores phpdb.

¿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 pdopdo_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.

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.

docker


¡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.

https://github.com/hanieas/Docker-Laravel

Recent Post