「Moodle を自前で構築したいけれど、環境構築が難しそう…」と感じていませんか?
Docker を使えば、Moodle の構築は驚くほどシンプルになります。依存関係の解決やバージョン管理を Docker が引き受けてくれるため、クリーンな環境を素早く立ち上げられます。また、構築した環境をそのまま移植・複製できるのも大きなメリットです。
この記事では、Ubuntu 24.04 LTS 上に Docker + Docker Compose を使って Moodle 4.5(LTS)を構築する手順を、ゼロから丁寧に解説します。Docker の基本を知っている方はもちろん、「Moodle は初めて」という方でも迷わず進められるよう、各コマンドの意味も補足しながら進めます。
この記事を読み終えると、以下ができるようになります。
- Ubuntu 24.04 上に Docker で Moodle 4.5 を起動できる
- docker-compose.yml の構成と各設定値の意味がわかる
- 本番運用に向けた次のステップがわかる
この記事の前提条件・動作環境
本記事は以下の環境で動作を確認しています。環境が異なる場合は適宜読み替えてください。
| 項目 | バージョン・詳細 |
|---|---|
| OS | Ubuntu 24.04 LTS (Noble Numbat) |
| Docker | 26.x 以上 |
| Docker Compose | v2.x(compose コマンド形式) |
| Moodle | 4.5(LTS) |
| データベース | MariaDB 10.6 以上 |
| 推奨メモリ | 2GB 以上(本番環境は 4GB 推奨) |
| 推奨ストレージ | 20GB 以上の空き容量 |
本記事では docker compose(スペースあり)コマンドを使用します。古い環境では docker-compose(ハイフンあり)コマンドが必要な場合があります。docker compose version で確認してください。
また、以下の知識があることを前提としています。
- Linux の基本コマンド操作(cd・mkdir・vi / nano など)
- Docker の基本概念(イメージ・コンテナ・ボリュームの違い)
Docker をまだインストールしていない方は、次のセクションから進めてください。すでにインストール済みの方は「docker-compose.yml の作成」まで読み飛ばして構いません。
筆者の動作環境
筆者は自宅のミニPC(GEEKOM A8)で本記事の手順を検証しています。
| 項目 | 詳細 |
|---|---|
| 機種 | GEEKOM A8 |
| CPU | AMD Ryzen 9 8945HS |
| メモリ | 24GB |
| ストレージ | 1TB NVMe SSD |
| OS | Ubuntu 24.04 LTS |
ミニPCは消費電力が低く静音性も高いため、自宅サーバーとして Moodle を常時稼働させるのに非常に適しています。VPS を借りるコストを抑えたい方や、手元で検証環境を持ちたい方にもおすすめです。
Step 1 | Docker・Docker Compose のインストール
すでに Docker・Docker Compose をインストール済みの方は、次の「docker-compose.yml の作成」までスキップしてください。
Ubuntu 24.04 では、apt の公式リポジトリから Docker をインストールするのが最も確実です。以下の手順を順番に実行してください。
Docker のインストール手順
まず、既存の古い Docker パッケージをアンインストールします(クリーンな環境であれば不要ですが、念のため実行してください)。
# 古いパッケージの削除
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
sudo apt-get remove $pkg
done
次に、Docker 公式リポジトリを追加してインストールします。
# 必要なパッケージのインストール
sudo apt-get update
sudo apt-get install -y ca-certificates curl
# Docker の GPG キーを追加
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Docker リポジトリを追加
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Docker のインストール
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
インストール後、動作確認をします。
# バージョン確認
docker --version
# Docker version 26.x.x, build xxxxxxx
# sudo なしで実行できるようにする(再ログイン後に有効)
sudo usermod -aG docker $USER
newgrp docker
# 動作確認
docker run hello-world
# Hello from Docker! と表示されれば成功
sudo usermod -aG docker $USER を実行後、一度ログアウト→再ログインすることで sudo なしで docker コマンドが使えるようになります。
Docker Compose のインストール確認
Docker Compose v2 は docker-compose-plugin に含まれているため、前の手順でインストール済みです。以下で確認してください。
# Docker Compose のバージョン確認
docker compose version
# Docker Compose version v2.x.x と表示されれば OK
docker-compose(ハイフンあり)ではなく docker compose(スペースあり)で実行します。v1 系の docker-compose コマンドは非推奨のため本記事では使用しません。
Step 2 | 設定ファイルの作成
今回は2つのファイルを作成します。
| ファイル名 | 役割 |
|---|---|
| Dockerfile | MoodleとPHPの環境をまとめて構築する設計図 |
| docker-compose.yml | DockerにMoodleとデータベースの起動方法を伝える設定ファイル |
Dockerfile と docker-compose.yml の作成
作業ディレクトリを作成して、Dockerfile と docker-compose.yml を配置します。
ディレクトリ構成
今回は以下のディレクトリ構成で進めます。
~/moodle-docker/
├── Dockerfile # 必要なコンポーネントをビルドするための設定ファイル
├── docker-compose.yml # コンテナ定義ファイル
├── .env # 環境変数(パスワードなど)
└── moodledata/ # Moodle のデータ保存先(自動生成)
ディレクトリを作成します。
mkdir ~/moodle-docker
cd ~/moodle-docker
パスワードは必ず任意の強力なものに変更してください。.env ファイルは Git 管理に含めないよう .gitignore に追加することを強くおすすめします。
Dockerfile の全コード
以下の内容で docker-compose.yml を作成します。
nano Dockerfile
FROM php:8.3-apache
RUN apt-get update && \
apt-get install -y --no-install-recommends \
unzip git curl \
libzip-dev libjpeg-dev libpng-dev \
libfreetype6-dev libicu-dev libxml2-dev \
libonig-dev && \
docker-php-ext-configure gd --with-freetype --with-jpeg && \
docker-php-ext-install \
mysqli zip gd intl soap exif mbstring xml && \
apt-get clean && rm -rf /var/lib/apt/lists/*
RUN echo "max_input_vars = 5000" > /usr/local/etc/php/conf.d/moodle.ini && \
echo "upload_max_filesize = 100M" >> /usr/local/etc/php/conf.d/moodle.ini && \
echo "post_max_size = 110M" >> /usr/local/etc/php/conf.d/moodle.ini && \
echo "memory_limit = 256M" >> /usr/local/etc/php/conf.d/moodle.ini
RUN git clone --depth=1 -b MOODLE_405_STABLE \
https://github.com/moodle/moodle.git /var/www/html && \
chown -R www-data:www-data /var/www/html
RUN mkdir -p /var/www/moodledata && \
chown -R www-data:www-data /var/www/moodledata && \
chmod 0777 /var/www/moodledata
RUN sed -i 's/AllowOverride None/AllowOverride All/g' \
/etc/apache2/apache2.conf && \
a2enmod rewrite
EXPOSE 80
docker-compose.yml の全コード
以下の内容で docker-compose.yml を作成します。
nano docker-compose.yml
services:
moodle45_db:
image: mariadb:10.11
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: rootpassword # ①変更してください
MYSQL_DATABASE: moodle45
MYSQL_USER: moodleuser
MYSQL_PASSWORD: moodlepassword # ②変更してください
MYSQL_CHARACTER_SET_SERVER: utf8mb4
MYSQL_COLLATION_SERVER: utf8mb4_unicode_ci
volumes:
- moodle_db_data:/var/lib/mysql
moodle:
build: .
restart: unless-stopped
ports:
- "8045:80"
depends_on:
- moodle45_db
environment:
MOODLE_DB_HOST: moodle45_db
MOODLE_DB_NAME: moodle45
MOODLE_DB_USER: moodleuser
MOODLE_DB_PASSWORD: moodlepassword # 上の②と同じにします。
MOODLE_DB_TYPE: mariadb
volumes:
- moodle_data:/var/www/moodledata
volumes:
moodle_db_data:
moodle_data:
ここまでで、Docker インストールから Dockerfile、および docker-compose.yml までの本文ができました。
Step 3 | Moodle を起動する
Dockerfile、docker-compose.yml と .env の準備ができたら、Moodle を起動します。
docker compose up -d --build
初回のみ --build オプションが必要です。2回目以降の起動は docker compose up -d だけで大丈夫です。-d オプションはバックグラウンドで起動させるためにつけます。
--build オプションを付けるとMoodleのプログラム一式をダウンロード・構築するため、10〜20分程度かかります。
# ログをリアルタイムで確認(Ctrl+C で終了)
docker compose logs -f moodle
動作確認
セットアップ完了後、ブラウザで以下にアクセスします。
Moodle のログイン画面が表示されれば成功です。.env で設定した管理者アカウントでログインしてください。
- ユーザー名:MOODLE_ADMIN で設定した値(例:admin)
- パスワード:MOODLE_ADMIN_PASSWORD で設定した値
ログイン後、サイト管理画面が表示されれば構築完了です。
VPS やリモートサーバーで構築した場合は localhost の部分をサーバーの IP アドレスに置き換えてください(例:http://203.0.113.1:8045)。
本番運用に向けた追加設定(概要)
ローカル環境での動作確認ができたら、本番運用に向けて以下の設定を行います。詳細は別記事で解説予定です。
- SSL(HTTPS)化:Nginx リバースプロキシ + Let's Encrypt で対応
- メール送信:Moodle 管理画面の「サイト管理 → サーバー → メール → 送信メール設定」で SMTP サーバーを設定
- 定期バックアップ:docker compose exec でダンプを取得するスクリプトを cron で定期実行
本番環境では MOODLE_SITE_URL を実際のドメイン(https://moodle.example.com など)に変更することを忘れないでください。URL が一致しないとリダイレクトループが発生します。
よくあるトラブルと解決方法
私が実際に構築している途中で遭遇したエラーと対処法をまとめておきます。
1. ポートが既に使われています。(Port is already allocated)
エラーメッセージ
Error response from daemon: driver failed programming external connectivity: Bind for 0.0.0.0:8080 failed: port is already allocated
原因と対処
8045番ポートが他のプロセスに使用されています。以下で使用中のプロセスを確認して停止するか、docker-compose.yml のポート番号を変更してください。
# 使用中のポートを確認
sudo lsof -i :8045
# ポートを変更する場合(例:8080に変更)
ports:
- "8080:8045"
2. moodledata への書き込み権限エラー
エラーメッセージ
Could not create directory. Check permissions.
原因と対処
moodledataフォルダの権限が不足している場合が多いです。以下のコマンドで修正します。
# ボリュームの権限を修正
docker compose exec moodle chown -R daemon:daemon /bitnami/moodledata
3. データベースへの接続エラー (Can't connect to MySQL server)
原因と対処
DB コンテナの起動が Moodle より遅れている場合に発生します。depends_on の設定は確認してください。それでも発生する場合は以下で DB の状態を確認します。
# DB コンテナのログ確認
docker compose logs db
# DB だけ先に起動してから Moodle を起動
docker compose up -d db
sleep 30
docker compose up -d moodle
まとめ
この記事では、Ubuntu 24.04 + Docker + Docker Compose を使って Moodle 4.5 を構築する手順を解説しました。
この記事でできたこと:
・Docker・Docker Compose のインストール
・Dockefile, docker-compose.yml による Moodle + MariaDB の構成
・Moodle 4.5 の起動と動作確認
・よくあるトラブルへの対処法の把握
Docker を使うことで、環境の再現性が高まり、本番移行や複数環境の管理がシンプルになります。一度構築してしまえば docker compose up -d の1コマンドで起動できるのも大きなメリットです。
次回は「Nginx リバースプロキシ + Let's Encrypt で Moodle を HTTPS 化する」手順を解説予定です。本番運用を考えている方はあわせてご覧ください。
※ この記事は Zenn (rublix) にも投稿しています。

