Skip to content

Docker images to setup containers on Contributions Modules/Themes for Drupal 8/9/10/11

License

Notifications You must be signed in to change notification settings

WengerK/docker-drupal-for-contrib

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Drupal Docker Container for Contributions

Build Status Docker Pulls Docker Stars

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.

Docker Images

❗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:

Supported tags and respective Dockerfile links Drupal
11.x-dev (Dockerfile) 11.0-dev
10.3 (Dockerfile) 10.3.0+
10.2 (Dockerfile) 10.2.0+
10.1 (Dockerfile) 10.1.0+
10.0 (Dockerfile) 10.0.0+
9.5 (Dockerfile) 9.5.0+
9.4 (Dockerfile) 9.4.0+
9.3 (Dockerfile) 9.3.0+
9.2 (Dockerfile) 9.2.0+
9.1 (Dockerfile) 9.1.0+
9.0 (Dockerfile) 9.0.10+
8.9 (Dockerfile) 8.9.11+

Usage in a Drupal Contribution Modules/Themes

  1. Create a Dockerfile file at the root level of your repository

    ARG BASE_IMAGE_TAG=8.9.0
    FROM wengerk/drupal-for-contrib:${BASE_IMAGE_TAG}
    
  2. Create a docker-compose.yml file at the root level of your repository

    version: '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.

  3. 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
  1. Run PHPUnit testing
docker-compose exec -u www-data drupal phpunit --no-coverage --group=my_module

Travis Integration example

  1. 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

Github Actions Integration example

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 }}

About

Docker images to setup containers on Contributions Modules/Themes for Drupal 8/9/10/11

Topics

Resources

License

Stars

Watchers

Forks