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

Índice de Contenido
  1. ¿Por qué WordPress en contenedores?
  2. Requisitos previos
  3. Estructura del proyecto
  4. docker-compose.yml (servicios, redes y volúmenes)
  5. Dockerfile (PHP 8.0 + Apache + extensiones necesarias)
  6. php-file.ini (límite de memoria y tamaños de subida)
  7. Puesta en marcha
  8. Persistencia, copias y restauración
  9. Personalizaciones útiles
  10. Solución de problemas frecuentes
  11. Lecturas recomendadas (enlazadas)
  12. Referencias externas útiles
  13. Conclusión
  14. Comandos útiles 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.
Imagen 1. Diagrama de arquitectura de docker para wordpress

Requisitos previos

  1. Cuenta e instalación de Docker (Desktop o Engine). Funciona en Windows/macOS/Linux.
  2. Visual Studio Code (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

Estructura del proyecto

estructura docker para wordpress, archivos de creacion de contenedor
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.

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.

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.

; 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:
    docker compose pull
  3. Inicia los contenedores:
    docker compose up
  4. Verifica que todo esté sano:
    docker compose ps docker compose logs -f wordpress
  5. Instala WordPress en http://localhost:8081 (elige idioma, título, usuario y contraseña).
  6. Accede a phpMyAdmin en http://localhost:8080 (host: db, usuario: root, pass: test si dejaste lo de ejemplo).
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:
    docker exec -i mysql-wordpress mysqldump -uroot -ptest tutorialdb > backup.sql

  • Restaurar:
    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:
    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)

Referencias externas útiles

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.


Comandos útiles extra

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

Deja tu cometario!

Subir

Las cookies de este sitio web se usan para personalizar el contenido y los anuncios, ofrecer funciones de redes sociales y analizar el tráfico. Más información