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.