Local development with Bedrock

This how-to will guide you through creating a Bedrock WordPress project, containerising it and running it locally using docker compose.

Why starting with Bedrock?

roots/bedrock offers a standard structure and allows you to work with composer, thus providing better dependency management and enabling some software engineering good practices. You can install/uninstall plugins and themes via composer, use its' autoload feature and other goodies.


  • composer, follow the guides to install composer on Windows or Linux / Unix / macOS
  • docker-compose, install guides for Linux, Windows and Mac available here

Bootstrap the project

First let’s create a project via composer starting from roots/bedrock .

$ composer create-project roots/bedrock my-site
$ cd my-site

Then we need to install the Bitpoke Stack must-use plugin for WordPress.

$ composer require bitpoke/stack-mu-plugin

In order to use the external object cache, we need to place it into our WP_CONTENT_DIR/object-cache.php.

$ ln -sf mu-plugins/stack-mu-plugin/src/object-cache.php web/app/object-cache.php

Create the Dockerfile

Bitpoke Stack provides a base image for building and developing WordPress sites using Bedrock. docker.io/bitpoke/wordpress-runtime:bedrock-build is used as a builder image and is optimized for build speed. docker.io/bitpoke/wordpress-runtime:bedrock it’s optimized for running Bedrock enabled sites.

The Dockerfile is as simple as:

FROM docker.io/bitpoke/wordpress-runtime:bedrock-build as builder
FROM docker.io/bitpoke/wordpress:bedrock
COPY --from=builder --chown=www-data:www-data /app /app

Run using docker-compose

This docker-compose.yaml is a good starting point for local development using docker.

version: "3.3"

      - db
      - memcached
    image: docker.io/bitpoke/wordpress-runtime:bedrock
      - ./:/app
      - "8080:8080"
    restart: always
      DB_HOST: db:3306
      DB_USER: wordpress
      DB_PASSWORD: not-so-secure
      DB_NAME: wordpress
      MEMCACHED_HOST: memcached:11211
      WP_HOME: http://localhost:8080
      WP_SITEURL: http://localhost:8080/wp
      WP_ENV: development

    image: percona:5.7
      - db_data:/var/lib/mysql
    restart: always
      MYSQL_ROOT_PASSWORD: not-so-secure
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: not-so-secure

    image: memcached:1.5

  db_data: {}

To boot up WordPress and MySQL server run:

docker-compose up -d

Installing a plugin (optional)

To install a plugin you can just:

docker-compose run wordpress composer require wpackagist-plugin/debug-bar

This site should be available at http://localhost:8080.

What’s next

VIDEO Tutorial: Create a Bedrock WordPress project