Setting up WordPress development environment with Docker

One of the biggest challenges in web development is to have a stable development environment and assuring that the website works when deploying on different servers.

Docker helps us build isolated containers that give a this stable and predictable environment and saves many headaches when debugging our website. Thanks to the preconfigured images available on Docker Hub and the Docker compose it's a breeze to set up a development environment.

This post assumes that you already have Docker and Docker compose isntalled on your system. On Linux Docker Compose doesn't come installed with Docker so make sure you install it separately.

Create a directory to put the docker compose file into and then paste the following into the docker-compose file:

version: '3.3'

services:
   db:
     image: mysql:5.7
     # declaring the volumes so we have persistent data
     volumes:
       - wp_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: password
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     container_name: docker_wordpress_dev
     depends_on:
       - db
     # using the latest wordpress image
     # Docker will automatically look it up on Docker Hub
     image: wordpress:latest
     # binding the loopback port 8000 on the host to port 80 on the docker container
     ports:
       - "127.0.0.1:8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress
# we need to declare the volumes that we will use
volumes:
    wp_data:

After running the "docker-compose up -d" command you should be able to access WordPress on by entering localhost:8000 in your browser. This way you should should be able to bring up the installation page of WordPress:

After completing the setup steps you're ready to start working with WordPress.

If you'd like to access the source code you can the following command, which will bring you to the main folder with your WordPress installation:

docker exec -it docker_wordpress_dev bash

The database volume persists after the container is stopped. You can check that running the command "docker-compose stop" to stop the containers. Whenever you reinitialize the container you will be able to pick up where you left, so whatever changes you mad to your WordPress installation in Docker will persist. Also the database will persist in the wp_data volume.

Thanks to the persisting database volume, even if you remove the container you should be able to spin the WordPress site back up from the same image.