How To Run Wordpress In Docker

Written by theBenForce | Published 2021/04/14
Tech Story Tags: wordpress-plugin-development | docker | wordpress-plugin | php | tutorial | getting-started | docker-compose | web-monetization

TLDR How To Run Wordpress In Docker is easier than installing a PHP server and installing a plugin for WordPress. Since WordPress requires an instance of MySql running to store all of its data, we need to run two containers and connect them. We'll also want their data to persist if we stop the containers and restart them later. After a few minutes, you'll have WordPress running on your machine. Create a new folder called first- plugin then open it in WordPress' 'First plugin'via the TL;DR App

Setup Docker

I use a package manager called chocolatey to install/uninstall software when I can. If you have chocolatey setup, just run the following command to install docker:
choco install docker-desktop
Kitematic provides a visual interface to docker, so if you don't care much for the command line, I'd recommend installing that as well:
choco install docker-kitematic

Starting Docker

After the installation has finished, log out then back in. Run docker desktop by pressing the Windows key and searching for docker desktop. Once docker is ready, you'll see the icon in the system tray stop animating and a login window will appear.
The last step is to make sure Docker is working. Open a new PowerShell window and run the following command:
docker run hello-world
You should see output indicating that Docker is running.

Run WordPress in Docker

Now that Docker is set up on your system we can start WordPress. Since WordPress requires an instance of MySql running to store all of its data, we need to run two containers and connect them. We'll also want their data to persist if we stop the containers and restart them later. To accomplish this we create a docker-compose file, with volumes for each container.
Save the following file as 
docker-compose.yml
.
version: "3.3"

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    ports:
      - "3306:3306"
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    volumes:
      - wordpress:/var/www/html
    ports:
      - "8000:80"
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
volumes:
  db_data: {}
  wordpress: {}
Open a shell in the directory where you saved the docker-compose file and run 
docker-compose up -d
. After a few minutes, you'll have WordPress running on your machine.

Running WordPress Install

Before you can start writing plugins for WordPress, you need to run through the setup pages on your new server. Browse to http://localhost:8000/wp-admin/install.php and follow the instructions.

Creating a Plug-in

To create a plugin, you need to add a folder in WordPress' 
plugins
 directory. To find the root directory, open kitematic by clicking on the docker icon in the system tray and selecting 
kitematic
 from the menu.
Now select the WordPress container on the left side of the window, and click 
/var/www/html
 under the list of volumes on the right side.
This will open Windows Explorer with the 
html
 folder selected. Open it, then browse to 
wp-content->plugins
. Create a new folder called first-plugin then open it. Create a file called 
index.php
 inside the new folder and paste the following code into it:
<?php
/**
* Plugin Name: First Plugin
* Plugin URI: https://voiceify.io
* Description: Your very first plugin!
* Version: 1.0
* Author: Ben Force
* Author URI: https://twitter.com/theBenForce
* License: GPLv2 or later
**/
Save the file and browse to http://localhost:8000/wp-admin/plugins.php, you should your plugin in the list.
I hope this tutorial has given you a good starting point that's easier than installing a PHP server and MySQL. Let me know if you have any suggestions or questions.

Written by theBenForce | 4x AWS Certified Senior Software Engineer. I write about architecture, infrastructure as code, and automation.
Published by HackerNoon on 2021/04/14