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

- ¿Por qué WordPress en contenedores?
- Requisitos previos
- Estructura del proyecto
- docker-compose.yml (servicios, redes y volúmenes)
- Dockerfile (PHP 8.0 + Apache + extensiones necesarias)
- php-file.ini (límite de memoria y tamaños de subida)
- Puesta en marcha
- Persistencia, copias y restauración
- Personalizaciones útiles
- Solución de problemas frecuentes
- Lecturas recomendadas (enlazadas)
- Referencias externas útiles
- Conclusión
- 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.

Requisitos previos
- Cuenta e instalación de Docker (Desktop o Engine). Funciona en Windows/macOS/Linux.
- Visual Studio Code (opcional, pero muy útil).
- Clonar o crear un repositorio con tres piezas:
docker-compose.yml,Dockerfiley carpetaphp/con elphp.inipersonalizado. https://github.com/loshackerspc01/docker-files-wordpress
Estructura del proyecto

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 rewritephp-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 = /tmpRecomendación: cambiar max_execution_time de 5 a 300 para evitar timeouts al subir archivos grandes o correr tareas intensivas.
Puesta en marcha
- Abre una terminal en la carpeta del proyecto.
- Haz un pull para obtener las imágenes necesarias:
docker compose pull - Inicia los contenedores:
docker compose up - Verifica que todo esté sano:
docker compose ps docker compose logs -f wordpress - Instala WordPress en
http://localhost:8081(elige idioma, título, usuario y contraseña). - Accede a phpMyAdmin en
http://localhost:8080(host:db, usuario:root, pass:testsi dejaste lo de ejemplo).

Persistencia, copias y restauración
- Datos que persisten: base de datos en
db_data, archivos del sitio enwp_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-plugindel serviciodby recrea el contenedor. - Apple Silicon (ARM): usa
platform: linux/arm64/v8y elige imágenes compatibles. Compruébalo en Docker Hub.
Lecturas recomendadas (enlazadas)
- Más guías en mi sitio: búsqueda “WordPress” y búsqueda “Docker”.
- Relacionado (seguridad): eliminar virus de acceso directo en USB.
- Artículos técnicos en Informática Colectiva: optimización de video con Neat Video.
Referencias externas útiles
- Imagen oficial de WordPress en Docker Hub
- Imagen oficial de MySQL en Docker Hub
- Documentación de Docker Compose
- Directivas de PHP.ini (manual oficial)
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!