moodle-docker: Docker Containers for Moodle Developers
This repository contains Docker configuration aimed at Moodle developers and testers to easily deploy a testing environment for Moodle.
Features:
- All supported database servers (PostgreSQL, MySQL, Micosoft SQL Server, Oracle XE)
- Behat/Selenium configuration for Firefox and Chrome
- Catch-all smtp server and web interface to messages using MailHog
- All PHP Extensions enabled configured for external services (e.g. solr, ldap)
- All supported PHP versions
- Zero-configuration approach
- Backed by automated tests
Prerequisites
- Docker and Docker Compose installed
- 3.25GB of RAM (if you choose Microsoft SQL Server as db server)
Quick start
# Set up path to Moodle code
export MOODLE_DOCKER_WWWROOT=/path/to/moodle/code
# Choose a db server (Currently supported: pgsql, mariadb, mysql, mssql, oracle)
export MOODLE_DOCKER_DB=pgsql
# Ensure customized config.php for the Docker containers is in place
cp config.docker-template.php $MOODLE_DOCKER_WWWROOT/config.php
# Start up containers
bin/moodle-docker-compose up -d
# Wait for DB to come up (important for oracle/mssql)
bin/moodle-docker-wait-for-db
# Work with the containers (see below)
# [..]
# Shut down and destroy containers
bin/moodle-docker-compose down
Use containers for running behat tests
# Initialize behat environment
bin/moodle-docker-compose exec webserver php admin/tool/behat/cli/init.php
# [..]
# Run behat tests
bin/moodle-docker-compose exec -u www-data webserver php admin/tool/behat/cli/run.php --tags=@auth_manual
Running single behat site:
Moodle 3.4dev (Build: 20171006), 33a3ec7c9378e64c6f15c688a3c68a39114aa29d
Php: 7.1.9, pgsql: 9.6.5, OS: Linux 4.9.49-moby x86_64
Server OS "Linux", Browser: "firefox"
Started at 25-05-2017, 19:04
...............
2 scenarios (2 passed)
15 steps (15 passed)
1m35.32s (41.60Mb)
Notes:
- The behat faildump directory is exposed at http://localhost:8000/_/faildumps/.
Use containers for running phpunit tests
# Initialize phpunit environment
bin/moodle-docker-compose exec webserver php admin/tool/phpunit/cli/init.php
# [..]
# Run phpunit tests
bin/moodle-docker-compose exec webserver vendor/bin/phpunit auth_manual_testcase auth/manual/tests/manual_test.php
Moodle 3.4dev (Build: 20171006), 33a3ec7c9378e64c6f15c688a3c68a39114aa29d
Php: 7.1.9, pgsql: 9.6.5, OS: Linux 4.9.49-moby x86_64
PHPUnit 5.5.7 by Sebastian Bergmann and contributors.
.. 2 / 2 (100%)
Time: 4.45 seconds, Memory: 38.00MB
OK (2 tests, 7 assertions)
Notes:
- If you want to run test with coverage report, use command:
bin/moodle-docker-compose exec webserver phpdbg -qrr vendor/bin/phpunit --coverage-text auth_manual_testcase auth/manual/tests/manual_test.php
Use containers for manual testing
# Initialize Moodle database for manual testing
bin/moodle-docker-compose exec webserver php admin/cli/install_database.php --agree-license --fullname="Docker moodle" --shortname="docker_moodle" --adminpass="test" --adminemail="admin@example.com"
Notes:
- Moodle is configured to listen on
http://localhost:8000/
. - Mailhog is listening on
http://localhost:8000/_/mail
to view emails which Moodle has sent out. - The admin
username
you need to use for logging in isadmin
by default. You can customize it by passing--adminuser='myusername'
Using VNC to view behat tests
If MOODLE_DOCKER_SELENIUM_VNC_PORT
is defined, selenium will expose a VNC session on the port specified so behat tests can be viewed in progress.
For example, if you set MOODLE_DOCKER_SELENIUM_VNC_PORT
to 5900..
- Download a VNC client: https://www.realvnc.com/en/connect/download/viewer/
- With the containers running, enter 0.0.0.0:5900 as the port in VNC Viewer. You will be prompted for a password. The password is 'secret'.
- You should be able to see an empty Desktop. When you run any Behat tests a browser will popup and you will see the tests execute.
Stop and restart containers
bin/moodle-docker-compose down
which was used above after using the containers stops and destroys the containers. If you want to use your containers continuously for manual testing or development without starting them up from scratch everytime you use them, you can also just stop without destroying them. With this approach, you can restart your containers sometime later, they will keep their data and won't be destroyed completely until you run bin/moodle-docker-compose down
.
# Stop containers
bin/moodle-docker-compose stop
# Restart containers
bin/moodle-docker-compose start
Environment variables
You can change the configuration of the docker images by setting various environment variables before calling bin/moodle-docker-compose up
.
Environment Variable | Mandatory | Allowed values | Default value | Notes |
---|---|---|---|---|
MOODLE_DOCKER_DB |
yes | pgsql, mariadb, mysql, mssql, oracle | none | The database server to run against |
MOODLE_DOCKER_WWWROOT |
yes | path on your file system | none | The path to the Moodle codebase you intend to test |
MOODLE_DOCKER_PHP_VERSION |
no | 7.4, 7.3, 7.2, 7.1, 7.0, 5.6 | 7.2 | The php version to use |
MOODLE_DOCKER_BROWSER |
no | firefox, chrome | firefox | The browser to run Behat against |
MOODLE_DOCKER_PHPUNIT_EXTERNAL_SERVICES |
no | any value | not set | If set, dependencies for memcached, redis, solr, and openldap are added |
MOODLE_DOCKER_WEB_HOST |
no | any valid hostname | localhost | The hostname for web |
MOODLE_DOCKER_WEB_PORT |
no | any integer value | 8000 | The port number for web. If set to 0, no port is used |
MOODLE_DOCKER_SELENIUM_VNC_PORT |
no | any integer value | not set | If set, the selenium node will expose a vnc session on the port specified |
Advanced usage
As can be seen in bin/moodle-docker-compose, this repo is just a series of docker-compose configurations and light wrapper which make use of companion docker images. Each part is designed to be reusable and you are encouraged to use the docker[-compose] commands as needed.
Companion docker images
The following Moodle customised docker images are close companions of this project:
- moodle-php-apache: Apache/PHP Environment preconfigured for all Moodle environments
- moodle-db-mssql: Microsoft SQL Server for Linux configured for Moodle
- moodle-db-oracle: Oracle XE configured for Moodle
Contributions
Are extremely welcome!