DEV Community

Cover image for How to set up a simple WordPress local environment with Docker
Jorge Araya
Jorge Araya

Posted on

How to set up a simple WordPress local environment with Docker

Docker is one of those amazing tools that everyone wants to get their hands on. In the last few years, it has become very popular, and if you are bored of the same local environment setups with xampp or wamp, this is a great option to learn about containers and improve your development environment.

First, you need to install Docker

To install docker desktop you can download it from the docker page. It's available for Windows, Linux, and Mac, check out the official page, select your system, and follow the installation steps, and then you'll be ready to go!

Create the project directory and files

You need to create a directory where your WordPress installation is going to be, in this directory you will have the necessary folders to place your plugins and themes.

Create a folder, I'm going to call it wp-local-docker, inside this folder you need to create a docker compose file called docker-compose.yml, this is the configuration file for our docker setup. In this file, we're going to add all the necessary services to have WordPress up and running.

In the docker-compose.yml file you need to specify the version and the services, the first service will be the database; in this service, we define the database image that docker is going to use, the volume, the ports where the service will be running, and the MySql environment variables.

The next service is going to be the WordPress service, where we need to define the image, the WordPress environment variables, and the volumes where the WordPress plugins and themes will be allocated, the entire file should look like this:

version: '3.9'
services:
  db:
    image: mysql:latest
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    ports:
      - "3306:3306"
    networks:
      - localwp

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
    volumes:
      - wpfiles:/var/www/html
      - ./wordpress/themes:/var/www/html/wp-content/themes
      - ./wordpress/plugins:/var/www/html/wp-content/plugins
    ports:
      - "8000:80"
    restart: on-failure
    networks:
      - localwp

volumes:
  db_data:
  wpfiles:

Enter fullscreen mode Exit fullscreen mode

*Make sure to use the correct identation to .yml files.

As you may see, you will need a directory to allocate all your themes and plugins, for this create a folder called wordpress and inside this folder create another two, one for plugins and one for themes.

At this point, the only thing left to do is open docker, and once it's running on your system, open the terminal and go to your project folder, in my case wp-local-docker/ and run docker-compose up, with this docker is going to create the containers and pull all the necessary thing to get the services (databse and wordpress) running. You can run docker-compose down to stop the containers.

And that's it! 🎉 You've now set up a Dockerized WordPress development environment. Enjoy the smooth and flexible experience of working with containers! Happy coding and have fun! 🚀

Here is a link to a github repository with a basic example.

Top comments (1)

Collapse
 
shahzebbbbb profile image
Shahzeb Ahmed

Excellent tutorial for setting up a local WordPress environment with Docker! It’s great to see Docker being used to simplify the development process. For anyone looking for a managed alternative for WordPress hosting, Cloudways provides a hassle-free experience with its optimized Docker containers. It’s perfect if you want the power of containers but prefer a fully managed environment with additional benefits like automatic backups, scaling, and enhanced security. Keep up the great work!