Many Drupal Docker images exists on Docker Hub. So why another image ? All of those images serve the same purpose, integrate Docker into a complete Drupal project.
This image is way different as we don't want to solve the Docker integration with Drupal but give a solution to setup a Docker on Contributions modules or themes.
I see way too many developers creating awesome modules and struggling to test them by having to bootstrap a complete clean Drupal 8/9/10/11 environment and symlinks the custom modules/themes inside it. With this Docker image, I want to highly simplify this process by having a containerized Drupal 8/9 used for manual or automated testing of modules/themes Contributions projects.
❗For better reliability we release images with stability tags (wengerk/drupal-for-contrib:9.X
) which does not correspond to git tags. We strongly recommend using images only with stability tags.
Overview:
- All images based on the official Drupal Docker maintained by: the Docker Community.
- Travis CI builds
- Docker Hub
Supported tags and respective Dockerfile links |
Drupal |
---|---|
11.1 (Dockerfile) |
11.x-dev |
11.0 (Dockerfile) |
11.0.x |
10.4 (Dockerfile) |
10.4-dev |
10.3 (Dockerfile) |
10.3.x |
10.2 (Dockerfile) |
10.2.x |
10.1 (Dockerfile) |
10.1.x |
10.0 (Dockerfile) |
10.0.x |
9.5 (Dockerfile) |
9.5.x |
9.4 (Dockerfile) |
9.4.x |
9.3 (Dockerfile) |
9.3.x |
9.2 (Dockerfile) |
9.2.x |
9.1 (Dockerfile) |
9.1.x |
9.0 (Dockerfile) |
9.0.x |
8.9 (Dockerfile) |
8.9.x |
-
Create a
Dockerfile
file at the root level of your repositoryARG BASE_IMAGE_TAG=8.9.0 FROM wengerk/drupal-for-contrib:${BASE_IMAGE_TAG}
-
Create a
docker-compose.yml
file at the root level of your repositoryversion: '3.6' services: drupal: build: . depends_on: - db ports: - 8888:80 volumes: # Mount the module in the proper contrib module directory. - .:/opt/drupal/web/modules/contrib/my_module restart: always db: image: mariadb:10.3.8 environment: MYSQL_USER: drupal MYSQL_PASSWORD: drupal MYSQL_DATABASE: drupal MYSQL_ROOT_PASSWORD: root restart: always
Update the mounted
volume
name to match your custom module name. -
Run Docker
$ docker-compose build --pull --build-arg BASE_IMAGE_TAG=10.0 drupal
$ docker-compose up -d drupal
# wait on Docker to be ready, especially MariaDB that takes many seconds to be up before install.
$ docker-compose exec -u www-data drupal drush site-install standard --db-url="mysql://drupal:drupal@db/drupal" --site-name=Example -y
- Run PHPUnit testing
docker-compose exec -u www-data drupal phpunit --no-coverage --group=my_module
- Create a
.travis.yml
file at the root level of your repository
language: php
services:
- docker
env:
global:
# The module name to be mounted and tested in the Docker.
- MODULE_NAME="my_module"
jobs:
include:
- name: D8.9
env: BASE_IMAGE_TAG="8.9"
- name: D9.0
env: BASE_IMAGE_TAG="9.0"
- name: D10.0
env: BASE_IMAGE_TAG="10.0"
- name: D11.0
env: BASE_IMAGE_TAG="11.0"
before_install:
- docker-compose build --pull --build-arg BASE_IMAGE_TAG=${BASE_IMAGE_TAG} drupal
- docker-compose up -d drupal
# wait on Docker to be ready, especially MariaDB that takes many seconds to be up.
- docker-compose exec drupal wait-for-it drupal:80 -t 60
- docker-compose exec drupal wait-for-it db:3306 -t 60
before_script:
- docker-compose exec -u www-data drupal drush site-install standard --db-url="mysql://drupal:drupal@db/drupal" --site-name=Example -y
script:
- docker-compose exec -u www-data drupal phpunit --no-coverage --group=${MODULE_NAME} --configuration=/opt/drupal/web/phpunit.xml
name: Continuous integration
on: [push]
jobs:
tests:
name: Tests
runs-on: ubuntu-latest
strategy:
matrix:
drupal_version: ['8.9', '9.0', '9.1', '10.0', '10.1', '10.2']
module: ['my_module']
experimental: [ false ]
include:
- drupal_version: '10.3'
module: 'my_module'
experimental: true
- drupal_version: '11.0'
module: 'my_module'
experimental: true
steps:
- uses: actions/checkout@v3
- run: docker-compose -f docker-compose.yml pull --include-deps drupal
- name: Build the docker-compose stack
run: docker-compose -f docker-compose.yml build --pull --build-arg BASE_IMAGE_TAG=${{ matrix.drupal_version }} drupal
continue-on-error: ${{ matrix.experimental }}
- name: Run unit tests
run: docker-compose -f docker-compose.yml run -u www-data drupal phpunit --no-coverage --group=${{ matrix.module }} --configuration=/var/www/html/phpunit.xml
continue-on-error: ${{ matrix.experimental }}