研究プロジェクト等でDockerを使ってOmeka Sを運用している場合、サーバー移行や契約終了のタイミングでバックアップが必要になります。この記事では、SSH接続とsudo権限がある状態を前提に、データを取り出す手順を整理します。
Dockerイメージとデータの関係
Dockerイメージはアプリケーションを動かすための「環境」であり、ユーザーが登録した画像やメタデータは「ボリューム」として別管理されているのが一般的です。
docker-compose.yml の volumes セクションで、各データがどのようにマウントされているかを確認します。典型的な構成は以下のようになっています。
volumes:
- omeka:/var/www/html/volume # 名前付きボリューム(ファイル実体)
- ./modules:/var/www/html/modules # バインドマウント
- ./themes:/var/www/html/themes # バインドマウント
- ./config/local.config.php:/var/www/html/config/local.config.php:ro
バインドマウント(./modules など)はホストのプロジェクトディレクトリに実体があるため、そのままコピーするだけで済みます。一方、名前付きボリューム(omeka)はDocker管理下にあり、ホストOS上の実体パスを別途確認する必要があります。
sudo docker volume inspect [プロジェクト名]_omeka
出力の "Mountpoint" に表示されるパス(例:/var/lib/docker/volumes/.../_data)がバックアップ対象のディレクトリです。
なお、/var/lib/docker/ 以下はroot権限が必要なため sudo cd は使えません。sudo -s で管理者シェルに入るか、sudo ls -la [パス] で確認します。
バックアップに必要な3つの要素
完全な復元のためには、以下の3つをセットで取得する必要があります。
ファイル実体(画像・PDFなど)
名前付きボリュームの内容を tar で圧縮します。
sudo tar -cvzf ~/omeka_volume_backup.tar.gz \
-C /var/lib/docker/volumes/[プロジェクト名]_omeka/_data .
データベース
アイテムのメタデータやページ構成はすべてデータベース(MariaDB/MySQL)に入っています。DBコンテナが起動した状態で mysqldump を使います。接続情報は database.ini 等で確認します。
sudo docker compose exec [DBコンテナ名] \
mysqldump -u [ユーザー名] -p'[パスワード]' [DB名] > ~/omeka_db_backup.sql
テーマ・モジュール・設定ファイル
バインドマウントされている themes/、modules/、config/ はホストのプロジェクトディレクトリにあるため、そのまま圧縮します。
tar -cvzf ~/omeka_custom_assets.tar.gz themes/ modules/ config/
リストアの流れ
新しい環境のプロジェクトディレクトリを用意したうえで、以下の順に戻します。
1. themes/、modules/、config/ をプロジェクトディレクトリに展開
2. docker compose up でコンテナを起動(名前付きボリュームが作成される)
3. mysql コマンドでSQLファイルをインポート
4. 名前付きボリュームのMountpointにファイル実体を展開
5. ファイルのパーミッションを調整
バインドマウントの対象(themes/modules/config)は、プロジェクトディレクトリへの配置だけで docker compose up 時に自動反映されます。名前付きボリュームへの展開は以下のようになります。
sudo tar -xvzf ~/omeka_volume_backup.tar.gz \
-C /var/lib/docker/volumes/[プロジェクト名]_omeka/_data
パーミッションの設定を忘れると画像が表示されないことがあるため、展開後に調整します。
sudo chown -R www-data:www-data /var/lib/docker/volumes/[プロジェクト名]_omeka/_data