Contenido
Montando Wordpres desde la terminal (CLI)
1) Requisitos previos
1.1 Verificar Docker instalado
docker --versiondocker ps
Si docker ps da error de permisos, añade tu usuario al grupo docker:
sudo usermod -aG docker $USER
newgrp docker
docker ps
2) Crear la red para comunicar contenedores
Vamos a crear una red llamada wp-net. Esto permite que WordPress encuentre a MySQL por nombre de contenedor.
docker network create wp-net
docker network ls
3) Crear volúmenes para persistencia
Necesitamos guardar:
- Datos de MySQL (bases de datos)
- Archivos de WordPress (plugins, temas, subidas)
docker volume create wp-db
docker volume create wp-html
docker volume ls
4) Levantar la base de datos (MySQL)
4.1 Ejecutar MySQL con variables de entorno
Crea un contenedor llamado wp-mysql:
docker run -d \
--name wp-mysql \
--network wp-net \
-v wp-db:/var/lib/mysql \
-e MYSQL_DATABASE=wordpress \
-e MYSQL_USER=wpuser \
-e MYSQL_PASSWORD=wp-pass-123 \
-e MYSQL_ROOT_PASSWORD=root-pass-123 \
mysql:8.0
4.2 Comprobar que está vivo
docker ps
docker logs wp-mysql --tail 30
Si ves mensajes de “ready for connections” (o similar), perfecto.
5) Levantar WordPress
5.1 Ejecutar WordPress apuntando a la DB
Creamos el contenedor wp-web y lo publicamos en el puerto 8080:
docker run -d \
--name wp-web \
--network wp-net \
-p 8080:80 \
-v wp-html:/var/www/html \
-e WORDPRESS_DB_HOST=wp-mysql:3306 \
-e WORDPRESS_DB_NAME=wordpress \
-e WORDPRESS_DB_USER=wpuser \
-e WORDPRESS_DB_PASSWORD=wp-pass-123 \
wordpress:latest
5.2 Verificar logs
docker logs wp-web --tail 30
6) Acceso por navegador y asistente de instalación
Abre:
http://localhost:8080
Completa el instalador:
- Idioma
- Título del sitio
- Usuario admin
- Password
7) Verificación técnica (para alumnos curiosos)
7.1 Ver la red y quién está conectado
docker network inspect wp-net
7.2 Ver volúmenes y dónde se usan
docker inspect wp-mysql | grep -i mount -n
docker inspect wp-web | grep -i mount -n
8) Parar, arrancar y reiniciar (operaciones típicas)
8.1 Parar todo
docker stop wp-web wp-mysql
8.2 Arrancar todo
docker start wp-mysql wp-web
8.3 Reiniciar WordPress
docker restart wp-web
9) Limpieza (sin perder datos)
Si borras contenedores, los datos siguen porque están en volúmenes.
9.1 Borrar contenedores
docker rm-f wp-web wp-mysql
9.2 Volver a crearlos usando los mismos volúmenes
Repite los docker run de los pasos 4 y 5 y verás que todo sigue.
10) Limpieza total (borrado completo)
⚠️ Esto elimina la web y la base de datos.
docker rm -f wp-web wp-mysql 2>/dev/null
docker volume rm wp-db wp-html 2>/dev/null
docker network rm wp-net 2>/dev/null
Anexo A: Diagnóstico de fallos típicos
A1) WordPress no conecta con MySQL
- Ver logs de WordPress:
docker logs wp-web --tail80
- Ver logs de MySQL:
docker logs wp-mysql --tail80
- Asegúrate de que
WORDPRESS_DB_HOST=wp-mysql:3306y que ambos están enwp-net.
A2) Puerto 8080 ocupado
Cambia el puerto:
docker rm -f wp-web
docker run -d \
--name wp-web \
--network wp-net \
-p 8081:80 \
-v wp-html:/var/www/html \
-e WORDPRESS_DB_HOST=wp-mysql:3306 \
-e WORDPRESS_DB_NAME=wordpress \
-e WORDPRESS_DB_USER=wpuser \
-e WORDPRESS_DB_PASSWORD=wp-pass-123 \
wordpress:latest
Y entra a http://localhost:8081.
A3) “Access denied” en MySQL
Suele ser contraseña/usuario mal puestos. Revisa variables. Si ya creaste la base con datos erróneos, recuerda que MySQL guarda usuarios en el volumen: o corriges dentro, o borras volumen (Anexo 10).

Montando Wordpres usando DokerFile
los Dockerfiles listos para hacer docker build directamente (sin Compose) y luego docker run.
Te dejo estructura + archivos y los comandos exactos.
wp-docker-build/
├─ mysql/
│ └─ Dockerfile
└─ wordpress/
└─ Dockerfile
mysql/Dockerfile (build directo)
Este Dockerfile crea una imagen de MySQL “lista”, y el usuario/DB/contraseñas las seguirás pasando en el docker run (porque eso es configuración de despliegue, no de imagen).
FROM mysql:8.0
# Opcional: configuración extra (descomenta si la necesitas)
# COPY my.cnf /etc/mysql/conf.d/my.cnf
EXPOSE 3306
Nota: MySQL oficial ya trae su entrypoint; aquí no necesitas más si vas a usar variables en
docker run.
wordpress/Dockerfile (build directo)
Imagen WordPress basada en la oficial. Si quieres meter ajustes PHP, te lo dejo ya incluido sin depender de un archivo externo (para que sea “build directo” de verdad).
FROM wordpress:latest
# Ajustes PHP típicos (subidas, memoria, tiempo)
RUN set -eux; \
{ \
echo "upload_max_filesize = 64M"; \
echo "post_max_size = 64M"; \
echo "memory_limit = 256M"; \
echo "max_execution_time = 120"; \
} > /usr/local/etc/php/conf.d/zzz-custom.ini
EXPOSE 80
Builds
Desde la carpeta wp-docker-build/:
docker build -t wp-mysql:local ./mysql
docker build -t wp-web:local ./wordpress
Run (igual que tu artículo, sin Compose)
Red + volúmenes
docker network create wp-net
docker volume create wp-db
docker volume create wp-html
MySQL
docker run -d \
--name wp-mysql \
--network wp-net \
-v wp-db:/var/lib/mysql \
-e MYSQL_DATABASE=wordpress \
-e MYSQL_USER=wpuser \
-e MYSQL_PASSWORD=wp-pass-123 \
-e MYSQL_ROOT_PASSWORD=root-pass-123 \
wp-mysql:local
WordPress
docker run -d \
--name wp-web \
--network wp-net \
-p 8080:80 \
-v wp-html:/var/www/html \
-e WORDPRESS_DB_HOST=wp-mysql:3306 \
-e WORDPRESS_DB_NAME=wordpress \
-e WORDPRESS_DB_USER=wpuser \
-e WORDPRESS_DB_PASSWORD=wp-pass-123 \
wp-web:local
Verificación rápida
docker ps
docker logs wp-mysql --tail 30
docker logs wp-web --tail 30
Y navega a:
http://localhost:8080
Montando Wordpres con Docker Compose
un docker-compose.yml (WordPress + MySQL) bien comentado para alumnos, con red y volúmenes, y usando las imágenes oficiales (lo más limpio para clase).
docker-compose.yml
version: "3.9"
services:
db:
image: mysql:8.0
container_name: wp-mysql
restart: unless-stopped
# Variables de entorno que MySQL usa para inicializar la BD
environment:
MYSQL_DATABASE: wordpress
MYSQL_USER: wpuser
MYSQL_PASSWORD: wp-pass-123
MYSQL_ROOT_PASSWORD: root-pass-123
# Volumen para que la base de datos NO se pierda al borrar el contenedor
volumes:
- wp-db:/var/lib/mysql
# Conectamos el servicio a una red privada de Docker
networks:
- wp-net
wordpress:
image: wordpress:latest
container_name: wp-web
restart: unless-stopped
# Mapeo de puertos: HOST:CONTENEDOR
# En el navegador: http://localhost:8080
ports:
- "8080:80"
# Variables de entorno para que WordPress sepa cómo conectar con MySQL
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: wpuser
WORDPRESS_DB_PASSWORD: wp-pass-123
# Volumen para que WordPress (wp-content, plugins, uploads…) se mantenga
volumes:
- wp-html:/var/www/html
# Dependencia: arranca db antes (no garantiza “lista”, pero sí orden)
depends_on:
- db
networks:
- wp-net
# Definimos volúmenes "named" (persisten aunque pares/borras contenedores)
volumes:
wp-db:
wp-html:
# Red interna para que los contenedores se vean por nombre (db, wordpress)
networks:
wp-net:
driver: bridge
Ahora
docker compose up -d
docker compose ps
docker compose logs -f
Parar y limpiar (sin borrar volúmenes)
docker compose down
Borrar TODO incluyendo datos (cuidado)
docker compose down -v














![[Reto] - Dockerizar app JEE (Tomcat 10 + MySQL) 4b9bc3d2-8253-4715-adf6-d5b1eed959d3](https://laaventuradeaprender.com/wp-content/uploads/2026/02/4b9bc3d2-8253-4715-adf6-d5b1eed959d3-150x150.png)