研究プロジェクト等でDockerを使ってOmeka Sを運用している場合、サーバー移行や契約終了のタイミングでバックアップが必要になります。この記事では、SSH接続とsudo権限がある状態を前提に、データを取り出す手順を整理します。

Dockerイメージとデータの関係

Dockerイメージはアプリケーションを動かすための「環境」であり、ユーザーが登録した画像やメタデータは「ボリューム」として別管理されているのが一般的です。

docker-compose.ymlvolumes セクションで、各データがどのようにマウントされているかを確認します。典型的な構成は以下のようになっています。

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