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.
- 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
# 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 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)
- 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)
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="email@example.com"
- Moodle is configured to listen on
- Mailhog is listening on
http://localhost:8000/_/mailto view emails which Moodle has sent out.
- The admin
usernameyou need to use for logging in is
adminby default. You can customize it by passing
Using VNC to view behat tests
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
# Stop containers bin/moodle-docker-compose stop # Restart containers bin/moodle-docker-compose start
You can change the configuration of the docker images by setting various environment variables before calling
|Environment Variable||Mandatory||Allowed values||Default value||Notes|
||yes||pgsql, mariadb, mysql, mssql, oracle||none||The database server to run against|
||yes||path on your file system||none||The path to the Moodle codebase you intend to test|
||no||7.3, 7.2, 7.1, 7.0, 5.6||7.1||The php version to use|
||no||firefox, chrome||firefox||The browser to run Behat against|
||no||any value||not set||If set, dependencies for memcached, redis, solr, and openldap are added|
||no||any valid hostname||localhost||The hostname for web|
||no||any integer value||8000||The port number for web. If set to 0, no port is used|
||no||any integer value||not set||If set, the selenium node will expose a vnc session on the port specified|
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
Are extremely welcome!