Docker WordPress Dev Environment
This post documents setting up local development environments with Docker using the official WordPress Docker repository as a base image. Page two includes configurations for remote PHP debugging with Xdebug and VS Code.
Docker Compose
Aside from making the container configuration easier to understand, Docker Compose coordinates the creation, start and stop of the containers used together in the environment.
The environment has multiple sites served on various ports including at least one Wordpress site, a phpmyadmin site and mysql. For virtual host names, nginx-proxy is being used for containers with virtual host environment properties set in their docker compose data. Additionally, the mysql db container is accessible from the host at 127.0.0.1:8001
Create this docker compose yaml file in the projects root directory with the nginx-proxy configuration.
nginx-proxy.yml
version: "2"
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
Create this docker compose yaml file for the WordPress stack. This includes the linked MariaDB database and phpMyAdmin containers from their official repositories. Xdebug is not included in the official WordPress image on Docker Hub and will not be included in this configuration since it is using unmodified images. Adding xdebug and rebuilding the image is covered on page two.
wp.yml
version: "2"
services:
db:
image: mariadb
volumes:
- mysql:/var/lib/mysql
ports:
- "8001:3306"
environment:
- MYSQL_ROOT_PASSWORD=secret
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
ports:
- "8002:80"
links:
- db:mysql
environment:
- MYSQL_ROOT_PASSWORD=secret
- VIRTUAL_HOST=phpmyadmin.app
- VIRTUAL_PORT=8002
wp:
image: wordpress
volumes:
- ./wordpress:/var/www/html
ports:
- "8003:80"
links:
- db:mysql
environment:
- WORDPRESS_DB_PASSWORD=secret
- VIRTUAL_HOST=wordpress.dev
- VIRTUAL_PORT=8003
volumes:
mysql:
Update your systems hosts file.
hosts
# Docker (nginx-proxy)
127.0.0.1 phpmyadmin.app
127.0.0.1 wordpress.dev
Navigate to your project root in your CLI, such as Terminal on OS X, PowersShell or Cygwin on Windows.
Create the Containers
Create new nginx-proxy and Wordpress containers using the up
command with docker-compose
.
docker-compose -f nginx-proxy.yml -f wp.yml up
The
-f
flags specify the compose files to use. Multiple compose files are combined into a single configuration. This multiple file solution is for demonstration purposes. Here is a single file example that can be run without a file flag.
Stop Containers
Stop the containers without removing them.
docker-compose -f wp.yml -f nginx-proxy.yml stop
Start Containers
Start the stopped containers. Include the nginx-proxy.yml first so when the Wordpress containers are started the virtual hosts can be dynamically configured.
docker-compose -f nginx-proxy.yml -f wp.yml -f start
If you have restarted your computer and another process is using the nginx-proxy port, e.g., 80, you will need to halt that process before starting the container.
Shutdown Containers
Shutdown the environment using the down
command. If your data is not stored in a volume, it will not persist since this will remove the containers.
docker-compose -f wp.yml -f nginx-proxy.yml down
The next page covers adding Xdebug and configuring VS Code for remote debugging.