Dockerを使ってTsurugi環境構築を行う際の注意点

はじめに

このエントリは Tsurugi Advent Calendar 2023 の17日目のエントリです。前日は hishidama さんによる「 Tsurugiのdrop table 」でした。

Tsurugiに限らず、最近は手元で開発用のサーバー類を立ち上げたい場合、Dockerコンテナとして立ち上げるのが楽ですよね。簡単に環境を構築できて簡単に捨てられるので。

TsurugiももちろんDockerイメージが用意されているので簡単にサーバーを立ち上げて開発を始めることができます (公式のDockerユーザーガイドのリンク) 。 ただ自分がTsurugiのDockerコンテナを立ち上げた際にいくつか引っ掛かったことがあったので、このエントリではその内容について触れていきます。

Dockerイメージの入手と起動

TsurugiのDockerイメージは Github Container Registry 上で公開 しています。 次のように docker pull する際に ghcr.io を頭に付けると引っ張ってこれます。

docker pull ghcr.io/project-tsurugi/tsurugidb:latest

本エントリ執筆時点では latest タグで 1.0.0-BETA2 が落ちてきます。

バインドするポートを指定して起動すれば、そのまま立ち上がります。

docker container run -d -p 12345:12345 --name tsurugi ghcr.io/project-tsurugi/tsurugidb:latest

TCP12345ポートで接続を受け付けるので、SQLコンソールである TanzawaJava APIIceaxe で12345ポートに接続して利用します。

設定ファイルをホスト管理する方法とその際の注意点

Dockerコンテナとしてサーバーを管理していても、設定ファイル類などはホスト側で管理したいことが多いと思います。TsurugiのDockerイメージでは設定ファイル格納ディレクトリは /usr/lib/tsurugi/var/etc になっているので、このディレクトリをホスト側の任意のディレクトリとバインドマウントします。

docker container run -d -p 12345:12345 -v <ホスト側のパス>:/usr/lib/tsurugi/var/etc  --name tsurugi ghcr.io/project-tsurugi/tsurugidb:latest

ここでまず注意点があります。 /usr/lib/tsurugi/var/etc とバインドしたホスト側のディレクトリに設定ファイル tsurugi.ini が配置されていないと次のようなログを残してTsurugiが起動に失敗します。

could not launch tsurugidb, as cannot find any valid configuration file

設定ファイルが存在しない状態では起動できません。そのため必ずこのディレクトリに tsurugi.ini を配置して起動してください。

tsurugi.ini に記載する設定項目には初期値が設定されているため、ほとんどの項目は記載しなくても動きます。ですが datastore セクションの log_location だけは例外で、この設定が記述されていない場合 データが永続化されません 。 ただのオンメモリデータベースになってしまい、コンテナを停止して起動すると登録したデータが失われてしまいます。

TsurugiのDockerイメージでは $TSURUGI_HOME/var/data/logトランザクションログの保存ディレクトリとして作られているので、次のように設定を記入してください。

[datastore]
log_location=var/data/log

コンテナを削除してもデータを残す方法

コンテナとしてデータベースを利用している場合、データはコンテナ外に保存してコンテナを作り直しても継続して利用できるようにすることが多いと思います。

先にも書いたように $TSURUGI_HOME/var/data/logトランザクションログの保存ディレクトリであるため、このディレクトリをバインドすればいいです。次にボリューム (ここではボリュームの名前を tsurugivol としています) にマウントする例を示します。

docker container run -d -p 12345:12345 -v tsurugivol:/usr/lib/tsurugi/var/data --name tsurugi ghcr.io/project-tsurugi/tsurugidb:latest

以上、自分が引っ掛かった経験を元に注意点をまとめました。コンテナ技術を使えばお手軽に試すことができるので、みんなどんどんTsurugiで遊んでみてください。