화. 8월 5th, 2025

What You’ll Learn

This guide walks you through a practical docker-compose.yml setup for launching a WordPress site with a MySQL database. You’ll understand key Docker Compose concepts while building a fully functional stack.


Prerequisites

  1. Install Docker Engine
  2. Install Docker Compose
  3. Basic terminal familiarity (Linux/macOS/WSL)

Configuration Breakdown

version: '3.8'  # Compose file syntax version

services:
  # MySQL Database Service
  db:
    image: mysql:8.0  # Official MySQL image
    volumes:
      - db_data:/var/lib/mysql  # Persistent data storage
    environment:
      MYSQL_ROOT_PASSWORD: my-secret-pw  # Never use in production!
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wp_user
      MYSQL_PASSWORD: wp_password
    networks:
      - wp-network

  # WordPress Service
  wordpress:
    image: wordpress:php8.2-apache
    depends_on:
      - db  # Start DB first
    ports:
      - "8000:80"  # Host:Container port mapping
    volumes:
      - wp_data:/var/www/html  # Theme/plugin persistence
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wp_user
      WORDPRESS_DB_PASSWORD: wp_password
      WORDPRESS_DB_NAME: wordpress
    networks:
      - wp-network

# Infrastructure Definitions
volumes:
  db_data:  # Named volume for database
  wp_data:   # Named volume for WordPress

networks:
  wp-network:  # Private network for secure inter-service communication

Key Concepts Explained

  1. Services

    • db: MySQL container with preconfigured database/user
    • wordpress: Apache/PHP container with WordPress
  2. Volumes

    • db_data: Preserves database files after container restart
    • wp_data: Saves WordPress themes/plugins/uploads
      (Find volumes with docker volume ls)
  3. Networking

    • Private wp-network enables secure communication using service names (db, wordpress) as DNS hosts
  4. Environment Variables

    • Configure application settings (database credentials, ports)
    • Production Tip: Use .env files instead of hardcoding values

Launch Your Stack

  1. Save configuration as docker-compose.yml
  2. Start services:
    docker-compose up -d
  3. Verify running containers:
    docker-compose ps

Access WordPress at: http://localhost:8000


Management Commands

Command Description
docker-compose stop Stop containers gracefully
docker-compose down -v Destroy containers AND volumes
docker-compose logs -f db View database logs
docker-compose restart wordpress Restart WordPress service

Security Recommendations

  1. Always replace default credentials
  2. Use secrets management for production:
    environment:
     MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db_root_password
    secrets:
     - db_root_password
  3. Add resource limits to services:
    wordpress:
     deploy:
       resources:
         limits:
           cpus: '1.0'
           memory: 512M

Next Steps

  1. Add phpmyadmin service for database management
  2. Configure HTTPS with an Nginx reverse proxy
  3. Explore Docker Compose profiles for dev vs production setups

> Troubleshooting Tip: If WordPress shows “Error establishing database connection”, verify your db service is running with docker-compose logs db.

This setup demonstrates Docker Compose’s power for defining multi-container applications. Modify the environment variables and volume paths to match your specific requirements! 🐳

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다