11. Probar configuración

 Explicación General de los Posts

PostTítulo (Temática)Contenido Clave
9Crear archivo DockerfileDefine 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).
10Crear archivo docker-compose-parte 1Define 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í.
11Probar configuraciónSe 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:

$$\text{Nombre del Contenedor} = \text{[Nombre del Proyecto] \_ [Nombre del Servicio] \_ [Número de Instancia]}$$

Componentes del Nombre Automático:

  1. 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 es laravel.

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

  3. 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:

YAML
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).

  1. Ejecuta Docker Compose en modo detached (-d) para que se ejecute en segundo plano:

    Bash
    docker-compose up -d --build
    
    • Proceso: 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)

  2. Verificar el Contenedor:

    Una vez finalizada la descarga y construcción, verifica que el contenedor esté corriendo:

    Bash
    docker ps
    
    • Deberías ver un contenedor con el nombre asociado al servicio app (ej. laravel_app_1) en estado Up.


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.

  1. 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):

    Bash
    docker exec -it laravel_app_1 /bin/bash
    
    • Nota: 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)

  2. Verificar la Ubicación:

    Confirma que estás en el directorio de trabajo correcto (/var/www):

    Bash
    ls
    # Deberías ver Dockerfile y docker-compose.yml, que son archivos compartidos por el volumen.

    ** (Referencia a Imagen 11. 3 Probar configuración.png)

  3. Instalar Laravel con Composer:

    Ejecuta Composer (que instalamos en el Dockerfile) para crear un nuevo proyecto Laravel en un subdirectorio llamado application:

    Bash
    composer create-project laravel/laravel --prefer-dist application
    
    • Proceso: Composer descargará el framework Laravel estable y todas sus dependencias.

    ** (Referencia a Imagen 11.4 Probar configuración.png)

  4. 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:

    Bash
    cd application
    cat .env
    • Esto 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.

  1. 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):

    Bash
    cp -rT application/ /
    
    • Comando cp -rT: Copia el contenido de forma recursiva (r) sin tratar application/ como un directorio de destino (T).

  2. 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:

    Bash
    cd ..
    ls
    # Archivos: Dockerfile, docker-compose.yml, application (directorio), artisan, composer.json, etc.
  3. Eliminar el Subdirectorio application (Opcional):

    Una vez que los archivos se han movido, puedes eliminar el directorio temporal application y sus contenidos:

    Bash
    rm -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.

  1. Verifica tu ubicación actual y crea el directorio para tu proyecto.

    Bash
    udemy@udemy:~$ pwd
    /home/udemy
    udemy@udemy:~$ mkdir laravel
    udemy@udemy:~$ cd laravel
    udemy@udemy:~/laravel$ 
    
  2. Verifica los archivos iniciales (Dockerfile, application, y docker-compose.yml) que ya deben estar en tu directorio.

    Bash
    udemy@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.

  1. Ejecuta Docker Compose: El comando va a construir tu imagen, que se basa en PHP 7.4-FPM, y subirá el contenedor.

    Bash
    udemy@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.

  2. Verifica el estado del contenedor: Usa docker ps para confirmar que el contenedor está funcionando (Status debe ser Up).

    Bash
    udemy@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.

  1. Accede al contenedor usando docker exec.

    Bash
    udemy@udemy:~/laravel$ docker exec -it laravel_app_1 /bin/bash
    udemy@d719c54b309e:/var/www$ 
    
  2. Crea el proyecto Laravel en el directorio ./application.

    Bash
    udemy@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 ...
    
  3. Visualiza las variables de entorno (.env): El proceso también genera la clave de aplicación y el archivo .env dentro de la nueva carpeta application.

    Bash
    udemy@d719c54b309e:/var/www$ cat application/.env
    # ... contenido del archivo .env, incluyendo APP_KEY ...
    
  4. Sal del contenedor para volver a tu máquina local.

    Bash
    udemy@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.

  1. Copia los archivos del proyecto Laravel (application/) al directorio actual (.).

    Bash
    udemy@udemy:~/laravel$ cp -rT application/ .
    
  2. Verifica que los archivos se hayan copiado correctamente al directorio principal de ~/laravel.

    Bash
    udemy@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  application
    
  3. Elimina la carpeta application que ya no necesitas.

    Bash
    udemy@udemy:~/laravel$ rm -rfv application/
    removed directory 'application/'
    
  4. Confirma la estructura final de archivos.

    Bash
    udemy@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:

  1. Crear el proyecto Laravel dentro del contenedor usando Composer, ya que el contenedor es el único lugar con el entorno PHP y Composer configurados.

  2. 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:

Bash
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/:

Bash
# ¡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/).

  1. 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).

  2. 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 tu Dockerfile y docker-compose.yml.

  3. Eliminar la carpeta: Una vez que los archivos están donde deben estar, la carpeta application/ temporal se elimina con rm -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

Entradas más populares de este blog

ejercicios-Crear Carpeta y Archivo de Texto en Ubuntu

Instalar Docker en Ubuntu Server usando docker.io

Tutorial de Carpetas y Directorios en Ubuntu Linux