Running WordPress on Docker
July 14, 2020
WordPress runs on a variety of platforms, but last time I was developing I was using a MAMP stack - Mac Apache MySQL & PHP. It's been a while since I was working on WordPress sites and I no longer have MAMP installed on my machine, however I do have Docker running. Since I can create a LAMP stack (Linux... AMP) running on my Mac. This is a bit closer to what the site would be running on in the real world, plus I can deploy the Docker app to something like a DigitalOcean Droplet quickly.
Let's start by creating a folder for this to contain all the configs and data.
mkdir wordpress-docker && cd wordpress-docker
Then add a Docker Compose file, which is used to define and run multiple containers easily.
Next we need to configure the file itself, so in your favorite editor open up
docker-compose.yml. A few things are configured in the Docker Compose:
- The version of Docker Compose to use
- The services (containers) we are configuring. These consist of the database and the code.
- The image for each container to use
- What ports to open and bind to the host (your machine). This allows each container to speak to the other when needed
- An env file, where variables like database passwords can be stored so they can be exempt from being committed to source
- And in the case of the
wpcontainer a link to the database container so it can be accessed by name as
wordpresscontainer image uses this to connect.
version: "2" services: db: image: mariadb ports: - "8081:3306" env_file: - .env wp: image: wordpress volumes: - ./html/:/var/www/html ports: - "8080:80" env_file: - .env links: - db:mysql
.env files for the variables (You could also use 2
.env files, one for each container). Note that both passwords MUST be the same!
That's it for config, now it's time to start your Docker containers. The following command will start to download and build the images and then boot them up. Running it with
-d runs it in the background once
docker-compose up -d
Once it's booted up and is ready to go you will see something like this:
Starting wordpress-docker_db_1 ... done Starting wordpress-docker_wp_1 ... done
In your browser head over to
http://localhost:8080/ and you'll be welcomed by the initial setup screens.
If you take a look in your directory you'll have a
./html sub-directory that contains all your WordPress files just like a normal WordPress install.
Note: You can stop docker by running
docker compose down