En este tutorial aprenderás cómo configurar un entorno de desarrollo local con Laravel y Docker, al hacer ésto puedes trabajar con proyectos que cuenten con distintas versiones de PHP, Laravel o dependencias sin crear conflictos con los recursos de tu sistema operativo. Al final del tutorial encontrás el repositorio del proyecto. Sin más manos a la obra.
Requisitos previos:
- Contar con Docker instalado y corriendo en el sistema operativo.
- Entorno de desarrollo como XAMPP, WAMPServer o Laragon.
- Composer instalado globalmente (Debe estar apuntando a la versión de PHP que necesita tu proyecto).
- Saber los requerimientos del servidor para la versión de Laravel que se necesita correr en el contenedor de Docker.
- Editor de código como VS Code.
1. Crear estructura del proyecto
Abre tu editor de código en la raíz de tu entorno de desarrollo y crea una carpeta con el nombre que le darás a tu proyecto, en mi caso se llamará «laravel-docker-pruebas«:
Dentro de la carpeta del proyecto crea las carpetas «mysql«, «nginx» y «src«:
En el mismo nivel de las 3 carpetas anteriores, crea el archivo «docker-compose.yml«, en este archivo se configuran los servicios que correrán en el contenedor:
Igual que en el archivo anterior, en el mismo nivel crea el archivo «Dockerfile»:
Dentro de la carpeta «nginx» crea el archivo «default.conf«:
2. Configurar archivo docker-compose.yml
Abre el archivo «docker-compose.yml«, en este archivo se configura los servicios que se usarán, la imagen, los puertos, volumes, red, etc., agrega la siguiente configuración:
version: '3.7' #se definen los contenedores services: nginx: image: nginx:stable-alpine container_name: nginx restart: always ports: - 8888:80 volumes: - ./src:/var/www/html - ./nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: - php - mysql networks: - laravel mysql: image: mysql:5.7 container_name: mysql restart: always environment: MYSQL_DATABASE: laravel-prueba MYSQL_USER: laravel MYSQL_PASSWORD: 123456 MYSQL_ROOT_PASSWORD: 123456 ports: - 3306:3306 volumes: - ./mysql:/var/lib/mysql networks: - laravel php: build: context: . dockerfile: Dockerfile container_name: php volumes: - ./src:/var/www/html ports: - 9000:80 networks: - laravel networks: laravel:
Como puedes ver para este proyecto solo se usará tres servicios: nginx, mysql y php, si tu proyecto requiere de más servicios como Mongo aquí es donde debes agregarlo.
3. Configurar archivo default.conf
Abre el archivo «nginx/default.conf«, en este archivo se hacen las configuraciones para que el servidor Nginx funcione correctamente, agrega las siguientes instrucciones:
server { listen 80; index index.php index.html; server_name localhost; error_log /var/log/nginx/error_log; access_log /var/log/nginx/access_log; root /var/www/html/public; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.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; } }
4. Configurar el archivo Dockerfile
Cuando Docker quiera construir la imagen de PHP irá a consultar el archivo Dockerfile ya que cuando configuraste los servicios en el archivo «docker-compose.yml» fue la instrucción que diste. En este archivo puedes configurar la versión de PHP que necesitas, en mi caso para este tutorial necesito instalar la versión 7.3 de PHP. Agrega las siguientes instrucciones:
FROM php:7.4-fpm-alpine RUN docker-php-ext-install pdo pdo_mysql
5. Crear o clonar proyecto Laravel
Desde la terminal de comandos ingresa a la carpeta «src«, en esta carpeta se instalará o clonará el proyecto Laravel, dependiendo de esto es el comando que se utilizará.
Si quieres crear un proyecto nuevo en Laravel con la versión más reciente:
composer create-project laravel/laravel .
Para clonar un proyecto en Laravel:
git clone https://github.com/diarioprogramador/laravel-pdf.git .
Para crear un proyecto con una versión específica de Laravel que para este proyecto usaré la versión 7 de Laravel:
composer create-project laravel/laravel . "7.*"
Iniciará la instalación del nuevo proyecto en Laravel:
6. Inicializar Docker y los servicios
Para Arrancar Docker y los servicios que configuraste desde la terminal de comandos colocate en la raíz de tu proyecto y escribe el comando:
docker-compose up -d
Iniciará la descarga de las imágenes:
Si todo va bien ya podrás ver la página de inicio de Laravel en tu navegador, ve a http://localhost:8888/:
Si quieres detener el contenedor desde la terminal de comandos escribe:
docker-compose down
7. Configurar archivo .env de Laravel
Desde el editor de textos abre el archivo «src/.env» y configura la conexión a la base de datos con la información que pusiste en el archivo «docker-compose.yml»:
Para correr las migraciones dentro del contenedor o usar cualquier comando de artisan se debe de seguir la nomenclatura, recuerda tener corriendo el contenedor:
docker-compose exec php php /var/www/html/artisan migrate
Las migraciones empezarán a correr, lo que indica que la conexión a la base de datos desde la red de Dockers se ha realizado correctamente:
8. Cómo usar los comandos de Docker en el proyecto
Para encender Docker y los servicios estando en la carpeta de tu proyecto desde la terminal de comandos escribe:
docker-compose up -d
Si tienes algún servicio que no esta funcionando y necesitas ver los log escribe en la terminal:
docker-compose logs -f
Para ver la lista de los contenedores:
docker-compose ps
Detener Docker y los servicios:
docker-compose down
Crear un Modelo, migración y controlador en Laravel:
docker-compose exec php php /var/www/html/artisan make:model Product -mcr
Conclusión
En este tutorial aprendiste cómo configurar un entorno local con Laravel y Docker paso a paso, lo que facilitará trabajar con diferentes versiones de PHP y dependencias de Laravel. Si este tutorial fue de ayuda, te invito a compartirlo en tus redes sociales para llegar a más personas y si tienes dudas o comentario déjalos en la caja de comentarios, estaré al pendiente de ellos. Te mando un saludo!
Repositorio GitHub del proyecto
Te puede interesar: Proyecto Laravel 9 y Docker en W10