Local WordPress Development With Docker
Tuesday, May 21, 2024
Every now and then I need to work on one of my friends' website. Usually these are built with WordPress and most of the time I just need to make some kind of customisation to a theme or plugin and setting up a staging environment often takes up too much of my time because I need to either wait for credentials or OTPs, etc. I also don't want to run software like MAMP or XAMMP on my laptop because I usually don't have loads of disk space available and it still involves a lot of manual steps.
I decided that the best way for me to spin up these temporary environments would be to use Docker and Docker Compose, since I already have both installed on my computer and all I would need to do is create a yaml file to get everything up and running within seconds.
If you want to do the same, make sure you have Docker and Docker compose installed and follow these steps:
- Create a directory. I'm going to call mine local_wordpress and it is inside of a folder called CodeRepos which is within my user directory.
- Create a file called docker-compose.yml with the following contents in the directory you just created:
version: "3.6" services: wordpress: image: wordpress:latest container_name: wordpress volumes: - ./wordpress:/var/www/html environment: - WORDPRESS_DB_NAME=wordpress - WORDPRESS_TABLE_PREFIX=wp_ - WORDPRESS_DB_HOST=db - WORDPRESS_DB_USER=root - WORDPRESS_DB_PASSWORD=password depends_on: - db - phpmyadmin restart: always ports: - 8080:80 db: image: mariadb:latest container_name: db volumes: - db_data:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=password - MYSQL_USER=root - MYSQL_PASSWORD=password - MYSQL_DATABASE=wordpress restart: always phpmyadmin: depends_on: - db image: phpmyadmin/phpmyadmin:latest container_name: phpmyadmin restart: always ports: - 8180:80 environment: PMA_HOST: db MYSQL_ROOT_PASSWORD: password volumes: db_data:
- Run the following commands to set the file permissions, make sure you use your computer's logged in username:
sudo chown -R username: wordpress
sudo chmod a+w wordpress
- Navigate to http://localhost:8080 and configure WordPress.
I'm using MacOS but this should also work on any Linux system or on Windows Subsystem for Linux.
