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)

DockerXAMPP/MAMP
Startup Time2-5 sec30-90 sec
Resource Usage300MB1GB+
Multiple ProjectsEasyPainful

🚀 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
  • -d runs containers in the background (detached mode).
  • Wait ~30 seconds for MySQL to initialize.

Access WordPress:
👉 Open http://localhost:8000 in your browser.