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 をバージョンアップします。
参照したサイト・書籍
postgres / pgadmin4
https://github.com/postgres/pgadmin4- Dockerfile はトップ直下に、entrypoint.sh は /pkg/docker の下にあります。
pgAdmin - The config.py File
https://www.pgadmin.org/docs/pgadmin4/development/config_py.html
目次
- docker-compose.yml を変更する
- .env を変更する
docker-compose up -d
コマンドを実行する- 動作確認
- 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.0
→image: prom/prometheus:v2.29.2
に変更します。 - grafana で
image: grafana/grafana:7.4.3
→image: grafana/grafana:8.1.3
に変更します。 - redis_exporter で
image: oliver006/redis_exporter:v1.17.1-alpine
→image: 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.1
→REDIS_VERSION=6.2.5
RABBITMQ_VERSION=3.8.14-management
→RABBITMQ_VERSION=3.9.5-management
HAPROXY_VERSION=2.3.6
→HAPROXY_VERSION=2.4.4
POSTGRESQL_VERSION=12.6
→POSTGRESQL_VERSION=13.4
PGADMIN4_VERSION=5.0
→PGADMIN4_VERSION=5.6
FLYWAY_VERSION=7.5.4
→FLYWAY_VERSION=7.15.0
docker-compose up -d
コマンドを実行する
以下のコマンドを実行して docker image を更新・ダウンロードします(画面キャプチャはなし)。
docker-compose build --no-cache
コマンドを実行し、Dockerfile で作成している image を更新します。docker-compose up -d
コマンドを実行してコンテナ一式(メールサーバ・rainloop を除く)を起動します。
動作確認
http://localhost:1936/haproxy?stats にアクセスして RabbitMQ が起動することを確認します。
http://localhost:15672/ にアクセスして rabbitmq / 12345678 でログインし、rabbitmq1~3 が正常に動作していることを確認します。
clean タスク実行 → Rebuild Project 実行 → build タスクを実行して BUILD SUCCESSFUL のメッセージが出力されることを確認します。
http://localhost:9090/graph にアクセスして Prometheus の画面が表示されることを確認します。
http://localhost:3000/ にアクセスして admin / admin でログインし、画面が表示されることを確認します。
http://localhost:12000/ にアクセスして postgres@example.com / yyyyyyyy でログインし、画面が表示されることを確認します。。。が画面が表示されませんでした。
Docker のログを見ると /var/lib/pgadmin/sessions に書き込み権限がないという警告ログが出力されてコンテナが終了していました。原因の調査は後で行います。
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-cli
→ cluster nodes
コマンドを実行してクラスタ構成になっていることを確認します。
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 down
、docker-compose up -d
コマンドを実行してコンテナを再起動します。
http://localhost:12000/ にアクセスすると無事ログイン画面が表示されて、
postgres@example.com / yyyyyyyy でログインすると、登録済の情報で PostgreSQL に接続することができることが確認できました。
最後にローカルに残っている更新前のバージョンの Docker イメージを削除します。
履歴
2021/09/11
初版発行。