Docker Drupal Dev Environment
This post documents mounting a new Drupal Composer project as a volume in a Docker container. Features include Drush, Drupal Console, mailhog and phpMyAdmin. A Docker-sync configuration is available for OS X.
Composer
With the release of Drupal 8.3, using Composer to manage Drupal projects has vastly improved and is becoming a best practice. See Getting Started at getcomposer.org to install Composer.
Drupal Composer Template
Using Composer and the Composer template for Drupal projects to create a new Drupal site.
Open a CLI and execute the composer create-project
command from the directory where you want to create your project. For example,
composer create-project drupal-composer/drupal-project:8.x-dev mysitefolder --stability dev --no-interaction
Docker
The docker-compose.yml file from Docker4Drupal image stack is optimized for local development. Use curl
to download the file into the root of your Drupal project. For example,
PowerShell
curl https://raw.githubusercontent.com/wodby/docker4drupal/master/docker-compose.yml -Outfile mysitefolder\docker-compose.yml
Bash
curl -o mysitefolder/docker-compose.yml https://raw.githubusercontent.com/wodby/docker4drupal/master/docker-compose.yml
Update the docker-compose.yml file. Create a named volume for data persistence in the mariadb node.
docker-compose.yml
...
services:
mariadb:
...
volumes:
- mysql:/var/lib/mysql
Note that an ellipsis … in the code snippets are not a part of the code and are there only to denote code that is being skipped and not applicable to the example. View all of the docker-compose.yml updates on GitHub.
In the php
node, comment out the vanilla Drupal image node and uncomment the image without Drupal. Additionally, change the volume to mount the relative local directory ./
to /var/www/html
in the container.
...
php:
image: wodby/drupal-php:7.1-2.1.0
...
volumes:
- ./:/var/www/html
In the nginx
node, change the volume to mount the relative local directory ./
to /var/www/html
in the container.
...
nginx:
...
volumes:
- ./:/var/www/html
For data persistence, in the volumes
node at the bottom of the docker-compose.yml file, replace the unused codebase volume with mysql.
...
volumes:
mysql:
Run containers
From the site folder, e.g., mysitefolder
, execute docker-compose
docker-compose up -d
Drupal Console
Test drive Drupal Console by connecting to the php container.
docker-compose exec --user=82 php sh
List all of the Drupal Console commands. Disconnect from the session with Ctrl+D
drupal list