Raspberry Pi 4でPostgreSQLとPgAdmin4を簡単起動するには Podman版

Raspberry Pi 4でPostgreSQLとPgAdmin4を起動してみました。

Docker HubのイメージをPodmanで起動しましたが、以前インテル・アーキテクチャのDockerで使用させて頂いたdpage/pgadmin4イメージは起動できず、別のARM 64アーキテクチャのイメージを探す必要がありました。

というわけでRaspberry Pi用のイメージになりますが、PodmanでPostgreSQLとPgAdmin4を起動する手順を記録しておこうと思います。


PostgreSQLのロケールについて

-e POSTGRES_INITDB_ARGS="--encoding=UTF-8 --locale=C"

本当は、PostgreSQLのロケールに日本語「-e POSTGRES_INITDB_ARGS=”–encoding=UTF-8 –locale=ja_JP.UTF-8″ \」を指定したいのですが、エラーになってしまいます。

以前、Dockerでビルドが必要だったように、Podmanもビルドが必要なようです。

これは追々、Podmanの理解を深めてから対応したいと思います。いまのところはlocale=Cで起動しています。


Ubuntu 20.04.1 LTSのインストール

Raspberry Pi 4のOSですが。サーバとして長期間安定して使用できるように、microSDカードは使わず、USBストレージからUbuntuを起動しました。


Podmanのインストール

こちらの手順でPodmanをインストールします。


PostgreSQL, PgAdmin4起動設定

※21.1.31追記:

Podmanのバージョンアップの影響で、下記のYAMLファイルではポッドが正常に起動できない場合があります。

その場合、ポッドを手動で作成後、YAMLファイルを出力する必要が御座います。

手順は下記の記事を御覧ください。


ポッドの実行に使用する、Kubernetesのpod.yaml設定ファイルを作成します。

mkdir postgres
cd postgres
vi postgres-pod.yaml

次の内容になります。

# Generation of Kubernetes YAML is still under development!
#
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-2.0.6
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2020-09-20T06:57:40Z"
  labels:
    app: postgres-pod
  name: postgres-pod
spec:
  containers:
  - name: postgres-db
    env:
    - name: POSTGRES_PASSWORD
      value: pgadmin
    - name: POSTGRES_DB
      value: mydb
    - name: POSTGRES_INITDB_ARGS
      value: --encoding=UTF-8 --locale=C
    image: docker.io/library/postgres:latest
    ports:
    - containerPort: 5432
      hostPort: 5432
      protocol: TCP
    resources: {}
    securityContext:
      allowPrivilegeEscalation: true
      capabilities: {}
      privileged: false
      readOnlyRootFilesystem: false
      seLinuxOptions: {}
    workingDir: /
    volumeMounts:
    - mountPath: /var/lib/postgresql/data
      name: db-volume
  - name: postgres-adm
    env:
    - name: PGADMIN_DEFAULT_EMAIL
      value: admin
    - name: PGADMIN_DEFAULT_PASSWORD
      value: pgadmin
    image: docker.io/biarms/pgadmin4:latest
    ports:
    - containerPort: 5050
      hostPort: 5050
      protocol: TCP
    resources: {}
    securityContext:
      allowPrivilegeEscalation: true
      capabilities: {}
      privileged: false
      readOnlyRootFilesystem: false
      runAsGroup: 50
      runAsUser: 1000
      seLinuxOptions: {}
    workingDir: /
    volumeMounts:
    - mountPath: /var/lib/pgadmin
      name: adm-volume
  volumes:
  - name: db-volume
    hostPath:
      path: /home/ubuntu/postgres/db
      type: Directory
  - name: adm-volume
    hostPath:
      path: /home/ubuntu/postgres/pgadmin
      type: Directory
status: {}

PostgreSQLは/var/lib/postgresql/dataディレクトリ、PgAdmin4のファイル出力先/var/lib/pgadminディレクトリを永続化をしていますが、PgAdmin4は設定が永続化できていないような。後で調整しようと思います。

mkdir db pgadmin
sudo podman play kube ./postgres-pod.yaml

いつもの通り、podman play kubeでポッドを起動しました。このような感じで、コンテナが3つ起動します。

使用させて頂いたPgAdmin4は、TCPポート5050番で動作するようです。

http://<Raspberry PiのIPアドレス>:5050

永続化の確認のため、PgAdmin4からテーブルを作ってみました。

sudo podman pod stop postgres-pod
sudo podman pod rm postgres-pod

ポッドを停止・削除後、再度起動すると、先程作成したテーブルが表示されましたので、永続化の設定も問題ないかと思います。


日本語のロケールを使用するには、dockerの場合はdockerfileを作り、コンテナ起動時にlocaledefコマンドが動くように、イメージをビルドする必要がありました。

Podmanの場合も基本的に同じく、dockerfileとビルドに相当する操作を行えば良いと思うのですが。

具体的なやり方は、勉強中ということで。追々調べて記事に書き足そうと思います。

スポンサーリンク

フォローする

スポンサーリンク