Firebirdの公式Dockerイメージ

# Firebird の公式 Dockerイメージ
FirebirdのDockerイメージはDocker Hubでも複数公開されてきましたが、Firebirdプロジェクトから公式Dockerイメージが公開されるようになりました。

Firebirdプロジェクト公式Dockerイメージ [https://hub.docker.com/r/firebirdsql/firebird](https://hub.docker.com/r/firebirdsql/firebird)

## tag について

tag については、バージョン3系、バージョン4系、バージョン5系が使えるようになっています。また、ベースとなるLinuxディストリビューションは Bookworm(Debian12) ですが、バージョン3系ではこの他にJammy(Ubuntu22.04LTS) と bullseye(Debian11) を選択可能、バージョン4系とバージョン5系ではさらに Noble(Utuntu24.04LTS）も選択可能となっています。

tag としてメジャーバージョンのみを指定すると Debian12＋各バージョンの最新版でインストールされるので、通常はこれを使用すればよいでしょう。

## とりあえず起動してみる

docker の実行環境ですが、Windows11上のwsl2で動作している Ubunt22.04LTSで検証しています。

bashから直接起動するには、以下のコマンドを実行します。環境変数についてはこの後で説明しますが、イメージ名に何もtagを付けずに実行するとその時点での最新バージョンが起動します。この時点では 5.0.2でした。

```bash
$ docker run \
    -e FIREBIRD_ROOT_PASSWORD=************ \
    -e FIREBIRD_USER=alice \
    -e FIREBIRD_PASSWORD=************ \
    -e FIREBIRD_DATABASE=mirror.fdb \
    -e FIREBIRD_DATABASE_DEFAULT_CHARSET=UTF8 \
    -v ./data:/var/lib/firebird/data \
    -p 3050:3050 \
    --name firebird-latest \
    --detach firebirdsql/firebird
```

docker logs で確認します。

```bash
$ docker logs firebird-latest
Changing SYSDBA password.
Creating user 'alice'...
Starting Firebird TCP/IP server version LI-V5.0.2.1613 Firebird 5.0
```

コンテナを停止しておきます。

```bash
$ docker stop firebird-latest
```

## docker-composeで起動する

いちいち環境変数を書いたりするのは面倒ですから、docker-compose.yml に書いておきましょう。ホームディレクトリに firebird フォルダを作成して、そこに docker-compose.yml を作成します。また、データベース用のボリュームに使用するための data ディレクトリも作成しておきます。

```bash
services:
  firebird:
    image: firebirdsql/firebird:latest
    container_name: firebird-latest
    restart: always
    ports:
      - "3050:3050"
    volumes:
      - ./data:/var/lib/firebird/data
    environment:
      - FIREBIRD_ROOT_PASSWORD=************
      - FIREBIRD_USER=alice
      - FIREBIRD_PASSWORD=************
      - FIREBIRD_DATABASE=mirror.fdb
      - FIREBIRD_DATABASE_DEFAULT_CHARSET=UTF8

```

こうしておいて、docker-compose でコンテナを起動します。

```bash
$ docker-compose up -d
```
isql から mirror.fdb に接続してみます。

```bash
$ docker exec -it firebird-latest isql -u SYSDBA -p '************' localhost:/var/lib/firebird/data/mirror.fdb
```
上記のコマンドを実行して、以下のように表示されればOKです。

```bash
Database: localhost:/var/lib/firebird/data/mirror.fdb, User: SYSDBA
SQL>
```

## 環境変数

コンテナをカスタマイズするために以下の環境変数を使用できます。

#### FIREBIRD_ROOT_PASSWORD
Firebird のインストーラーは自動的に SYSDBA のパスワードを生成して、/opt/firebird/SYSDBA.password ファイルに保存するようになっています。

環境変数 FIREBIRD_ROOT_PASSWORD がセットされている場合、SYSDBA パスワードは変更されて /opt/firebird/SYSDBA.password ファイルは削除されます。

#### FIREBIRD_USER
Firebird の一般ユーザーをセキュリティデータベースに作成します。

環境変数 FIREBIRD_USER でユーザーを作製する時は、環境変数 FIREBIRD_PASSWORD でパスワードを指定してください。指定しない場合は初期化に失敗します。

#### FIREBIRD_DATABASE
新規にデータベースを作成します。すでにデータベースがある場合には上書きせずに無視されます。

データベースの配置は既定では /var/lib/firebird/data ディレクトリですが、絶対パスでこれ以外のフォルダを指定することも可能です。

#### FIREBIRD_DATABASE_PAGE_SIZE
環境変数 FIREBIRD_DATABASE_PAGE_SIZE で、データベースのページサイズを指定することが可能です。

#### FIREBIRD_DATABASE_DEFAULT_CHARSET
環境変数 FIREBIRD_DATABASE_DEFAULT_CHARSET でデータベースのデフォルトキャラクタセットを指定することが可能です。

#### FIREBIRD_USE_LEGACY_AUTH
レガシー認証を有効にします（非推奨）。

#### FIREBIRD_CONF_*
Firebird の設定ファイルである firebird.conf の全ての項目を設定することが可能です。

例えば、 FIREBIRD_CONF_DataTypeCompatibility=3.0 を使用すると、 firebird.conf の DataTypeCompatibility に 3.0 を設定することが出来ます。

FIREBIRD_CONF_* の \* に記述する設定項目名は大文字小文字を区別するので注意してください。firebird.conf にない項目は全て無視されます。大文字小文字が合わない場合も無視されます。

#### \*_FILE
前記した環境変数のいずれも、\*_FILE で指定したファイルから値を読み込ませることが可能です。

例えば、FIREBIRD_PASSWORD_FILE=/run/secrets/firebird-passwd とした場合、 FIREBIRD_PASSWORD には、/run/secrets/firebird-passwd ファイルから値が読み込まれます。

**環境変数自体への値の設定と、 \*_FILE でのファイルによる値の設定は、完全に排他的です。両方を設定した場合はコンテナの初期化に失敗します。**

## 複数バージョンの並行起動

この Dockerイメージを使うと Firebird の複数バージョンの並行起動も簡単に行うことが可能です。

以下のような docker-compose.yml を書いて起動してみます。

```bash
services:
  firebird3:
    image: firebirdsql/firebird:3
    container_name: firebird-3
    restart: always
    ports:
      - "3053:3050"
    volumes:
      - ./data3:/var/lib/firebird/data
    environment:
      - FIREBIRD_ROOT_PASSWORD=************
      - FIREBIRD_USER=alice
      - FIREBIRD_PASSWORD=************
      - FIREBIRD_DATABASE=mirror.fdb
      - FIREBIRD_DATABASE_DEFAULT_CHARSET=UTF8
  firebird4:
    image: firebirdsql/firebird:4
    container_name: firebird-4
    restart: always
    ports:
      - "3054:3050"
    volumes:
      - ./data4:/var/lib/firebird/data
    environment:
      - FIREBIRD_ROOT_PASSWORD=************
      - FIREBIRD_USER=alice
      - FIREBIRD_PASSWORD=************
      - FIREBIRD_DATABASE=mirror.fdb
      - FIREBIRD_DATABASE_DEFAULT_CHARSET=UTF8
  firebird5:
    image: firebirdsql/firebird:5
    container_name: firebird-5
    restart: always
    ports:
      - "3055:3050"
    volumes:
      - ./data5:/var/lib/firebird/data
    environment:
      - FIREBIRD_ROOT_PASSWORD=************
      - FIREBIRD_USER=alice
      - FIREBIRD_PASSWORD=************
      - FIREBIRD_DATABASE=mirror.fdb
      - FIREBIRD_DATABASE_DEFAULT_CHARSET=UTF8
```

ちゃんと起動しているか確認してみます。

```bash
$ docker logs firebird-3
Changing SYSDBA password.
Creating user 'alice'...
Creating database '/var/lib/firebird/data/mirror.fdb'...
  ignoring /docker-entrypoint-initdb.d/*

Starting Firebird TCP/IP server version LI-V3.0.12.33787 Firebird 3.0
$ docker logs firebird-4
Changing SYSDBA password.
Creating user 'alice'...
Creating database '/var/lib/firebird/data/mirror.fdb'...
  ignoring /docker-entrypoint-initdb.d/*

Starting Firebird TCP/IP server version LI-V4.0.5.3140 Firebird 4.0
$ docker logs firebird-5
Changing SYSDBA password.
Creating user 'alice'...
Creating database '/var/lib/firebird/data/mirror.fdb'...
  ignoring /docker-entrypoint-initdb.d/*

Starting Firebird TCP/IP server version LI-V5.0.2.1613 Firebird 5.0
```

OS環境を汚さずに、こういうことが手軽に出来るのがありがたいですね。

ぜひ、FireibrdのDockerコンテナを楽しんでみてください。