Creando un espacio de trabajo con docker para php

Muchas veces me ah tocado trabajar con distintas version de php y symfony y la mejor de forma de trabajar sin ensuciar tanto nuestro sistema conversiones de php es usando un enterno docker.

Creando el archivo Dockerfile.

FROM php:8.1-apache

# Instalar dependencias del sistema necesarias
RUN apt-get update && apt-get install -y \
    git \
    unzip \
    libicu-dev \
    libpng-dev \
    libjpeg-dev \
    libfreetype6-dev \
    libzip-dev \
    vim \
    wget \
    && rm -rf /var/lib/apt/lists/* # Limpia la caché de apt

# Configurar y instalar extensiones de PHP
RUN docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install -j$(nproc) pdo pdo_mysql mysqli intl gd zip \
    && docker-php-ext-enable pdo_mysql

# Habilitar el módulo de Apache rewrite
RUN a2enmod rewrite

# Instalar Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Instalar Symfony CLI
ADD https://get.symfony.com/cli/installer /usr/local/bin/symfony-installer
RUN bash /usr/local/bin/symfony-installer \
    && mv /root/.symfony5/bin/symfony /usr/local/bin/symfony

# Configurar el directorio de trabajo
WORKDIR /var/www/html

# Exponer el puerto 80
EXPOSE 80

Una vez creado nuestro dockerfile debemos crear nuestro docker-compose.yml que se encargara de crear la imagen con el archivo que hicimos anteriormente y ademas le indicaremos la base de datos que vamos a usar y la red que veamos a crear.

Archivo docker-compose.yml

version: '3.8'

services:
  symfony_app:
    build: .
    ports:
      - "80:80"
    volumes:
      - .:/var/www/html
    depends_on:
      - mysql
    networks:
      - symfony_network

  mysql:
    image: mysql:8.0
    platform: linux/arm64/v8
    environment:
      MYSQL_DATABASE: tu_nombre_de_la_base_de_datos
      MYSQL_USER: tu_user
      MYSQL_PASSWORD: tu_password
      MYSQL_ROOT_PASSWORD: tu_password_root
    volumes:
      - mysql_data:/var/lib/mysql
    ports:
      - "3306:3306"
    networks:
      - symfony_network

networks:
  symfony_network:
    name: symfonyapps
    driver: bridge

volumes:
  mysql_data:

Como podemos ver el primer contenedor que se crea es el de php, luego el de mysql y por ultimo la red.

Para saber que direccion ip se le asigno a nuestro contenedor debemos ejecutar el siguiente comando

docker inspect -f ' {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} ' nombre_contenedor

Esto nos devolvera lo siguiente, en mi caso esta ip.

172.24.0.2

Espero que esto les sea de utilidad.