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.
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.
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.
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.
# Docker (nginx-proxy) 127.0.0.1 phpmyadmin.app 127.0.0.1 wordpress.dev
Create the Containers
Create new nginx-proxy and WordPress containers using the
up command with
docker-compose -f nginx-proxy.yml -f wp.yml up
-fflags 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 the containers without removing them.
docker-compose -f wp.yml -f nginx-proxy.yml stop
Start ContainersStart 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 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.