Docker Compose: WordPress + MariaDB + phpMyAdmin

Create a folder, save this as docker-compose.yml and change the passwords.

services:
  # Database (MariaDB)
  db:
    image: mariadb:lts
    container_name: wordpress_db
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: "change_me_root"   # use strong passwords
      MYSQL_DATABASE: "wordpress"
      MYSQL_USER: "wpuser"
      MYSQL_PASSWORD: "change_me"
    volumes:
      - /docker/wordpress/db_data:/var/lib/mysql   # database files on the host
    networks:
      - wp_network

  # WordPress
  wordpress:
    image: wordpress:latest
    container_name: wordpress_site
    restart: always
    depends_on:
      - db
    environment:
      WORDPRESS_DB_HOST: "db:3306"
      WORDPRESS_DB_USER: "wpuser"          # must match MYSQL_USER
      WORDPRESS_DB_PASSWORD: "change_me"   # must match MYSQL_PASSWORD
      WORDPRESS_DB_NAME: "wordpress"       # must match MYSQL_DATABASE
    volumes:
      - /docker/wordpress/wp_data:/var/www/html   # WordPress files on the host
    ports:
      - "8080:80"    # http://SERVER_IP:8080
    networks:
      - wp_network

  # phpMyAdmin
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: wp_phpmyadmin
    restart: always
    depends_on:
      - db
    environment:
      PMA_HOST: "db"
    ports:
      - "8081:80"    # http://SERVER_IP:8081
    networks:
      - wp_network

networks:
  wp_network:
    driver: bridge

Start it:

docker compose up -d
docker compose ps
  • WordPress: http://SERVER_IP:8080
  • phpMyAdmin: http://SERVER_IP:8081 (log in with the DB user or root)

Security: don't expose phpMyAdmin to the internet. For production put WordPress behind a reverse proxy with HTTPS.

Related: limit RAM per container.

Written by Daniel Ruiz Peláez, Systems & Infrastructure Engineer (Linux, VMware, Proxmox, Active Directory, networking and security). These are notes from real problems I have solved.

← Back to all posts