DockerからOrbStackへの移行: Firebaseエミュレーターと PostgreSQLのデータ移行手順

最近、開発効率化のためにDocker DesktopからOrbStackに乗り換えることにしたのですが、その際にFirebase EmulatorとPostgreSQLのデータを移行する必要がありました。OrbStackは軽量で高速なDockerの代替ツールとして注目されていますが、環境を移行する際にデータの引き継ぎは重要な課題です。この記事では、Docker Compose環境でFirebase EmulatorとPostgreSQLのデータをエクスポートし、OrbStack環境にインポートする方法について解説します。

環境設定

移行前のDocker Compose設定は以下のようになっています:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
version: '3.8'

services:
  firebase:
    image: firebase-emulator
    volumes:
      - ./firebase-data:/app/data
    command: firebase emulators:start
    ports:
      - "9099:9099"
      - "8080:8080"
      
  postgres:
    image: postgres:13
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
      POSTGRES_DB: your_database
    volumes:
      - postgres-data:/var/lib/postgresql/data
      - ./pg-backups:/backups
    ports:
      - "5432:5432"

volumes:
  postgres-data:

Docker環境からのデータエクスポート手順

Firebaseエミュレーターのデータエクスポート

Firebase Emulatorからデータをエクスポートするには、以下の方法があります:

1
2
# 特定のディレクトリにデータをエクスポート
docker-compose exec firebase firebase emulators:export /app/data/export-data --project your_project_id

または、自動エクスポートを設定することもできます。Docker Compose設定で以下のように--export-on-exitフラグを追加します:

1
2
3
4
5
6
services:
  firebase:
    image: firebase-emulator
    volumes:
      - ./firebase-data:/app/data
    command: firebase emulators:start --import=/app/data --export-on-exit

PostgreSQLのデータエクスポート

PostgreSQLからデータをエクスポートするには、pg_dumpコマンドを使用します:

1
2
# カスタムフォーマット(圧縮)でエクスポート
docker-compose exec postgres pg_dump -U postgres -d your_database -F c > postgres.dump

OrbStackへの移行作業

移行手順の例

  1. Docker Desktop環境でのデータのエクスポート
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# バックアップディレクトリの作成
BACKUP_DIR="orbstack_migration_$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR

# Firebaseデータのエクスポート
docker-compose exec firebase firebase emulators:export /app/data/export --project your_project_id
docker cp $(docker-compose ps -q firebase):/app/data/export $BACKUP_DIR/firebase

# PostgreSQLデータのエクスポート
docker-compose exec postgres pg_dump -U postgres -d your_database -F c > $BACKUP_DIR/postgres.dump
  1. OrbStack環境でのデータのインポート

OrbStackをインストールし、同じDocker Compose設定を使用して環境を起動した後:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# Firebaseデータのインポート準備
mkdir -p firebase-import
cp -r $BACKUP_DIR/firebase/* firebase-import/

# PostgreSQLデータのインポート準備
mkdir -p pg-backups
cp $BACKUP_DIR/postgres.dump pg-backups/backup.dump

# コンテナの起動とデータのインポート
docker-compose up -d
  1. PostgreSQLデータのリストア
1
2
# PostgreSQLへのリストアコマンド
docker-compose exec postgres pg_restore -U postgres -d your_database -c /backups/backup.dump

パス構造が異なる場合の対処法

より複雑な設定の場合、例えば以下のようなDocker Compose設定では:

1
2
3
4
5
6
7
8
9
firebase:
  build:
    context: ./docker/firebase/
    dockerfile: Dockerfile
  volumes:
    - firebase-data:/opt/workspace:cached
    - ./.data:/app/data
  working_dir: /opt/workspace
  command: "firebase emulators:start --import=/opt/workspace/data --export-on-exit --project min30-pty-dev"

.dataディレクトリからfirebase-dataボリュームの/opt/workspace/dataにデータをコピーするには、以下の方法が有効です:

方法1: 一時的なコンテナを使用したデータコピー

1
docker run --rm -v firebase-data:/opt/workspace -v $(pwd)/.data:/app/data alpine sh -c "cp -rf /app/data/* /opt/workspace/data/"

方法2: 既存のコンテナを使用したデータコピー

1
docker-compose exec firebase sh -c "cp -rf /app/data/* /opt/workspace/data/"

方法3: 専用の初期化サービスを追加

1
2
3
4
5
6
7
8
9
services:
  # 既存のサービス...
  
  init-firebase-data:
    image: alpine
    volumes:
      - firebase-data:/opt/workspace
      - ./.data:/app/data
    command: sh -c "mkdir -p /opt/workspace/data && cp -rf /app/data/* /opt/workspace/data/"

このサービスを実行するには:

1
docker-compose up init-firebase-data

まとめ

Docker DesktopからOrbStackへの移行は、開発環境のパフォーマンスを向上させる良い選択です。この記事で説明したデータ移行手順を使用することで、Firebase EmulatorやPostgreSQLなどのサービスのデータを確実に引き継ぎながら、スムーズな移行が可能になります。

移行作業は大きく分けて以下の手順で行います:

  1. Docker環境でのデータのエクスポート
  2. OrbStackのインストールと設定
  3. エクスポートしたデータのOrbStack環境へのインポート

これらの手順を実行することで、開発作業の中断を最小限に抑えながら、より効率的な開発環境へ移行することができます。

カテゴリ

comments powered by Disqus