Skip to content

Docker ES

Technomantus Corvi edited this page Sep 5, 2026 · 1 revision

Docker

Un contenedor de app (PHP-FPM), Nginx como proxy inverso, y un contenedor de base de datos (MySQL/MariaDB o PostgreSQL — elige uno en docker-compose.yml). Apache queda excluido a propósito; .htaccess ya cubre despliegues en hosting compartido.

Arrancar el stack

docker compose up -d --build     # usa docker-compose.override.yml automáticamente si está presente
docker compose logs -f app
docker compose down               # parar
docker compose down -v            # parar + borrar volúmenes (borra la base de datos)

App disponible en http://localhost:8050 (ajusta el puerto en el servicio nginx si hace falta).

Crear la tabla dentro del contenedor

El contenedor db arranca vacío — crea las tablas manualmente la primera vez, dentro del contenedor:

# MySQL/MariaDB
docker compose exec db mysql -u root -p"${DB_ROOT_PASSWORD:-changeme}" "${DB_NAME:-tanuki_db}"

# PostgreSQL
docker compose exec db psql -U "${DB_USER:-tanuki}" -d "${DB_NAME:-tanuki_db}"

Luego ejecuta tus sentencias CREATE TABLE como siempre. Alternativa: monta un docker/init.sql en /docker-entrypoint-initdb.d/init.sql en el servicio db — se ejecuta automáticamente la primera vez que el volumen de datos está vacío.

.env para Docker

DB_HOST=db   # nombre del servicio, no "localhost" — los contenedores se resuelven entre sí por nombre

Builds de desarrollo vs. producción

docker-compose.override.yml se carga automáticamente junto a docker-compose.yml y añade PHPUnit + Xdebug (INSTALL_DEV_DEPS=true, APP_DEBUG=true). Para producción, exclúyelo:

docker compose -f docker-compose.yml up -d --build

Ejecutar PHPUnit dentro del contenedor

docker compose exec app ./vendor/bin/phpunit

Depurar con Xdebug dentro de Docker

A diferencia de Xdebug local, tu editor corre en el host, no en el contenedor — Xdebug necesita "salir" hacia fuera.

Ya configurado vía docker-compose.override.yml:

environment:
  - XDEBUG_MODE=debug
  - XDEBUG_CONFIG=client_host=host.docker.internal client_port=9003
extra_hosts:
  - "host.docker.internal:host-gateway"

launch.json necesita pathMappings aquí (a diferencia del desarrollo local), ya que la ruta del proyecto en el contenedor difiere de la de tu host:

{
    "configurations": [{
        "name": "Escuchar Xdebug",
        "type": "php", "request": "launch", "port": 9003,
        "pathMappings": { "/var/www/html": "${workspaceFolder}" }
    }]
}

Solución de problemas: docker compose exec app getent hosts host.docker.internal — si falla, en Docker Engine antiguo (Linux, sin Docker Desktop) usa la IP del puente docker0 (ip addr show docker0) como client_host en su lugar.

Clone this wiki locally