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追記:イメージの作成に失敗する場合があるため、ビルド済み/保存したイメージファイルがあればビルドしないロジックを作りました。運用時はこちらをお使い下さい。
ビルドが完了し、イメージが保存されました。
作成したイメージを使って、ポッド内にコンテナを起動する流れになります。
ポッド内で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サーバのような他のコンテナを同時に動かして、連携させるやり方が一般的かと思われます。
一つのポッドの中で、アプリケーションに必要なコンテナを起動して組み合わせる・・・他のコンテナの起動は、よろしければこちらをご覧下さい。