Introduction:
Looking for a lightning-fast, isolated, and reproducible WordPress setup? Docker Compose is the best way to run WordPress without bloated local server stacks like XAMPP or MAMP.
In this guide, you’ll learn:
Step-by-step Docker Compose WordPress setup (with code examples)
Best practices for security & performance
How to persist data (so you don’t lose your site)
Troubleshooting common Docker issues
Why Use Docker Compose for WordPress? (Local)
| Docker | XAMPP/MAMP | |
|---|---|---|
| Startup Time | 2-5 sec | 30-90 sec |
| Resource Usage | 300MB | 1GB+ |
| Multiple Projects | Easy | Painful |
🚀 Faster than traditional setups – No manual Apache/MySQL/PHP configs.
🔒 Isolated containers – No conflicts with other dev environments.
📦 Reproducible deployments – Same setup works on any machine.
⚡ Easy scaling – Need Redis or Nginx? Just add a service.
Prerequisites
Before starting, ensure you have:
- Docker installed (Download Docker)
- Docker Compose (included with Docker Desktop)
- Basic terminal knowledge (you’ll run a few commands)
Step 1: Create a docker-compose.yml File
Create a new directory for your project and add this optimized docker-compose.yml:
version: '3.8'
services:
db:
image: mysql:8.0
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: your_root_password
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
networks:
- wordpress_network
wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "8000:80"
volumes:
- wp_data:/var/www/html
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
networks:
- wordpress_network
volumes:
db_data:
wp_data:
networks:
wordpress_network:
driver: bridge
Key Optimizations in This Setup:
🔹 Persistent volumes (db_data, wp_data) – Prevents data loss on container restart.
🔹 Isolated network – Improves security by separating WordPress & MySQL.
🔹 Latest stable versions – Uses MySQL 8.0 and WordPress latest.
Step 2: Launch WordPress with Docker Compose
Run this command in your project directory:
docker-compose up -d
-druns containers in the background (detached mode).- Wait ~30 seconds for MySQL to initialize.
Access WordPress:
👉 Open http://localhost:8000 in your browser.