Podman.exeで日本語ロケールのPostgreSQLポッドを作成するには 2022年11月版

Windows版Podman.exeを使って。

日本語ロケールのPostgreSQLイメージをビルドして。

日本語版のPostgreSQLコンテナを起動してみたいと思います。

もちろん、ポッドで使用することを想定しています。同じポッド内で、標準の管理ツールであるadminerも起動してみます。


日本語ロケールPostgreSQLイメージの作成

まずは、PostgreSQLの日本語ロケール版のイメージを構築します。

イメージは、コンテナを起動する時に使用するコンテナの元になるものです。

PostgreSQL運用ディレクトリを作成し、その中に「Containerfile.txt」を作成します。

rem PostgreSQL用のcontainerfile作成
mkdir pgsql
cd pgsql
notepad Containerfile.txt

次の内容になります。

FROM docker.io/postgres:latest
RUN localedef -i ja_JP -c -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8
ENV LANG ja_JP.UTF-8

※22.11.5追記:イメージのビルドが進まなくてフリーズする場合があるようです。原因はよくわかりませんが、元のイメージをpullしておいても一緒でした。20分ほど待っていたら進みましたので、進まない場合は少し待ってみて下さい。

podman image pull docker.io/postgres:latest

podman.exeコマンドでイメージをビルドします。名称はpostgres_jaにしてみました。

rem 日本語版PostgreSQLイメージ作成
podman image build -f Containerfile.txt -t postgres_ja

※22.11.20追記:イメージの作成に失敗する場合があるため、ビルド済み/保存したイメージファイルがあればビルドしないロジックを作りました。運用時はこちらをお使い下さい。

Windows版Podman.exeでイメージのビルドを効率化するには
Windows版のPodmanを利用させて頂いています。 イメージをビルドすると、なかなか負荷が大きいらしく。 このような感じで...

ビルドが完了し、イメージが保存されました。

作成したイメージを使って、ポッド内にコンテナを起動する流れになります。


ポッド内でPostgreSQLコンテナ実行

ポッドを作成し、コンテナを2つ実行しました。

PostgreSQLデータベース本体と、標準の管理ツールであるadminerの2つのコンテナです。

オプションは最低限で、パスワードの指定のみです。またadminerのポート番号8080をマップして、外部からアクセス可能にしました。(WSL2の場合、ローカルホストのみアクセス可能ですが

rem PostgreSQLポッド作成 コンテナはデータベースとadminer
podman pod create --name pgsql-pod -p 8080:8080
podman run ^
--restart always ^
--pod pgsql-pod ^
--name pgsql-db ^
-e POSTGRES_PASSWORD=Passw0rd' ^
-d postgres_ja
podman run ^
--restart always ^
--pod pgsql-pod ^
--name pgsql-admin ^
-d docker.io/adminer:latest

特にエラーもなく、問題なくコンテナが作られました。


adminerによる動作確認

ブラウザで、adminerに接続します。

http://localhost:8080

ログインに必要な情報です。

  • データベース種類:PostgreSQL
  • サーバ:127.0.0.1
  • ユーザ名:postgres
  • パスワード: -e オプジョンで指定した値 ここではPassw0rd

ログインすると、既定のPostgreSQLデータベースが表示されました。

「照合順序」欄を見ると、確かに日本語ロケールで動作していることがわかります。
データベース、管理ツールともに正常に動作しているようです。


PostgreSQLコンテナのボリュームマウントポイント

構築したPostgreSQLコンテナのデータは、どこに格納されるのでしょうか?

またそれは永続化・・・コンテナを削除してもデータは残るのでしょうか?

既定の動作を確認してみました。

ふむふむ。次のマウントポイントにボリュームがマウントされているようです。

  • /var/lib/postgresql/data

匿名ボリュームが上記のマウントポイントにマウントされているため、Podmanではポッドやコンテナを削除しても、ボリュームを消すまではデータが残ると思います。

また故障に備えたり、ポッドの履歴を残したい場合。こちらの内容を出力すれば、データ込みでポッドをバックアップできそうです。

さらっと。

rem pgsql-dbコンテナのボリュームバックアップ
podman container stop pgsql-db
podman run --rm --volumes-from pgsql-db -v .:/backup fedora tar zcvf /backup/pgsql-db.tar.gz /var/lib/postgresql/data
podman container start pgsql-db

PgAdmin4コンテナは動作が不安定な状況※22.11.5現在

管理ツールのPgAdmin4コンテナの起動手順も記載しておきますが。

podman container stop pgsql-admin
podman container rm pgsql-admin
rem PgAdmin4コンテナ起動
podman run ^
--restart always ^
--pod sv1-pod ^
--name pgsql-adm4 ^
-e 'PGADMIN_DEFAULT_EMAIL=<ユーザ名を入力>' ^
-e 'PGADMIN_DEFAULT_PASSWORD=Passw0rd' ^
-v .:/backup ^
-d docker.io/dpage/pgadmin4

どうも私のおうち環境では安定動作しません。

PgAdminコンテナは、TCPポート番号80番と443番を使用しています。

試しておらず、推測で恐縮ですが。1024より小さいポート番号で動作することから、Podman Machineをルートフルモードで起動する必要があるかもしれません。

今のところ、ルートレス環境での構築を目指しているため、ここでは試しません。


以上で、日本語ロケールのPostgreSQLイメージをビルドして、Podmanのポッドで動かす事ができました。

PostgreSQLコンテナは、ポッドで何かアプリケーションを作る場合のコンポーネントの1つになると思います。

よって、同じポッドの中で、Webサーバのような他のコンテナを同時に動かして、連携させるやり方が一般的かと思われます。

一つのポッドの中で、アプリケーションに必要なコンテナを起動して組み合わせる・・・他のコンテナの起動は、よろしければこちらをご覧下さい。

スポンサーリンク

フォローする

スポンサーリンク