11. Probar configuración
Explicación General de los Posts
| Post | Título (Temática) | Contenido Clave |
| 9 | Crear archivo Dockerfile | Define la imagen personalizada para el servicio de aplicación (usualmente PHP/Laravel). Aquí se especifica la imagen base, se instalan extensiones de PHP, se copia el código y se define el comando de inicio (CMD). |
| 10 | Crear archivo docker-compose-parte 1 | Define los servicios que componen la aplicación (ej: app para PHP, web para Nginx, db para MySQL). Aquí se mapean puertos, se definen volúmenes para sincronizar el código y se establecen las redes para que los contenedores puedan comunicarse entre sí. |
| 11 | Probar configuración | Se usa el comando docker-compose up -d --build para construir las imágenes (si es necesario) y levantar los contenedores en segundo plano. Luego, se verifica que los contenedores estén activos y funcionando con docker ps. |
Cómo se Define el Nombre del Contenedor en Docker Compose
Tu pregunta es muy pertinente y toca un punto clave de la funcionalidad de Docker Compose.
La respuesta corta es: Sí, el nombre se define automáticamente por defecto.
Cuando ejecutas docker-compose up y no has definido un nombre explícito para el contenedor, Docker Compose genera automáticamente el nombre siguiendo una convención estándar:
Componentes del Nombre Automático:
Nombre del Proyecto (
[project_name]):Por defecto, Compose toma el nombre de la carpeta/directorio donde se encuentra el archivo
docker-compose.yml.En tu ejemplo, la carpeta se llama
laravel, por lo que el nombre del proyecto eslaravel.
Nombre del Servicio (
[service_name]):Es el nombre que le diste al servicio dentro del archivo
docker-compose.yml(por ejemplo:app,web,db).En tu ejemplo, el nombre del servicio es
app.
Número de Instancia (
[instance_number]):Generalmente es
1, ya que por defecto solo se levanta una instancia de cada servicio. Si se usaran escalas (varias instancias del mismo servicio), este número aumentaría (_2,_3, etc.).
Por lo tanto, la nota que viste es correcta: el nombre automático resultante es laravel_app_1.
¿Cómo se Define el Nombre Manualmente?
Si deseas que el contenedor tenga un nombre fijo y personalizado para que sea más fácil de recordar o referenciar, puedes usar la directiva container_name dentro de la definición del servicio en tu archivo docker-compose.yml:
version: '3.8'
services:
app:
build: .
# Aquí es donde defines el nombre manualmente:
container_name: mi_contenedor_laravel_fijo 👈
volumes:
- .:/var/www/html
# ... otras configuraciones ...
Si defines container_name, Docker Compose utilizará ese nombre exactamente, sin el prefijo del proyecto ni el número de instancia
Vamos a continuar con la orquestación y prueba de la configuración de Docker.
🧪 11. Probar Configuración e Instalación de Laravel
Este proceso se centra en levantar el contenedor de PHP que definimos en el Dockerfile, verificar que esté funcionando y luego utilizarlo para instalar el framework Laravel mediante Composer.
Paso 1: Levantar el Contenedor y Construir la Imagen
Desde el directorio ~/laravel (donde se encuentran Dockerfile y docker-compose.yml), ejecuta el comando para construir la imagen y levantar el servicio de la aplicación (app).
Ejecuta Docker Compose en modo detached (
-d) para que se ejecute en segundo plano:Bashdocker-compose up -d --buildProceso: Docker Compose lee el archivo docker-compose.yml, construye la imagen laravel-app usando el Dockerfile y descarga la imagen base php:7.4-fpm. Este paso puede tardar varios minutos la primera vez.
** (Referencia a Imagen 11. 1Probar configuración.png)
Verificar el Contenedor:
Una vez finalizada la descarga y construcción, verifica que el contenedor esté corriendo:
Bashdocker psDeberías ver un contenedor con el nombre asociado al servicio
app(ej.laravel_app_1) en estadoUp.
Paso 2: Acceder al Contenedor e Instalar Laravel
Ahora que el contenedor de PHP está en marcha, puedes acceder a él para ejecutar comandos como si estuvieras dentro de un servidor normal.
Acceder al Contenedor (Ejecución Interactiva):
Utiliza docker exec para ingresar de forma interactiva (-it) al contenedor, especificando el nombre del servicio (laravel_app_1) y el shell (/bin/bash):
Bashdocker exec -it laravel_app_1 /bin/bashNota: El nombre exacto del contenedor suele ser el nombre de la carpeta (laravel) + el nombre del servicio (app) + un número (1), por ejemplo: laravel_app_1.
** (Referencia a Imagen 11. 2 Probar configuración.png)
Verificar la Ubicación:
Confirma que estás en el directorio de trabajo correcto (/var/www):
Bashls# Deberías ver Dockerfile y docker-compose.yml, que son archivos compartidos por el volumen.** (Referencia a Imagen 11. 3 Probar configuración.png)
Instalar Laravel con Composer:
Ejecuta Composer (que instalamos en el Dockerfile) para crear un nuevo proyecto Laravel en un subdirectorio llamado application:
Bashcomposer create-project laravel/laravel --prefer-dist applicationProceso: Composer descargará el framework Laravel estable y todas sus dependencias.
** (Referencia a Imagen 11.4 Probar configuración.png)
Verificar Archivos de Entorno (.env):
Una vez finalizada la instalación de Laravel, se generan los archivos de configuración, incluida la clave de aplicación y las variables de entorno:
Bashcd applicationcat .envEsto muestra el contenido del archivo .env, que incluye la APP_KEY generada, la configuración de conexión a base de datos (mysql), y otras variables por defecto.
** (Referencia a Imagen 11.5 Probar configuración.png)
Paso 3: Limpiar el Directorio (Preparación para Montaje)
Dado que el código de Laravel se instaló en el subdirectorio application, y queremos que el código fuente esté directamente en el directorio raíz de nuestro proyecto (/var/www en el contenedor, o ~/laravel en el host), necesitamos mover los archivos y limpiar.
Mover Archivos de Laravel:
Copia todo el contenido del subdirectorio application al directorio principal (/var/www en el contenedor, que se mapea a ~/laravel en tu máquina local):
Bashcp -rT application/ /Comando
cp -rT: Copia el contenido de forma recursiva (r) sin tratarapplication/como un directorio de destino (T).
Verificar Directorio Raíz:
Sal al directorio superior y lista los archivos; ahora deberías ver la estructura de Laravel (artisan, public, etc.) junto a tus archivos de Docker:
Bashcd ..ls# Archivos: Dockerfile, docker-compose.yml, application (directorio), artisan, composer.json, etc.Eliminar el Subdirectorio application (Opcional):
Una vez que los archivos se han movido, puedes eliminar el directorio temporal application y sus contenidos:
Bashrm -rfv application/** (Referencia a Imagen 11.6 Probar configuración.png)
Conclusión: La aplicación Laravel ha sido instalada con éxito dentro del contenedor de PHP, y los archivos están correctamente montados en tu sistema local gracias a la configuración de volúmenes. Sin embargo, la aplicación aún no es accesible, ya que necesitamos un servidor web (Nginx) para servir las peticiones.
El siguiente paso es configurar Nginx y la base de datos MySQL en el archivo docker-compose.yml.
Probar Configuración Inicial de Laravel con Docker
Este tutorial te guiará a través de la creación del entorno de trabajo, la construcción del contenedor Docker para la aplicación, la creación de un proyecto Laravel dentro del contenedor, y finalmente, la organización de los archivos en tu máquina local.
1. Preparar el Directorio de Trabajo
Lo primero es establecer el directorio donde trabajarás.
Verifica tu ubicación actual y crea el directorio para tu proyecto.
Bashudemy@udemy:~$ pwd /home/udemy udemy@udemy:~$ mkdir laravel udemy@udemy:~$ cd laravel udemy@udemy:~/laravel$Verifica los archivos iniciales (
Dockerfile,application, ydocker-compose.yml) que ya deben estar en tu directorio.Bashudemy@udemy:~/laravel$ ls Dockerfile application docker-compose.yml
2. Construir y Ejecutar el Contenedor Docker
Ejecuta el comando docker-compose up -d para construir la imagen de Docker y ejecutar el contenedor en segundo plano.
Ejecuta Docker Compose: El comando va a construir tu imagen, que se basa en
PHP 7.4-FPM, y subirá el contenedor.Bashudemy@udemy:~/laravel$ docker-compose up -d # ... output de la descarga y construcción de la imagen ...Nota: La primera vez, la descarga de las imágenes base y la instalación de dependencias pueden tardar. Si el proceso se detiene (se "pega"), la solución es presionar Control + C para detenerlo y volver a ejecutar el comando
docker-compose up -d. Las imágenes que ya se descargaron no se volverán a descargar, acelerando el proceso.Verifica el estado del contenedor: Usa
docker pspara confirmar que el contenedor está funcionando (Statusdebe serUp).Bashudemy@udemy:~/laravel$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d719c54b309e laravel-app "docker-php-entrypoi" 6 minutes ago Up 6 minutes 9000/tcp laravel_app_1
3. Crear el Proyecto Laravel dentro del Contenedor
Ahora, entrarás al contenedor para usar Composer y crear la aplicación Laravel.
Accede al contenedor usando
docker exec.Bashudemy@udemy:~/laravel$ docker exec -it laravel_app_1 /bin/bash udemy@d719c54b309e:/var/www$Crea el proyecto Laravel en el directorio
./application.Bashudemy@d719c54b309e:/var/www$ composer create-project laravel/laravel --prefer-dist application creating a "laravel/laravel" project at "./application" # ... output de la instalación de dependencias ...Visualiza las variables de entorno (.env): El proceso también genera la clave de aplicación y el archivo
.envdentro de la nueva carpetaapplication.Bashudemy@d719c54b309e:/var/www$ cat application/.env # ... contenido del archivo .env, incluyendo APP_KEY ...Sal del contenedor para volver a tu máquina local.
Bashudemy@d719c54b309e:/var/www/application$ exit exit udemy@udemy:~/laravel$
4. Mover y Limpiar Archivos
La aplicación Laravel se creó en la carpeta application/ dentro del directorio compartido. Ahora moverás los archivos de la aplicación un nivel arriba y eliminarás la carpeta temporal.
Copia los archivos del proyecto Laravel (
application/) al directorio actual (.).Bashudemy@udemy:~/laravel$ cp -rT application/ .Verifica que los archivos se hayan copiado correctamente al directorio principal de
~/laravel.Bashudemy@udemy:~/laravel$ ls Dockerfile app artisan bootstrap composer.json composer.lock config database docker-compose.yml package.json phpunit.xml public README.md resources routes server.php storage tests vendor webpack.mix.js applicationElimina la carpeta
applicationque ya no necesitas.Bashudemy@udemy:~/laravel$ rm -rfv application/ removed directory 'application/'Confirma la estructura final de archivos.
Bashudemy@udemy:~/laravel$ ls Dockerfile app artisan bootstrap composer.json composer.lock config database docker-compose.yml package.json phpunit.xml public README.md resources routes server.php storage tests vendor webpack.mix.js
Ya has configurado correctamente el entorno, subido el contenedor y creado un proyecto Laravel. El siguiente paso sería configurar el servicio de servidor web (como Nginx) y MySQL, como se menciona en el contenido.
¿Te gustaría que te ayude a buscar cómo configurar Nginx o MySQL con Docker Compose para completar tu entorno Laravel?
============================
Propósito de la Carpeta application
El proceso que viste tiene dos objetivos principales:
Crear el proyecto Laravel dentro del contenedor usando Composer, ya que el contenedor es el único lugar con el entorno PHP y Composer configurados.
Asegurar que los archivos del proyecto existan en tu máquina local, para que puedas editarlos fácilmente con tu editor de código preferido (VS Code, Sublime Text, etc.).
💾 El Problema y la Solución con los Volúmenes
El motivo de este "doble movimiento" es la configuración del volumen compartido en Docker.
1. La Configuración del Volumen
En tu archivo docker-compose.yml, se define un volumen que mapea el directorio actual de tu máquina local (~/laravel/) con un directorio dentro del contenedor (/var/www/). Esto significa que lo que está en /var/www/ es visible y editable desde ~/laravel/ y viceversa.
Local (Host):
~/laravel/Contenedor:
/var/www/
2. El Problema al Crear el Proyecto
Cuando ejecutas el comando dentro del contenedor:
composer create-project laravel/laravel --prefer-dist application
Composer crea una nueva carpeta llamada application/ dentro del directorio de trabajo del contenedor (/var/www/).
Si hubieras intentado crear el proyecto directamente en el directorio actual (.), es decir, en /var/www/:
# ¡Esto puede causar un error en la instalación!
composer create-project laravel/laravel --prefer-dist .
... Composer habría intentado sobreescribir o mezclar los nuevos archivos de Laravel (como public/, app/, vendor/) con tus archivos de configuración de Docker ya existentes (Dockerfile, docker-compose.yml). Esto puede provocar fallos en la instalación y problemas de permisos, ya que Composer chocaría con archivos que ya existen en el volumen.
3. La Solución (Mover y Limpiar)
Para evitar este conflicto, se crea el proyecto en una subcarpeta segura (application/).
Crear el proyecto: Se usa
application/como un espacio temporal. Ahora tienes la estructura completa de Laravel en/var/www/application/(y, por lo tanto, también en~/laravel/application/en tu máquina local).Mover los archivos: Usando
cp -rT application/ ., mueves todos los archivos de Laravel a la raíz del proyecto (/var/www/, que es~/laravel/en tu máquina). De esta manera, los archivos de Laravel (artisan,app,public, etc.) quedan junto a tuDockerfileydocker-compose.yml.Eliminar la carpeta: Una vez que los archivos están donde deben estar, la carpeta
application/temporal se elimina conrm -rfv application/.
En resumen: Se usa la carpeta application/ como una "zona de aterrizaje" temporal para la instalación de Composer, garantizando que la instalación se complete sin interferir con los archivos de configuración de Docker en el directorio raíz. Luego, los archivos se mueven a la ubicación final y el temporal se limpia.
========================================
En la clase, se crea el proyecto dentro de la carpeta 'application' para mantener la estructura organizada y evitar conflictos con otros archivos o proyectos que puedan estar en la raíz del entorno de desarrollo. Esto permite que durante el desarrollo inicial el proyecto esté aislado y más fácil de gestionar.
Una vez que el proyecto está configurado y probado, se mueve a la raíz porque, al estar en esa ubicación, es más accesible y fácil de integrar con otras herramientas u otros componentes que pueden estar en el mismo nivel en el directorio.
El proceso de mover y eliminar los archivos de la carpeta 'application' después de la configuración inicial es una práctica común en el desarrollo para asegurar que solo los archivos necesarios estén en la ubicación final del proyecto. Esto ayuda a mantener la limpieza del código y la organización del proyecto.
Si tienes más dudas sobre este proceso o necesitas más detalles sobre alguna parte específica, no dudes en preguntar.
==================================================
Comentarios
Publicar un comentario