# WordPress en Docker (ARM y x86): guía completa con docker-compose, Dockerfile y PHP.ini

- Link: https://sergiocaballero.com/wordpress-con-docker-compose-dockerfile/
- Published: 2025-10-30T18:08:08+00:00
- Author: Sergio Caballero

Índice de contenido

 1.   [¿Por qué WordPress en contenedores?](https://sergiocaballero.com/wordpress-con-docker-compose-dockerfile/#por_que_wordpress_en_contenedores_)
 2.   [Requisitos previos](https://sergiocaballero.com/wordpress-con-docker-compose-dockerfile/#requisitos_previos)
 3.   [Estructura del proyecto](https://sergiocaballero.com/wordpress-con-docker-compose-dockerfile/#estructura_del_proyecto)
 4.   [docker-compose.yml (servicios, redes y volúmenes)](https://sergiocaballero.com/wordpress-con-docker-compose-dockerfile/#docker_composeyml_servicios_redes_y_volumenes_)
 5.   [Dockerfile (PHP 8.0 + Apache + extensiones necesarias)](https://sergiocaballero.com/wordpress-con-docker-compose-dockerfile/#dockerfile_php_80_apache_extensiones_necesarias_)
 6.   [php-file.ini (límite de memoria y tamaños de subida)](https://sergiocaballero.com/wordpress-con-docker-compose-dockerfile/#php_fileini_limite_de_memoria_y_tama_os_de_subida_)
 7.   [Puesta en marcha](https://sergiocaballero.com/wordpress-con-docker-compose-dockerfile/#puesta_en_marcha)
 8.   [Persistencia, copias y restauración](https://sergiocaballero.com/wordpress-con-docker-compose-dockerfile/#persistencia_copias_y_restauracion)
 9.   [Personalizaciones útiles](https://sergiocaballero.com/wordpress-con-docker-compose-dockerfile/#personalizaciones_utiles)
 10.  [Solución de problemas frecuentes](https://sergiocaballero.com/wordpress-con-docker-compose-dockerfile/#solucion_de_problemas_frecuentes)
 11.  [Lecturas recomendadas (enlazadas)](https://sergiocaballero.com/wordpress-con-docker-compose-dockerfile/#lecturas_recomendadas_enlazadas_)
 12.  [Referencias externas útiles](https://sergiocaballero.com/wordpress-con-docker-compose-dockerfile/#referencias_externas_utiles)
 13.  [Conclusión](https://sergiocaballero.com/wordpress-con-docker-compose-dockerfile/#conclusion)
 14.  [Comandos útiles extra](https://sergiocaballero.com/wordpress-con-docker-compose-dockerfile/#comandos_utiles_extra)

En este artículo te muestro, paso a paso, cómo ejecutar **WordPress en contenedores**
usando Docker en cualquier arquitectura (_ARM_ como Apple Silicon y _x86_ como Intel/
AMD). Es la versión mejorada del tutorial en video de **Sergio Caballero** y añade
detalles prácticos para que puedas **probar, desarrollar y hacer tareas pesadas**
sin depender del hosting.

## ¿Por qué WordPress en contenedores?

 * **Aislamiento y limpieza:** cada servicio (MySQL, PHP/Apache, phpMyAdmin) corre
   en su propio contenedor.
 * **Portabilidad:** funciona igual en Windows, macOS y Linux.
 * **Escalabilidad y pruebas:** sube/baja recursos sin afectar tu servidor de producción.
 * **Persistencia:** con _volúmenes_, los datos sobreviven reinicios o recreación
   de contenedores.

![](https://i0.wp.com/sergiocaballero.com/wp-content/uploads/2025/10/estructura-
de-contenedores-en-docker.png?resize=1536%2C1024&ssl=1)

Imagen 1. Diagrama de arquitectura de docker para wordpress

## Requisitos previos

 1. [Cuenta e instalación de Docker](https://www.docker.com/) (Desktop o Engine). Funciona
    en Windows/macOS/Linux.
 2. [Visual Studio Code](https://code.visualstudio.com/) (opcional, pero muy útil).
 3. Clonar o crear un repositorio con tres piezas: `docker-compose.yml`, `Dockerfile`
    y carpeta `php/` con el `php.ini` personalizado. [https://github.com/loshackerspc01/docker-files-wordpress](https://github.com/loshackerspc01/docker-files-wordpress)

## Estructura del proyecto

![estructura docker para wordpress, archivos de creacion de contenedor](https://
i0.wp.com/sergiocaballero.com/wp-content/uploads/2025/10/estructura-docker-para-
wordpress.png?resize=598%2C374&ssl=1)

Imagen 2. Estructura de archivos para la creación de contenedores

## docker-compose.yml (servicios, redes y volúmenes)

Abajo tienes un _compose_ de referencia con tres servicios: **db** (MySQL 5.7), **
phpmyadmin** y **wordpress**. Incluye _volúmenes_ para persistencia y una red interna.
Ajusta los puertos si tienes conflictos.

    ```wp-block-code
    services:
        db:
            image: mysql:5.7
            platform: linux/amd64 #MODIFICAR DEPENDIENDO EL TIPO DE ARQUITECTURA DE PROCESADOR, SI ESTAS USANDO X86 DEBES ELIMINAR
            container_name: mysql-wordpress
            ports: 
                - "3306:3306"
            command: --default-authentication-plugin=mysql_native_password
            environment:
                MYSQL_DATABASE: tutorialdb
                MYSQL_USER: wordpress
                MYSQL_PASSWORD: test
                MYSQL_ROOT_PASSWORD: test 
            volumes:
                - vol_db-test:/dump:/docker-entrypoint-initdb.d
                - vol_db-test:/conf:/etc/mysql/conf.d
                - vol_db-test:/var/lib/mysql
            networks:
                - wpsite

        phpmyadmin:
            image: phpmyadmin/phpmyadmin
            platform: linux/amd64 #MODIFICAR DEPENDIENDO EL TIPO DE ARQUITECTURA DE PROCESADOR, SI ESTAS USANDO X86 DEBES ELIMINAR
            container_name: phpadminwebui
            links: 
                - db:db
            ports:
                - 4282:80
            environment:
                MYSQL_USER: root
                MYSQL_ROOT_PASSWORD: test

            networks:
                - wpsite

        wordpress:
            depends_on:
                - db
            image: wordpress:latest
            ports:
                - '4283:80'
            restart: always
            volumes: 
              - vol_public-test:/var/www/html
              - ./php/php-file.ini:/usr/local/etc/php/conf.d/php.ini:ro   # ← añadido para php.ini
            environment:
                WORDPRESS_DB_HOST: mysql-wordpress
                WORDPRESS_DB_NAME: tutorialdb
                WORDPRESS_DB_USER: wordpress
                WORDPRESS_DB_PASSWORD: test
                WORDPRESS_CONFIG_EXTRA: |
                  define('WP_MEMORY_LIMIT', '4096M');
                  define('WP_MAX_MEMORY_LIMIT', '4096M');
            networks:
                - wpsite

    networks:
        wpsite:            
    volumes:
        vol_public-test:
        vol_db-test:
    ```

_Notas:_ 
— **Persistencia:** `db_data` guarda la base de datos; `wp_html` guarda
los archivos de WordPress (plugins, temas, uploads). — **Arquitecturas:** si estás
en _Apple Silicon_, algunas imágenes usan `platform: linux/arm64/v8`. Verifica compatibilidad
en Docker Hub. — **Memoria WordPress:** usamos `WORDPRESS_CONFIG_EXTRA` para fijar
memoria de WP desde el contenedor.

## Dockerfile (PHP 8.0 + Apache + extensiones necesarias)

Este Dockerfile de ejemplo instala extensiones típicas para WordPress (mysqli, mbstring,
zip, gd) y habilita `mod_rewrite` para enlaces permanentes.

    ```wp-block-code
    FROM php:8.0.0-apache
    ARG DEBIAN_FRONTEND=noninteractive
    RUN docker-php-ext-install mysqli
    # Include alternative DB driver
    # RUN docker-php-ext-install pdo
    # RUN docker-php-ext-install pdo_mysql
    RUN apt-get update \
        && apt-get install -y sendmail libpng-dev \
        && apt-get install -y libzip-dev \
        && apt-get install -y zlib1g-dev \
        && apt-get install -y libonig-dev \
        && rm -rf /var/lib/apt/lists/* \
        && docker-php-ext-install zip

    RUN docker-php-ext-install mbstring
    RUN docker-php-ext-install zip
    RUN docker-php-ext-install gd

    RUN a2enmod rewrite
    ```

## php-file.ini (límite de memoria y tamaños de subida)

Tu archivo personalizado eleva los límites para cargas y memoria, ideal para pruebas
pesadas. Si haces importaciones grandes, también conviene ampliar `max_execution_time`.

    ```wp-block-code
    ; php/zz-custom.ini
    file_uploads = On
    memory_limit = 6000M
    upload_max_filesize = 6000M ;establece en megabytes el tamaño para subida maxima de archivos en worpress
    post_max_size = 6000M     ; siempre >= upload_max_filesize
    max_execution_time = 300
    ; Si tu entorno lo requiere, fija el tmp:
    ; upload_tmp_dir = /tmp
    ```

**Recomendación:** cambiar `max_execution_time` de `5` a `300` para evitar timeouts
al subir archivos grandes o correr tareas intensivas.

## Puesta en marcha

 1.  Abre una terminal en la carpeta del proyecto.
 2.  Haz un pull para obtener las imágenes necesarias:
 3.      ```bash
         docker compose pull
         ```
     
 4.  Inicia los contenedores:
 5.      ```bash
         docker compose up
         ```
     
 6.  Verifica que todo esté sano:
 7.      ```bash
         docker compose ps docker compose logs -f wordpress
         ```
     
 8.  Instala WordPress en `http://localhost:8081` (elige idioma, título, usuario y 
     contraseña).
 9.  Accede a phpMyAdmin en `http://localhost:8080` (host: `db`, usuario: `root`, pass:`
     test` si dejaste lo de ejemplo).

![](https://i0.wp.com/sergiocaballero.com/wp-content/uploads/2025/10/instalacion-
de-wordpress-en-contenedores.png?resize=1024%2C1024&ssl=1)

Imagen 3. Instalación y configuración de wordpress

## Persistencia, copias y restauración

 * **Datos que persisten:** base de datos en `db_data`, archivos del sitio en `wp_html`.
 * **Backup rápido de la base:**
 *     ```bash
       docker exec -i mysql-wordpress mysqldump -uroot -ptest tutorialdb > backup.sql
       ```
   
 * **Restaurar:**
 *     ```bash
       docker exec -i mysql-wordpress mysql -uroot -ptest tutorialdb < backup.sql
       ```
   

## Personalizaciones útiles

 * **Tamaño de subida:** ya elevado en `php-file.ini` (_uploads gigantes_ sin límites
   típicos del hosting).
 * **Memoria de WordPress:** ajustada con `WORDPRESS_CONFIG_EXTRA`. Puedes subirla
   o bajarla según pruebas.
 * **Plugins pesados:** este entorno es ideal para probar _page builders_, compresores
   de imágenes, migradores, etc.

## Solución de problemas frecuentes

 * **Puertos ocupados (3306, 8080, 8081):** cambia los números a otros libres en`
   docker-compose.yml`. Ej.: `"3307:3306"`.
 * **Permisos en macOS/Linux:** si no puedes escribir en `wp_html`, corre:
 *     ```bash
       docker exec -it wp bash chown -R www-data:www-data /var/www/html
       ```
   
 * **MySQL plugin:** si ves errores de autenticación, verifica el `--default-authentication-
   plugin` del servicio `db` y recrea el contenedor.
 * **Apple Silicon (ARM):** usa `platform: linux/arm64/v8` y elige imágenes compatibles.
   Compruébalo en Docker Hub.

## Lecturas recomendadas (enlazadas)

 * Más guías en mi sitio: [búsqueda “WordPress”](https://sergiocaballero.com/?s=wordpress)
   y [búsqueda “Docker”](https://sergiocaballero.com/?s=docker).
 * Relacionado (seguridad): [eliminar virus de acceso directo en USB](https://sergiocaballero.com/?s=acceso+directo).
 * Artículos técnicos en Informática Colectiva: [optimización de video con Neat Video](https://informaticacolectiva.com/?s=neat+video).

## Referencias externas útiles

 * [Imagen oficial de WordPress en Docker Hub](https://hub.docker.com/_/wordpress)
 * [Imagen oficial de MySQL en Docker Hub](https://hub.docker.com/_/mysql)
 * [Documentación de Docker Compose](https://docs.docker.com/compose/)
 * [Directivas de PHP.ini (manual oficial)](https://www.php.net/manual/es/ini.list.php)

## Conclusión

Con este entorno en Docker podrás **aprender rápido**, **probar plugins/temas** 
sin riesgo y **empujar WordPress al límite** (subidas grandes, más memoria, tareas
pesadas). La combinación de _docker-compose_, un _Dockerfile_ con extensiones clave
y un _php.ini_ personalizado te da la flexibilidad que el hosting compartido suele
negar. Si vienes del video, aquí tienes la versión extendida, lista para que la 
pegues en tu WordPress y la adaptes a tu flujo de trabajo. Cuando quieras llevar
el sitio al hosting, revisa la [migración desde Docker con All-in-One WP Migration](https://sergiocaballero.com/migrar-wordpress-docker-hosting-all-in-one-wp-migration/).

---

## Comandos útiles extra

    ```wp-block-code
    # Apagar todo docker compose down
    Reconstruir la imagen de PHP/Apache tras editar el Dockerfile

    docker compose build --no-cache wordpress
    docker compose up -d

    Entrar al contenedor de WordPress

    docker exec -it wp bash

    Listar volúmenes

    docker volume ls
    ```

---

Te recomendamos el siguiente video tutorial que explica detalladamente la funcionalidad
de wordpress en contenedores de docker, asi como la arquitectura de ejecución y 
configuración de parametros.

### Comparte esto:

 * [  Facebook ](https://sergiocaballero.com/wordpress-con-docker-compose-dockerfile/?share=facebook)
 * [  X ](https://sergiocaballero.com/wordpress-con-docker-compose-dockerfile/?share=x)

### _Relacionado_
