wengerk/drupal-for-contrib

By wengerk

Updated about 1 month ago

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

Image
Developer tools
Web servers
Content management system
0

10K+

wengerk/drupal-for-contrib repository overview

Quick reference

  • Maintained by: wengerk (not the Docker Community, Drupal Community or the Drupal Security Team).

  • Where to get help: the Docker Community Forums, the Docker Community Slack, or Stack Overflow

This project is sponsored by Antistatique, a Swiss Web Agency. Visit us at www.antistatique.net or Contact us.

Tags and DockerfileDrupal
11.4 (Dockerfile)11.4-dev
11.3 (Dockerfile)11.3.x
11.2 (Dockerfile)11.2.x
11.1 (Dockerfile)11.1.x
11.0 (Dockerfile)11.0.x
10.6 (Dockerfile)10.6-dev
10.5 (Dockerfile)10.5.x
10.4 (Dockerfile)10.4.x
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

Why another Drupal Images

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

Quick reference (cont.)

How to use this image

Usage in a Drupal Contribution Modules/Themes

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

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

    services:
    
      drupal:
        build: .
        depends_on:
          - db
        ports:
          - 8888:80
        volumes:
          # Mount the module in the proper contrib module directory.
          - .:/var/www/html/modules/contrib/my_module
        restart: always
    
      db:
        image: mariadb:10.6
        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.4 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 --configuration=/var/www/html/phpunit.xml

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', '11.0']
        module: ['my_module']
        experimental: [ false ]
        include:
          - drupal_version: '10.3'
            module: 'my_module'
            experimental: true
          - drupal_version: '11.1'
            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 }}

Tag summary

Content type

Image

Digest

sha256:7b5edaac0

Size

299.9 MB

Last updated

about 1 month ago

docker pull wengerk/drupal-for-contrib:11.4