かんがるーさんの日記

最近自分が興味をもったものを調べた時の手順等を書いています。今は Spring Boot をいじっています。

Spring Boot 2.4.x の Web アプリを 2.5.x へバージョンアップする ( その10 )( Docker コンテナの image をバージョンアップする )

概要

記事一覧はこちらです。

Spring Boot 2.4.x の Web アプリを 2.5.x へバージョンアップする ( その9 )( SpotBugs を 4.2.1 → 4.4.0 へバージョンアップする ) の続きです。

  • 今回の手順で確認できるのは以下の内容です。
    • Docker コンテナの image をバージョンアップします。

参照したサイト・書籍

  1. postgres / pgadmin4
    https://github.com/postgres/pgadmin4

    • Dockerfile はトップ直下に、entrypoint.sh は /pkg/docker の下にあります。
  2. pgAdmin - The config.py File
    https://www.pgadmin.org/docs/pgadmin4/development/config_py.html

目次

  1. docker-compose.yml を変更する
  2. .env を変更する
  3. docker-compose up -d コマンドを実行する
  4. 動作確認
  5. pgAdmin 4 のコンテナが起動しない問題を解消する

手順

docker-compose.yml を変更する

services:
  prometheus:
    image: prom/prometheus:v2.29.2
    ..........

  grafana:
    image: grafana/grafana:8.1.3
    ..........

  redis_exporter:
    image: oliver006/redis_exporter:v1.27.0-alpine
    ..........
  • prometheus で image: prom/prometheus:v2.25.0image: prom/prometheus:v2.29.2 に変更します。
  • grafana で image: grafana/grafana:7.4.3image: grafana/grafana:8.1.3 に変更します。
  • redis_exporter で image: oliver006/redis_exporter:v1.17.1-alpineimage: oliver006/redis_exporter:v1.27.0-alpine に変更します。

.env を変更する

HOST_IP_ADDRESS=192.168.3.4
REDIS_VERSION=6.2.5
REDIS_CLUSTER_1_PORT=6379
REDIS_CLUSTER_2_PORT=6380
REDIS_CLUSTER_3_PORT=6381
REDIS_CLUSTER_4_PORT=6382
REDIS_CLUSTER_5_PORT=6383
REDIS_CLUSTER_6_PORT=6384

RABBITMQ_VERSION=3.9.5-management
RABBITMQ_ERLANG_COOKIE=Uzkm93w5e1Lz8AcP
RABBITMQ_DEFAULT_USER=rabbitmq
RABBITMQ_DEFAULT_PASS=12345678
RABBITMQ_DEFAULT_VHOST=/

HAPROXY_VERSION=2.4.4

POSTGRESQL_VERSION=13.4
PGADMIN4_VERSION=5.6

FLYWAY_VERSION=7.15.0
FLYWAY_URL=jdbc:postgresql://postgresql/ksbylending
FLYWAY_USER=ksbylending_user
FLYWAY_PASSWORD=xxxxxxxx

POSTGRES_EXPORTER_USER=postgres_exporter
POSTGRES_EXPORTER_PASSWORD=zzzzzzzz

MAILSERVER_VERSION=release-v7.2.0
  • 以下の点を変更します。
    • REDIS_VERSION=6.2.1REDIS_VERSION=6.2.5
    • RABBITMQ_VERSION=3.8.14-managementRABBITMQ_VERSION=3.9.5-management
    • HAPROXY_VERSION=2.3.6HAPROXY_VERSION=2.4.4
    • POSTGRESQL_VERSION=12.6POSTGRESQL_VERSION=13.4
    • PGADMIN4_VERSION=5.0PGADMIN4_VERSION=5.6
    • FLYWAY_VERSION=7.5.4FLYWAY_VERSION=7.15.0

docker-compose up -d コマンドを実行する

以下のコマンドを実行して docker image を更新・ダウンロードします(画面キャプチャはなし)。

  1. docker-compose build --no-cache コマンドを実行し、Dockerfile で作成している image を更新します。
  2. docker-compose up -d コマンドを実行してコンテナ一式(メールサーバ・rainloop を除く)を起動します。

動作確認

http://localhost:1936/haproxy?stats にアクセスして RabbitMQ が起動することを確認します。

f:id:ksby:20210909062721p:plain

http://localhost:15672/ にアクセスして rabbitmq / 12345678 でログインし、rabbitmq1~3 が正常に動作していることを確認します。

f:id:ksby:20210909062919p:plain

clean タスク実行 → Rebuild Project 実行 → build タスクを実行して BUILD SUCCESSFUL のメッセージが出力されることを確認します。

f:id:ksby:20210909063646p:plain

http://localhost:9090/graph にアクセスして Prometheus の画面が表示されることを確認します。

f:id:ksby:20210909063906p:plain

http://localhost:3000/ にアクセスして admin / admin でログインし、画面が表示されることを確認します。

f:id:ksby:20210909064112p:plain

http://localhost:12000/ にアクセスして postgres@example.com / yyyyyyyy でログインし、画面が表示されることを確認します。。。が画面が表示されませんでした。

f:id:ksby:20210909064354p:plain

Docker のログを見ると /var/lib/pgadmin/sessions に書き込み権限がないという警告ログが出力されてコンテナが終了していました。原因の調査は後で行います。

f:id:ksby:20210909064547p:plain

WARNING: Failed to set ACL on the directory containing the configuration database:
           [Errno 1] Operation not permitted: '/var/lib/pgadmin'
HINT   : You may need to manually set the permissions on
         /var/lib/pgadmin to allow pgadmin to write to it.

IntelliJ IDEA の Service から redis-cluster-6379 コンテナに Create Terminal で接続して、redis-clicluster nodes コマンドを実行してクラスタ構成になっていることを確認します。

f:id:ksby:20210909064906p:plain

pgAdmin 4 のコンテナが起動しない問題を解消する

調べてみたところ、

  • ローカルの ./docker/pgadmin4/data を Docker コンテナの /var/lib/pgadmin にマウントしているが、マウントしているディレクトリの permission は変更できず、/var/lib/pgadmin/sessions の権限チェックに引っかかっているためエラーとなり起動しない。
  • https://www.pgadmin.org/docs/pgadmin4/development/config_py.html を見ると SESSION_DB_PATH という設定項目が存在し、デフォルトは SESSION_DB_PATH = os.path.join(DATA_DIR, 'sessions') だが別のパスに変更することができる模様。
  • docker-compose.yml で PGADMIN_CONFIG_+設定項目名で設定ができる。

という結果でしたので、sessions 用のディレクトリを /var/lib/pgadmin/sessions 以外の場所に作成し、適切な権限を付与して、かつ GADMIN_CONFIG_SESSION_DB_PATH を設定することで回避することにします。

docker/pgadmin4 の下に Dockerfile を新規作成し、以下の内容を記述します。

ARG PGADMIN4_VERSION
FROM dpage/pgadmin4:${PGADMIN4_VERSION}

USER root
RUN mkdir /var/lib/pgadmin_session
RUN chown pgadmin:pgadmin /var/lib/pgadmin_session
RUN chmod 0700 /var/lib/pgadmin_session

docker-compose.yml の pgadmin4 の記述を以下のように変更します。

  pgadmin4:
    build:
      context: ./docker/pgadmin4
      args:
        - PGADMIN4_VERSION=${PGADMIN4_VERSION}
    image: dpage/pgadmin4:${PGADMIN4_VERSION}-custom
    container_name: pgadmin4
    ports:
      - "12000:80"
    environment:
      # TZ=Asia/Tokyo を設定してみたが日本時間に変わらなかったのでコメントアウトしておく
      # - TZ=Asia/Tokyo
      # PGADMIN_DEFAULT_EMAIL には接続する PostgreSQL の ユーザ名を設定する(サーバを追加する時楽なため)
      - PGADMIN_DEFAULT_EMAIL=postgres@example.com
      - PGADMIN_DEFAULT_PASSWORD=yyyyyyyy
      # PGADMIN_CONFIG_CONSOLE_LOG_LEVEL は debug 用
      # 設定値は https://www.pgadmin.org/docs/pgadmin4/development/config_py.html の CONSOLE_LOG_LEVEL 参照
      - PGADMIN_CONFIG_CONSOLE_LOG_LEVEL=10
      - PGADMIN_CONFIG_SESSION_DB_PATH='/var/lib/pgadmin_session'
    volumes:
      - ./docker/pgadmin4/data:/var/lib/pgadmin
  • build の記述を追加します。
  • image: dpage/pgadmin4:${PGADMIN4_VERSION}image: dpage/pgadmin4:${PGADMIN4_VERSION}-custom に変更します。
  • environment に - PGADMIN_CONFIG_SESSION_DB_PATH='/var/lib/pgadmin_session' を追加します。

docker-compose build --no-cache コマンドを実行した後、docker-compose downdocker-compose up -d コマンドを実行してコンテナを再起動します。

http://localhost:12000/ にアクセスすると無事ログイン画面が表示されて、

f:id:ksby:20210911002858p:plain

postgres@example.com / yyyyyyyy でログインすると、登録済の情報で PostgreSQL に接続することができることが確認できました。

f:id:ksby:20210911003056p:plain

最後にローカルに残っている更新前のバージョンの Docker イメージを削除します。

履歴

2021/09/11
初版発行。