A lightweight, production-ready Docker image for deploying Moodle with Apache.
Supports multi-architecture builds (amd64, arm64), ideal for both cloud and edge environments.
linux/amd64, linux/arm64)docker-compose.yml file:mkdir moodle-docker
cd moodle-docker
docker-compose.yml file with the following content:
services:
moodle:
image: cimdev/moodle:latest
ports:
- "8080:80"
environment:
# Required Variables
- MOODLE_DB_TYPE=mariadb
- MOODLE_DB_HOST=mariadb
- MOODLE_DB_NAME=moodle
- MOODLE_DB_USER=moodle
- MOODLE_DB_PASS=moodle
- MOODLE_URL=http://localhost:8080
- MOODLE_DATA=/var/www/moodledata
volumes:
- moodledata:/var/www/moodledata
depends_on:
- mariadb
mariadb:
image: mariadb:10.11
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=moodle
- MYSQL_USER=moodle
- MYSQL_PASSWORD=moodle
volumes:
- mariadb_data:/var/lib/mysql
volumes:
moodledata:
mariadb_data:
docker-compose up -d
http://localhost:8080If you prefer to use docker run instead of Docker Compose, here's an example:
docker network create moodle-network
docker run -d \
--name mariadb \
--network moodle-network \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_DATABASE=moodle \
-e MYSQL_USER=moodle \
-e MYSQL_PASSWORD=moodle \
-v mariadb_data:/var/lib/mysql \
mariadb:10.11
docker run -d \
--name moodle \
--network moodle-network \
-p 8080:80 \
-e MOODLE_DB_TYPE=mariadb \
-e MOODLE_DB_HOST=mariadb \
-e MOODLE_DB_NAME=moodle \
-e MOODLE_DB_USER=moodle \
-e MOODLE_DB_PASS=moodle \
-e MOODLE_URL=http://localhost:8080 \
-e MOODLE_DATA=/var/www/moodledata \
-v moodledata:/var/www/moodledata \
--link mariadb \
cimdev/moodle:latest
http://localhost:8080docker-compose up -d
http://localhost:8080These variables must be set for Moodle to function properly:
| Variable | Description | Example |
|---|---|---|
| MOODLE_DB_TYPE | Database type | mariadb |
| MOODLE_DB_HOST | Database host | mariadb |
| MOODLE_DB_NAME | Database name | moodle |
| MOODLE_DB_USER | Database user | moodle |
| MOODLE_DB_PASS | Database password | moodle |
| MOODLE_URL | Your Moodle site URL | http://localhost:8080 |
| MOODLE_DATA | Moodle data directory | /var/www/moodledata |
These variables have default values but can be customized:
| Variable | Description | Default Value |
|---|---|---|
| SMTP_HOST | SMTP server host | localhost |
| SMTP_PORT | SMTP server port | 587 |
| SMTP_USER | SMTP username | (empty) |
| SMTP_PASSWORD | SMTP password | (empty) |
| SMTP_PROTOCOL | SMTP protocol | tls |
| MOODLE_MAIL_NOREPLY_ADDRESS | No-reply email address | noreply@localhost |
| Variable | Description | Default Value |
|---|---|---|
| MOODLE_REVERSEPROXY | Enable reverse proxy | false |
| MOODLE_SSLPROXY | Enable SSL proxy | false |
| Variable | Description | Default Value |
|---|---|---|
| PHP_MAX_INPUT_VARS | Maximum input variables | 5000 |
| PHP_MAX_EXECUTION_TIME | Maximum execution time | 300 |
| PHP_MAX_INPUT_TIME | Maximum input time | 300 |
| PHP_MEMORY_LIMIT | Memory limit | 256M |
| PHP_POST_MAX_SIZE | Maximum POST size | 64M |
| PHP_UPLOAD_MAX_FILESIZE | Maximum upload file size | 64M |
| PHP_MAX_FILE_UPLOADS | Maximum file uploads | 20 |
| PHP_DISPLAY_ERRORS | Display errors | Off |
| PHP_LOG_ERRORS | Log errors | On |
| PHP_ERROR_LOG | Error log path | /var/log/php_errors.log |
| PHP_DATE_TIMEZONE | Default timezone | UTC |
| Variable | Description | Default Value |
|---|---|---|
| PHP_OPCACHE_ENABLE | Enable OPcache | 1 |
| PHP_OPCACHE_MEMORY_CONSUMPTION | OPcache memory consumption | 128 |
| PHP_OPCACHE_INTERNED_STRINGS_BUFFER | Interned strings buffer | 8 |
| PHP_OPCACHE_MAX_ACCELERATED_FILES | Maximum accelerated files | 4000 |
| PHP_OPCACHE_REVALIDATE_FREQ | Revalidation frequency | 60 |
| PHP_OPCACHE_FAST_SHUTDOWN | Fast shutdown | 1 |
| PHP_OPCACHE_ENABLE_CLI | Enable CLI | 1 |
services:
moodle:
image: cimdev/moodle:latest
ports:
- "8080:80"
environment:
# Required Variables
- MOODLE_DB_TYPE=mariadb
- MOODLE_DB_HOST=mariadb
- MOODLE_DB_NAME=moodle
- MOODLE_DB_USER=moodle
- MOODLE_DB_PASS=moodle
- MOODLE_URL=http://localhost:8080
- MOODLE_DATA=/var/www/moodledata
# Optional SMTP Configuration
- SMTP_HOST=smtp.gmail.com
- SMTP_PORT=587
- [email protected]
- SMTP_PASSWORD=your_password
- SMTP_PROTOCOL=tls
- MOODLE_MAIL_NOREPLY_ADDRESS=noreply@localhost
# Optional Reverse Proxy Configuration
- MOODLE_REVERSEPROXY=false
- MOODLE_SSLPROXY=false
# Optional PHP Configuration
- PHP_MAX_INPUT_VARS=5000
- PHP_MAX_EXECUTION_TIME=300
- PHP_MAX_INPUT_TIME=300
- PHP_MEMORY_LIMIT=256M
- PHP_POST_MAX_SIZE=64M
- PHP_UPLOAD_MAX_FILESIZE=64M
- PHP_MAX_FILE_UPLOADS=20
- PHP_DISPLAY_ERRORS=Off
- PHP_LOG_ERRORS=On
- PHP_ERROR_LOG=/var/log/php_errors.log
- PHP_DATE_TIMEZONE=UTC
# Optional OPcache Configuration
- PHP_OPCACHE_ENABLE=1
- PHP_OPCACHE_MEMORY_CONSUMPTION=128
- PHP_OPCACHE_INTERNED_STRINGS_BUFFER=8
- PHP_OPCACHE_MAX_ACCELERATED_FILES=4000
- PHP_OPCACHE_REVALIDATE_FREQ=60
- PHP_OPCACHE_FAST_SHUTDOWN=1
- PHP_OPCACHE_ENABLE_CLI=1
volumes:
- moodledata:/var/www/moodledata
depends_on:
- mariadb
mariadb:
image: mariadb:10.11
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=moodle
- MYSQL_USER=moodle
- MYSQL_PASSWORD=moodle
volumes:
- mariadb_data:/var/lib/mysql
volumes:
moodledata:
mariadb_data:
moodledata: Stores Moodle datamariadb_data: Stores database dataTo enable reverse proxy support, set the following variables:
MOODLE_REVERSEPROXY=true
MOODLE_SSLPROXY=true # If using SSL
The image includes support for multiple languages:
Content type
Image
Digest
sha256:ccf800c06…
Size
258.1 MB
Last updated
over 1 year ago
docker pull cimdev/moodle:moodle-5.0-php8.2-apache