1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Firebirdの公式Dockerイメージ

Posted at

Firebird の公式 Dockerイメージ

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

Firebirdプロジェクト公式Dockerイメージ 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でした。

$ 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 で確認します。

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

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

$ docker stop firebird-latest

docker-composeで起動する

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

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 でコンテナを起動します。

$ docker-compose up -d

isql から mirror.fdb に接続してみます。

$ docker exec -it firebird-latest isql -u SYSDBA -p '************' localhost:/var/lib/firebird/data/mirror.fdb

上記のコマンドを実行して、以下のように表示されればOKです。

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 を書いて起動してみます。

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

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

$ 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コンテナを楽しんでみてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?