Multiple WordPress Sites with One Docker Compose File

docker-compose.yml

version: '3.8'

services:
  mysql:
    image: mysql:latest
    container_name: mysql_container
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: IL0ve<<Kil0w0tt>>
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql
      - ./mysql-init:/docker-entrypoint-initdb.d
    networks:
      - wp1_net
      - wp2_net

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin_container
    restart: always
    depends_on:
      - mysql
    environment:
      PMA_HOST: mysql
      MYSQL_ROOT_PASSWORD: IL0ve<<Kil0w0tt>>
    ports:
      - "8080:80"
    networks:
      - wp1_net     

  wordpress1:
    image: wordpress:latest
    container_name: wordpress1
    restart: always
    ports:
      - "8081:80"
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_NAME: wp1_db
      WORDPRESS_DB_USER: wp1_user
      WORDPRESS_DB_PASSWORD: wp1_pass
    volumes:
      - wordpress1_data:/var/www/html
    networks:
      - wp1_net

  wordpress2:
    image: wordpress:latest
    container_name: wordpress2
    restart: always
    ports:
      - "8082:80"
    environment:
      WORDPRESS_DB_HOST: mysql:3306
      WORDPRESS_DB_NAME: wp2_db
      WORDPRESS_DB_USER: wp2_user
      WORDPRESS_DB_PASSWORD: wp2_pass
    volumes:
      - wordpress2_data:/var/www/html
    networks:
      - wp2_net

volumes:
  mysql_data:
  wordpress1_data:
  wordpress2_data:
  
networks:
  wp1_net:
  wp2_net:

two-wordpress-by-single-docker-compose-file\mysql-init\init.sql

CREATE DATABASE IF NOT EXISTS wp1_db;
CREATE DATABASE IF NOT EXISTS wp2_db;

CREATE USER IF NOT EXISTS 'wp1_user'@'%' IDENTIFIED BY 'wp1_pass';
CREATE USER IF NOT EXISTS 'wp2_user'@'%' IDENTIFIED BY 'wp2_pass';

GRANT ALL PRIVILEGES ON wp1_db.* TO 'wp1_user'@'%';
GRANT ALL PRIVILEGES ON wp2_db.* TO 'wp2_user'@'%';

FLUSH PRIVILEGES;

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top