Docker - Setting WordPress



WordPress is a well-known open-source CMS used for developing websites and blogs. Deploying WordPress in different environments requires handling various dependencies like web servers, MySQL, PHP, and more. Using Docker makes this process easier by providing a standardized way of managing an environment where WordPress can run.

Prerequisites for Dockerizing WordPress

Before dockerizing WordPress, make sure you have these things −

  • Basic Knowledge of Docker − Having a basic understanding of Dockerfiles, containers, and images will make it easier to navigate through this guide.
  • WordPress Foundations − Foundational knowledge of MySQL databases is suggested for understanding WordPress communication.
  • Docker Installed − Ensure that Docker is installed and running on your system. Install it directly from the official Docker website.
  • Editor of Text − Examples of text editors that can be used to edit files include Notepad++, VSCode, and Sublime Text.
  • Command Line Interface (CLI) − You need to feel at ease executing commands using a command-line interface.

Dockerize WordPress using Dockerfile

Lets use the official WordPress image, which is production-ready. To customize the default WordPress image, you can make modifications if necessary.

This is an example of a simple Dockerfile to customize the WordPress file

FROM wordpress:latest

# Copy custom themes or plugins if necessary
COPY ./themes /var/www/html/wp-content/themes

# Expose port 80
EXPOSE 80

It adds custom themes or plugins and exposes port 80 for the WordPress service.

Creating WordPress Docker Image

After we have created a custom Dockerfile, we can build the image by using this command −

$ docker build -t custom-wordpress .

This will create a Docker image which will be named custom-wordpress.

Creating WordPress Docker Image

Running WordPress Docker Container

After we have created our Docker image, we can run a container associated with that image by using this command −

$ docker run -d -p 8000:80 --name my-wordpress custom-wordpress
Running WordPress Docker Container 1

You can visit https://localhost:8000 to access the WordPress dashboard.

Running WordPress Docker Container 2

Running WordPress on Docker Compose

Lets use Docker Compose for multi-container deployment of WordPress.

Step 1: Create a project directory

To keep everything organized, start by creating a directory for your WordPress project. This is where all Docker components and configuration files will be stored.

$ mkdir wordpress-docker
$ cd wordpress-docker

Step 2: Make a Docker Compose file

To specify the services needed for WordPress to function, we can use Docker Compose. Lets create a docker-compose.yml file in the project directory.

$ touch docker-compose.yml

Open this file in your text editor and add the following configuration −

version: "3.8"

services:
   db:
      image: mysql:5.7
      volumes:
         - db_data:/var/lib/mysql
      restart: always
      environment:
         MYSQL_ROOT_PASSWORD: rootpassword
         MYSQL_DATABASE: wordpress
         MYSQL_USER: wpuser
         MYSQL_PASSWORD: wppassword

   wordpress:
      depends_on:
         - db
      image: wordpress:latest
      ports:
         - "8000:80"
      restart: always
      environment:
         WORDPRESS_DB_HOST: db:3306
         WORDPRESS_DB_USER: wpuser
         WORDPRESS_DB_PASSWORD: wppassword
         WORDPRESS_DB_NAME: wordpress
      volumes:
         - ./wp-content:/var/www/html/wp-content

volumes:
   db_data:

This configuration defines two services −

  • WordPress − The primary WordPress program runs on port 8000 and uses the most recent image.
  • MySQL − WordPress's database, containing pre-configured login information.

Step 3: Launch Docker Compose Services

Let's test the setup by running WordPress and MySQL using Docker Compose. In your project directory, run the following command to launch WordPress and MySQL −

$ docker-compose up -d
Launch Docker Compose Services

Step 4: Go to the WordPress Dashboard

You can open your browser and access the WordPress installation when the services are up and running.

http://localhost:8000
Go to WordPress Dashboard

The WordPress installation page should now be visible, allowing you to continue setting up your website.

Setting up HTTPS with Docker

You can use Let's Encrypt to secure your WordPress website over HTTPS which is a standard procedure to provide data security functionalities. Free SSL certificates are available from Let's Encrypt, and automating the process is simple with Docker.

Step 1 − Add Nginx to the docker-compose.yml file as a reverse proxy.

Step 2 − Put the Let's Encrypt tool, Certbot, within a Nginx container.

Step 3 − Modify the nginx.conf file to add SSL directives in order to configure Nginx for SSL.

Step 4 − To automatically request an SSL certificate, use the Certbot command:

$ certbot --nginx -d yourdomain.com

Step 5 − Use cron to set up your Let's Encrypt certificate renewals to occur automatically.

Automating WordPress Backups Using Docker

WordPress needs backups, especially for file and database systems. Docker volumes and cron jobs can be used to automate these backup process.

Step 1 − Make a backup script file which backs up the database using mysqldump.

Step 2 − Install cron in the Dockerfile to run the backup script automatically.

Step 3 − Mount the volume where backups are kept and add the backup service in docker-compose.yml.

Step 4 − To run the backup at regular intervals, use this command:

$ crontab -e

Step 5 − Use cron jobs to plan backup schedules (ex:- weekly or monthly).

Using Docker and WordPress with a Custom Domain

For WordPress Docker to work with a custom domain (like www.abc.com), the DNS and domain configuration must be set up correctly.

Step 1 − Buying a domain name and configuring DNS settings to direct to your server's IP address.

Step 2 − Setting up the domain name for the Nginx reverse proxy that will be used in the server_name directive.

Step 3 − Configuring the WordPress settings in the wp-config.php file to activate the custom domain.

define('WP_HOME', 'https://abc.com');
define('WP_SITEURL', 'https://abc.com');

Step 4 − Use this command to restart Docker services −

$ docker-compose restart

Step 5 − Make sure the domain leads to your WordPress website correctly.

Adding Multiple-Databases for WordPress in Docker

Multiple databases may be needed for certain complex WordPress setups in order to improve organisation or performance of the system. With Docker, you can set up several MySQL databases.

Step 1 − In order to define more than one MySQL database service, edit the docker-compose.yml file.

Step 2 − Assign unique credentials to every database and mount unique volumes to ensure data longevity.

Step 3 − Incorporate changes to several database setups by updating the wp-config.php file −

define('DB_HOST', 'db1');
define('DB_NAME', 'exampledb1');

Step 4 − Each WordPress installation can be accessed by using a separate subdomain or a new path.

Conclusion

In this chapter, we have discussed how to successfully containerize WordPress using Docker and Docker Compose. This setup provides a consistent environment for WordPress applications to run on development as well as production servers. It becomes easy to scale as well.

FAQs on Dockerizing WordPress

In this section, we have collected a set of FAQs on dockerizing WordPress followed by their answers.

1. How do I set up a WordPress website in a Docker container?

You can set up a WordPress website in a Docker container by using the WordPress base image. This includes WordPress and the required dependencies (e.g., Apache, MySQL).

You can configure WordPress in the container using configuration files. Youll have to expose the necessary port before running the container.

2. How do I handle data persistence for WordPress in a Docker container?

You can use volumes to persist WordPress data. This includes database data, uploads, and other site content. You can mount volumes to directories within the container and configure WordPress to use these volumes. Please ensure proper data backup and restoration procedures.

3. How do I configure WordPress for HTTPS in a Docker container?

To configure WordPress for HTTPS, obtain an SSL/TLS certificate and install it on your web server (e.g., Apache). Configure WordPress to use the certificate and redirect HTTP traffic to HTTPS. Consider using tools like Let's Encrypt for automated certificate management.

Advertisements